我現在正在開發一個項目,它使用libserial進行Ubuntu下的串行端口通信。我們修改了libserial源代碼以允許MARK/SPACE奇偶校驗。但在進行數據接收測試時,有時(大約5%的機率)傳入的數據序列錯誤。第一個字節可以跳轉到傳入緩衝區的中間,甚至到最後。錯誤的libserial接收數據序列
問題出在原來的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;
經過測試,我發現問題只發生在我把串口讀/寫功能放到升壓線程上時。它在主線程中讀寫時運行得非常完美。但是我必須使用一個線程,任何可能的解決方案? – ruhoo