gpt4 book ai didi

c - 强制传输C中的所有串行数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:27 25 4
gpt4 key购买 nike

我在使用 C 语言的串行端口时遇到了计时问题。长话短说,我以一种波特率(比如 9600)向设备发送命令,并期望它以另一个波特率(比如 38400)得到响应。我无法控制此协议(protocol)。这种情况的原型(prototype)如下所示:

 open() serial port
set baud rate to 9600 using termios struct
write() command
change baud rate to 38400 using termios struct
read() response

我遇到了一个问题,设备不理解我发送的命令,因为波特率在完成写入之前更改为 38400。我很确定 write 工作正常,因为它返回我打算写入的字节数。我尝试在 write 调用之后添加一个 usleep(100000),虽然有时可以,但我不能保证在更改波特率和读取响应之前整个消息将以 9600 传输。我也尝试用 tcflush(fd, TCOFLUSH) 刷新缓冲区,但我不想丢弃任何数据,所以这也不是正确的方法。

如何强制写入所有串行数据并确保在下一次将波特率更改为 38400 之前写入?这似乎发生在芯片级,所以我唯一的希望是包括 FTDI 库(它是一个 FTDI 芯片)并访问寄存器以查看数据何时传输完成?谢谢。

最佳答案

使用带有包含 EV_TXEMPTY 的掩码的 WaitCommEvent 来等待驱动程序发出消息。

关于c - 强制传输C中的所有串行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com