Kri*_*ina 21 echo serial-port cat
所以我有一个标准的 RS232 串行端口,它通过简单地从 Tx 到 Rx 运行一条线来环回自身。我正在通过运行echo
和cat
在两个单独的终端中测试环回:
cat /dev/ttyS1
echo "hi" > /dev/ttyS1
Run Code Online (Sandbox Code Playgroud)
我的问题是输出。我希望在运行 cat 的终端上看到一个“嗨”回来,但我得到了这个:
hi
[2 newlines]
hi
[4 newlines]
hi
[8 newlines]
hi
[16 newlines]
hi
[32 newlines]
hi
Run Code Online (Sandbox Code Playgroud)
...依此类推,直到 I ctrl+ c cat
。
打断 cat 后,如果我再次运行它,它不会输出“hi”,直到我第二次运行 echo。
这是正常的吗?知道为什么我会看到这种行为吗?
编辑:换行,我的意思是 ASCII 0x0A
。此输出中没有回车。
Kri*_*ina 23
感谢布鲁斯的第二条评论,我能够自己找出问题所在。
运行后stty -a -F /dev/ttyS1
,我发现有 3 个选项会导致该问题:“echo”、“onlcr”和“icrnl”。
由于这个串口是环回自身,下面是运行后发生的情况echo "hi" > /dev/ttyS1
:
echo
命令默认在消息末尾附加一个换行符,因此“hi”+ LF 被发送到 /dev/ttyS1等等...
为了解决这个问题,我运行了以下命令:
stty -F /dev/ttyS1 -echo -onlcr
Run Code Online (Sandbox Code Playgroud)
禁用“echo”可防止消息无限循环,禁用“onlcr”可防止串行设备在输出时将 LF 转换为 CRLF。现在cat
收到一个“喜”(与单个新行!)每次我运行时间echo
。
CR = 回车(ASCII 0x0D);LF = 换行符或换行符 (ASCII 0x0A)
小智 5
我在将文件连接到串行 tty 以进行测试时也遇到了类似的问题。除了接受的答案:
如果您通过执行以下操作来测试串行输出:cat somefile.txt > /dev/ttyS0
,如果您正在测试确切的字节值,它将有大量意外的字节数据。
用stty
做一个简单的stty raw -F /dev/ttyS0
将停止从插入端子/更换字符(例如[...] 0x0A [...]
- > [...] 0x0D 0x0A [...]
)。该raw
标志更改终端的模式,因此不执行输入和输出处理。
归档时间: |
|
查看次数: |
26027 次 |
最近记录: |