2013-07-28 54 views
0

我正在用C編寫應用程序,它通過驅動程序和計算機之間的串行端口進行通信。 當我在使用白蟻1.8的Windows上測試應用程序時,我添加了Append LF選項,並且一切正常。但是當我運行Linux並打開膩子或屏幕時,我的驅動程序沒有響應。UNIX發送CR而不是LF

所以我有紅色的關於「行尾」的話題。但之後,我在linux上做了很多改變,但仍然無法正常工作。 下一步是從串行geting每個位,當我輸入「help [ENTER]」我得到:

- 在Windows(白蟻)「幫助」 - > 0x68(h)0x65(e)0x6c(l)0x70 (p)的0X0A(CR:回車,U + 000D)

-On Ubuntu的(使用屏幕和油灰導致相同) 「幫助」 - > 0x68(H)0x65(e)中0x6c(L) 0x70(p)0X0D(LF:換行,U + 000A)

而我的結論是,在我的情況是比成反比維基百科上的discribed(在thise 「標準」 程序的情況下)

最後我的問題是:「是否可以設置膩子/屏幕或可能下載其他程序的Linux有手動設置ENTER鍵的符號?

+2

'stty'命令具有選項'onlcr'來將NL映射到輸出上的CR-NL(CRLF)。你也許可以利用它,但你也必須擔心終端仿真器。還有其他相關的選項,例如'ocrnl'和'onocr'和'onlret'來進行調查。關於Unix的最初的嘲諷意見之一是「Unix非常聰明,可以模仿任何其他系統,而其他系統足夠愚蠢,無法相信它」。 –

回答

2

Linux將新行(= LF = 0x0A)視爲行分隔符。但是,如果您有一個連接到串口的啞終端並按下RETURN鍵,它將發送一個CR(0x0D)。因此,在正常的串行輸入中,當收到CR時,驅動程序會用NL替換它。

另一方面,當你打印一個NL到串口時,Linux將它改變爲CR/LF,因爲這就是啞終端想要的。 (這可以追溯到CR備份到線路的開頭,但留在線路上並且LF前進到下一線路的通信類型)。

你想在Linux上做什麼是將終端設置爲「原始「模式。這可以通過shell命令「stty raw」或termios完成,儘管我不記得這些選項。這將關閉回聲,處理退格,控制C,所有字符翻譯。然後,您將擁有一個原始管道,您可以在其中一端發送的內容完全接收。

很明顯,你需要在Windows上做同樣的事情,儘管我不知道如何。