2013-12-07 160 views
0

我已經閱讀了很多問題和答案,但沒有找到任何解決方案。可能是我的問題不對,但我需要一些指導。我在使用從我的Arduino設備讀取數據的Linux中使用串行端口。無論何時我想從Arduino發送數據到Linux,我都會首先發送兩個字節,表示來自Arduino的總字節數。我將這兩個字節轉換爲整數值並開始從串行端口讀取數據。再說了,我想從Ardiuno發送300個字節的Linux,我只是寫{1,44},然後再由下式這個1和44字節轉換成INT:從串口Linux讀取NULL字符C

char data[] = {1, 44}; 
int to_read = data[0] 
to_read = to_read << 8; 
to_read = to_read | data[1]; 
return to_read; 

這會給我300 int值,這就像魅力一樣工作。但是當我必須讀取少於255的數據時纔會出現問題。假設我想讀取100個字節,那麼前兩個字節將是{0,100}。 0是空字符,串口不處理它(我手動寫0到串口,它總是給我寫0字節),並且我的所有序列都出錯了。所以我的問題是我可以從串口閱讀空字符或有人請給我更好的解決方案..

在此先感謝。

+2

理由#爲什麼我恨它,當人們談論字符時說「空」 18。 「Null」基本上意味着「無值」 - 即:它位於允許值的範圍之外 - 而「空字符」是代碼爲0的字符。IE:允許的值,如果有點奇怪的話。請用NUL代替;這就是ASCII表格中的內容。 :P – cHao

+1

要點是,字符0仍然是一個正常字符。它恰好也對C具有特殊含義,當使用nul結尾的字節串*時。另一方面,串行端口並不在乎。 – cHao

+0

您可能想向我們展示代碼如何在兩側設置串行設備,以及如何通過這些設備發送和接收數據。 – alk

回答

1

我得到了我的問題解決。當在C中處理字節時,不要將字節(char)與字符串混淆,就像我正在處理字節數組(char data [])並且當我試圖在串行端口上使用write方法寫入長度爲strlen的數據時),我只是得到那些不是空的字節。 strlen返回看到第一個空字符\0後的數據長度,因爲這樣我沒有收到我想要的輸出。我所做的是,如果我想要寫數據char data[] = {0, 4}然後我會做這樣的事情:

char data[] = {0, 4}; 
write(serial_port_fd, data, 2); 

告訴write函數寫2個字節。這將寫0和4,如果我寫的東西是這樣的:

char data[] = {0, 4} 
write(serial_port_fd, data, strlen(data)); 

這將寫NOTHING

還有一件事,如果你想在串口上編寫不可打印的字符(字節值爲0到32),那麼確保你已經配置了串口用於原始輸入和輸出。在本指南上一看:

http://www.cmrr.umn.edu/~strupp/serial.html#config