我正在通过半双工RS-485协议以9600bps读取连接在UART串行端口上的流,数据:8位,停止1位与嵌入式设备无奇偶校验。
我知道我连接的系统以20ms的间隔发送2字节到10字节之间的二进制命令。
我使用以下标志访问流:
uart0_filestream = open(COM_UART_DEV, O_RDWR | O_NOCTTY | O_NDELAY);
但是,经常发生的是,10个字节长的命令将被分成两半,导致我的应用程序出现校验和错误。我需要每20毫秒进行一次轮询,我发现的唯一解决办法就是缩短民意调查之间的休眠时间,这是我不想要的。
在读取流缓冲区的内容之前,是否有标志或智能方法可用于确保传输完成?
答案 0 :(得分:0)
好的,我找到了一个可以满足我需求的解决方案。由于我无法确定当我将读取流的内容时,所有数据都将存在,我不想增加我的轮询间隔,正如@sawdust建议的那样,我提高了轮询率:
sed
我首先将轮询率提高到8毫秒。因为我知道我可以接收的最长命令是10个字节长,所以我读取直到校验和有效或者内容读取长度为10个字节并且在轮询之间再睡2ms。这在现在表现得非常好。