繁体   English   中英

自由接收数据的顺序错误

[英]wrong sequence of libserial received data

我现在正在一个使用libserial在Ubuntu下进行串行端口通信的项目。 我们修改了libserial源代码以允许MARK / SPACE奇偶校验。 但是在进行数据接收测试时,有时(大约5%的机会)输入的数据顺序是错误的。 第一个字节可以跳到传入缓冲区的中间,甚至跳到结尾。

问题出在原始SerialPort::SerialPortImpl::HandlePosixSignal( int singnalNumber) f ,当错误发生时它无法正确读取某些字节,并且错误描述为“资源暂时不可用”。 但是,既然已经使用ioctl获得了num_of_bytes_available ,那么怎么可能失败呢?

在测试期间,我经常在MARK / SPACE奇偶校验之间切换。 那会引起问题吗?

SetParity函数中的修改部分

for **PARITY_SPACE**

port_settings.c_cflag |= CMSPAR | PARENB;

port_settings.c_cflag &= ~PARODD;

port_settings.c_iflag = 0;

for **PARITY_MARK**

port_settings.c_cflag |= CMSPAR | PARENB;

port_settings.c_iflag = 0;

好的,我终于弄清楚是什么原因引起的。 libserial SerialPort类不是线程安全的。 POSIX信号可能与增强线程冲突。 我可以通过切换到SerialStream类来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM