2010-07-06 69 views
0

我使用C語言和Linux作爲我的編程平臺。現在我正在學習一些嵌入式編程。我正在使用POS設備進行練習,我的主機是使用cygwin的Windows操作系統。需要換行字節發送該數據

我創建了一個簡單的應用程序,它將在目標設備上運行,它將讀取串口中的數據,並在主機端創建一個簡單的應用程序,將數據寫入串口。現在我的問題是,當我在緩衝區末尾發送沒有0x0a(LN)的數據時,目標設備將無法接收該數據。但我不確定這是否被髮送。但是當我將一個0x0a(LN)放在緩衝區的末尾發送時,目標設備將接收到該數據。

我錯過了我的應用程序的一些配置?或者在tx緩衝區末尾放一個0x0a字節是正確的方法。

謝謝

回答

2

聽起來像你的串口(實際上就Linux而言,'終端設備')可能處於線路緩衝模式。當用tcsetattr進行設置時,一定要清除c_lflag(你不需要ICANON)。您還應該查看影響CRLF和NL之間轉換的輸入/輸出標誌,因爲您可能不想要這種行爲。默認終端設置面向用戶/應用程序交互,而不是數據傳輸。

+0

此外,如果您使用stdio而不是低級別的POSIX'write',請確保您在stdio級別禁用緩衝。 'setbuf(f,NULL);'應該這樣做。 – 2010-07-06 05:32:38

0

聽起來像是在做線緩衝。發送數據後進行刷新。

相關問題