libserial收到的数据的错误序列

我现在正在研究一个在Ubuntu下使用libserial进行串口通信的项目。 我们修改了libserial的源代码,以允许MARK / SPACE奇偶校验。 但在进行数据接收testing时,有时(大约5%的几率)传入的数据序列是错误的。 第一个字节可以跳到input缓冲区的中间,甚至到最后。

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

在我的testing中,我经常在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类来解决问题。