我的问题是 - 如何在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()
后立即执行,因为这是不受欢迎的任务。
感谢。
答案 0 :(得分: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);
答案 1 :(得分:0)
tcdrain()等待直到发送到fd引用的对象的所有输出。 它解决了我的问题 C read call blocking on serial port operation