[英]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.