我的应用程序能够与4800,9600和115200等波特率通信,但不能与14400或38400通信。
有关自定义串行速度设置如何工作的非常好的文章: https://github.com/npat-efault/picocom/blob/master/termios2.txt 。
简而言之,给出了一个 struct termios2 由...确定 tty ,要将输入和输出速度设置为自定义值,您必须
struct termios2
tty
tty.c_cflag & CBAUD == BOTHER
tty.c_ospeed
或
(tty.c_cflag >> IBSHIFT) & CBAUD == B0
(tty.c_cflag >> IBSHIFT) & CBAUD == BOTHER
tty.c_ispeed
你没有做其中任何一个。我不确定为什么这会导致一些速度的错误通信而不是其他速度,但是驱动程序被认为是用速度设置玩一些有趣的游戏,也许你偶然发现了一个。
至于
read 函数后不返回 VTIME
read
VTIME
我认为你有不正确的期望。你在设置 VMIN 和 VTIME 两者都是非零值。在这种情况下, VTIME 是最大的 字符间 时间,而不是整体读取超时。使用这些设置,阻塞读取将无限期地等待第一个字符,然后将继续读取后续字符,直到所请求的数字,只要每个字符到达 VTIME 前一个的十分之一秒。
VMIN
如果你想要每个人的整体超时 read() 打电话,然后设定 VMIN 到0,并为一些人做好准备 read() 调用读取0个字节。一如既往, read() 也可能读取正数字节但少于请求的字节数。根据您的选择,这种配置可能比您目前使用的配置更有可能发生 VTIME 以及同伴的行为。
read()