UNIX发送CR而不是LF

时间:2013-07-28 21:19:02

标签: c linux windows

我在C中编写应用程序,通过驱动程序和计算机之间的串行端口进行通信。 当我使用白蚁1.8在Windows上测试应用程序时,我添加了Append LF选项,一切正常。但是当我运行Linux并打开putty或screen时,我的驱动程序没有响应。

所以我对“终点线”主题有所了解。但在那之后我在linux上做了很多改动它仍然没有用。 下一步是从串口输出每个位,当我输入“help [ENTER]”时,我得到了:

- 在Windows(白蚁)“帮助” - > 0x68(h)0x65(e)0x6c(l)0x70(p) 0x0a(CR:回车,U + 000D)

- 在Ubuntu上(使用屏幕和putty结果相同) “帮助” - > 0x68(h)0x65(e)0x6c(l)0x70(p) 0x0d(LF:换行,U + 000A)

我的结论是,在我的情况下,与维基百科上描述的相反(如果是“标准”程序)

最后我的问题:“是否有可能设置putty / screen或者可能下载其他程序用于linux的手动设置ENTER键的符号?”

1 个答案:

答案 0 :(得分:2)

Linux将新行(= LF = 0x0A)视为行分隔符。但是,如果您将一个哑终端连接到一个串行端口并按下RETURN键,它将发送一个CR(0x0D)。因此,在正常的串行输入上,当接收到CR时,驱动程序用NL替换它。

另一方面,当您将NL打印到串行端口时,Linux将其更改为CR / LF,因为这就像哑终端想要的那样。 (这可以追溯到远程类型,其中CR备份到行的开头但保持在行上并且LF前进到下一行。)

您想在Linux上执行的操作是将终端设置为“原始”模式。这可以使用shell命令“stty raw”或使用termios来完成,但我不记得这些选项。这将关闭回声,退格处理,control-C,所有字符转换。然后,您将拥有一个原始管道,其中您在一端发送的内容在另一端完全接收。

显然,你需要在Windows上做同样的事情,虽然我不知道如何。