问题标签 [termios]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
780 浏览

c - Linux termios参数解读

我一直在尝试在装有 Linux (Debian Wheezy) 操作系统的 Olimex A13 机器上设置串行端口。要设置参数以设置 UART,我使用的是termios结构。就我而言,我只是在parameter = value下面设置一个...

我还在互联网上看到了如下示例代码...

在上述情况下,参数分配似乎使用按位运算符来设置参数。
我的问题是,如何解释上述作业?

例如:怎么...

解释为...

???

同样的:如何...

解释比较...

???

termios 标志真的是一组位,其中参数对应于标志中的特定位位置吗?
由于这些值是由参数(即 CLOCAL、CREAD)设置的,所以在设置flag =参数时,位操作符是多余的吗?
如果有人能澄清这一点,我将不胜感激。

0 投票
0 回答
192 浏览

c - 无法获取串口配置的属性

Helo,我一直在尝试使用 tcgetattr 检索串行端口的配置,并且我能够在第一次获得正确的值。当我更改相应参数的值时,我得到的返回值是以前返回的重复。如果有人知道请帮忙。当串行端口连接处于活动状态并正常工作时,我尝试了这个。

0 投票
1 回答
2502 浏览

c++ - 树莓派 uart 波特率锁定在 9600

我一直在使用带有 USB 到 rs232 转换器的树莓派,但现在我必须使用树莓派的 UART 引脚,但我遇到了一个愚蠢的问题。

我在 C 中使用 termios.h 库(http://en.wikibooks.org/wiki/Serial_Programming/termios),它与转换器配合得很好,但是当我使用 UART 引脚时,我将波特率设置为

波特率仍可在 9600 下工作。还有其他设置与 termios 库有关吗?如果不是,我应该怎么做才能改变波特率?

我也尝试过波特率 4800,当我使用 UART 时它仍然适用于 9600,但使用 USB 到 rs232 转换器时没有问题。

我正在使用图书馆

https://github.com/irukeru/TermiosSerialCom

我已经修改了,其他设备没有问题。

0 投票
1 回答
52489 浏览

linux - Linux 阻塞与非阻塞串行读取

我有这段代码用于从 Linux 中的串行读取,但我不知道在读取串行端口时阻塞和非阻塞有什么区别,在哪种情况下哪个更好?

0 投票
1 回答
428 浏览

c - 带有 termios 的 C 中的串行 I/O:不可靠的输出大小写

我有一个非常小的 C 程序,它向串行设备发送和接收以换行符结尾的 ASCII 字符串。它通过 USB 适配器插入我的计算机,在/dev/ttyUSB0.

大多数时候它发送的命令只是 find,但偶尔它会将所有小写字母大写。它只留下所有特殊字符。

我发送的字符串是/home\n. 大约每五次我运行程序(通过简单地运行./a.out而不重新编译),设备理解的发送消息是/HOME\n.

这是我的源代码:

和 zserial.c:

我究竟做错了什么?是否有一些 termios 标志可以修改串行端口上的输出?

0 投票
1 回答
354 浏览

c - POSIX C 串行端口写入剪切缓冲区

3我有一个小的 C 程序,用于通过串行端口读取和写入十六进制数据。在阅读时我没有问题,但是当我尝试这样编写十六进制数据时:

我看到写入函数仅通过串行端口发送 5 个字节……所以我想它出于任何原因将十六进制数据剪切为“0x00”字符。在我的串口设置下面:

写入数据的函数是:

我调用函数 write_data 如下:

这适用于其他二进制数据:

在这种情况下,写入函数将所有正确的字节写入串行端口。只有cmdActuatorOn没有,所以我认为 0x00 是问题所在。

我的错误在哪里?我的串口配置错误?我将其设置为与原始模式一起使用...不正确吗?

非常感谢

0 投票
3 回答
703 浏览

c - Any way to process escape key in canonical mode?

In unix plain C termios programming, if I am using canonical mode to receive a line of input from the user, how can I process the escape key? In general, if the user is entering a line of text and presses escape nothing happens. I would like to cancel the current input if the user presses escape. I know I can process individual characters, but then I lose all the benefits of canonical mode (backspaces, etc).

0 投票
1 回答
2332 浏览

c - 在没有 O_NONBLOCK 标志的情况下,在 OS X 上打开串行端口会永远挂起

我有一个串行到 USB 转换器(FTDI,从http://www.ftdichip.com/Drivers/VCP.htm安装的驱动程序)将串行设备连接到 MacBook Air。它在 MacBook 上显示为/dev/cu.usbserial-A4017CQY/dev/tty.usbserial-A4017CQY无论我使用这两个中的哪一个,我描述的所有行为都是相同的。

编辑:使用/dev/cu.*确实解决了问题。我不确定为什么当我第一次发布这个问题时它似乎不起作用。感谢duskwuff 为我指明了正确的方向,尽管他的TTY 名称倒过来了:/dev/tty.*将等待流量控制,而/dev/cu.*不会。

open()我遇到的第一个问题是,如果我不使用该O_NONBLOCK标志,系统调用将永远阻塞。使用该标志,我得到了一个很好的文件描述符,但write()似乎并没有真正写入(尽管它返回很好,声称已写入字节),并且read()失败并出现错误“资源暂时不可用”。

stty -af /dev/cu.usbserial-A4017CQY显示设置就好了,但是如果我尝试使用类似的命令更改它们,stty -f /dev/cu.usbserial-A4017CQY -clocal当连续调用stty.

如果我select()在读/写之前等待设备准备好,它会在短时间内报告它已准备好写入,但永远不会读取。这与如何write()毫无怨言地完成,而read()失败。请注意,写入的数据从未真正进入设备。

我为调试而编写的整个测试程序如下:

0 投票
2 回答
6444 浏览

c - 使用 termios.h 在 C 程序中询问用户输入时,如何使箭头键和退格键正常工作?

所以我有以下代码,它基本上只是读取用户输入的字符并打印它们,直到输入'q'。

在主要功能的开头,我关闭了规范模式,以使用户能够在他给出输入时看到他的输入。我还关闭了回声,例如,当按下向上箭头键时,不会弹出诸如“^[[A”之类的东西。这可行,但我也可以将光标移动到终端窗口的上排,这并不好。有没有办法解决这个问题,使用户只能在当前行内移动?

另一个问题是退格。当我按下它时,程序会打印一个奇怪的符号(我假设它是 0x7f),而不是擦除光标当前位置左侧的字符。我应该以某种方式适当地处理程序中的退格键输出,但我不知道该怎么做,因为它是这个奇怪的十六进制数字。对此有什么建议吗?

我也一直在考虑使这项工作的一个选项是使用规范模式,以便自动使用箭头键和退格功能。但是,规范模式逐行工作,因此在用户点击“Enter”之前不会出现文本。到目前为止,我还没有想出任何方法让用户在打字时看到他的输入。这甚至可能吗?

拜托,没有 ncurses 或 readline 建议。我想使用 termios.h 来做到这一点。

0 投票
1 回答
51 浏览

c - 如何在非规范模式下使用中断/终止信号?

这是一个无需按回车即可获取字符的代码。

在这段代码中,如何在非规范模式下使用中断/终止信号?