0

我的问题是——你如何在 uCLinux 2.6.21 中同步调用 write(),即在发送结束之前调用没有完成?现在我有以下代码:

//...
fd = open (PORT, O_RDWR | O_SYNC)
//...

FIO3CLR |= 0x30000000; // RTS = 0 (enable transfer)
write (fd, "A", 1) // pass
FIO3SET |= 0x30000000; // RTS = 1 (disable transfer)

命令FIO3SET |= 0x30000000;在调用 后几乎立即开始执行write(),因为它是不可取的任务。谢谢。

4

2 回答 2

0

tcdrain() 一直等待,直到写入 fd 引用的对象的所有输出都已传输完毕。它解决了我的问题 C read call blocking on serial port operation

于 2013-03-28T04:19:36.057 回答
0

我的猜测是您应该设置 TTY 属性,并且如果您设置了属性,Linux 内核将执行 RTS/CTS 处理。有关完整示例,请参见http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html。我猜想回答你问题的部分是这样的:

newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; // CRTSCTS is set here
//...
tcsetattr(fd,TCSANOW,&newtio);
于 2013-03-27T07:23:53.303 回答