2011-06-22 25 views
0

我現在正在開發一個項目,它使用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; 
+0

經過測試,我發現問題只發生在我把串口讀/寫功能放到升壓線程上時。它在主線程中讀寫時運行得非常完美。但是我必須使用一個線程,任何可能的解決方案? – ruhoo

回答

1

好吧,我終於想通了,是什麼原因導致的問題。 libserialSerialPort類不是線程安全的。一個POSIX信號可能與boost線程衝突。我能夠通過切換到SerialStream類來解決問題。

+2

不要忘了,你可以接受你自己的答案! –

相關問題