2014-02-27 58 views
0

我正在使用Linux下的c編程語言,嘗試使用串口創建通信應用程序。該程序正在將數據發送到串行端口並從微控制器讀取接收到的數據。接收到的數據可以達到10到64之間的任何字節數,但不多也不少。我使用下面的代碼來讀取和寫入數據:無法從串口讀取超過8個字節

unsigned char send_bytes[] = { 0x1, 0x6, 0x2, 0xAA, 0x2, 0x3, 0xB8, 0x4 }; 

int w = write(fd, send_bytes, sizeof(send_bytes)); // send 

char buffer[64]; 

int r = read(fd, buffer, sizeof(buffer)); //read data 

我的問題是r永遠不會超過8個字節的數據。有誰知道這是爲什麼?

在此先感謝。

+0

'int read',對函數和變量使用不同的名稱。不要混合它們。 –

+0

對不起,他們沒有被命名爲相同。我是這樣寫的,現在已經修好了。 – user2081328

+0

嘗試添加後續的'read'函數並查看它們返回的內容。 –

回答

1

也許你的操作系統只提供8個字節的串口緩衝,所以它「有利於」以8字節的塊傳送輸入數據。

只要有可用數據,重複讀取操作。您可以在可用的系統上使用select()。另外,由於另一端是一個微控制器,它可能比你的工作站慢得多,所以當你執行read()時,可能數據根本不可用。當然,這是再次嘗試的另一個原因。

+0

我使用的是64位操作系統,所以可以一次讀取8個字節,但是當我嘗試循環低谷數據時,它會給出錯誤信息。 – user2081328

+0

@ user2081328對不起,但這沒有任何意義。這不是你的平臺是否是64位的問題。而「它給了他們錯誤」並不是很精確,所以很難以此爲基礎提供幫助。 – unwind

+0

單片機按特定的順序發送字節,程序可以讀取並解釋它們。當我在C#程序的窗口中讀取數據時,它以正確的順序給了我整個字節流,但是當我在linux中嘗試這樣做時,它只給出了前八個字節。當我嘗試循環並重復讀取時,前八個字節是正確的,但其他字節不正確,但它們沒有任何意義。我知道它正在讀取字節,因爲在端口上沒有任何內容需要讀取程序塊。 – user2081328