0

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

所以我对“行尾”的话题很感兴趣。但是在那之后我在linux上做了很多改变它仍然没有工作。下一步是从 Serial 中获取每个位,当我输入“help[ENTER]”时,我得到了:

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

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

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

最后我的问题是:“是否可以设置腻子/屏幕或下载其他具有手动设置 ENTER 键符号的 Linux 程序?”

4

1 回答 1

2

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

在另一个方向上,当您将 NL 打印到串行端口时,Linux 会将其更改为 CR/LF,因为这是哑终端想要的。(这可以追溯到电传打字机,其中 CR 备份到行首但保持在行上,而 LF 前进到下一行。)

您想要在 Linux 上做的是将终端设置为“原始”模式。这可以使用 shell 命令“stty raw”或使用 termios 来完成,尽管我不记得这些选项。这将关闭回显、退格处理、控制-C、所有字符翻译。然后,您将拥有一个原始管道,您在一端发送的内容在另一端准确接收。

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

于 2013-07-29T00:01:46.007 回答