【发布时间】:2016-09-19 15:31:43
【问题描述】:
我正在使用串行通信接口;运行 Linux Kernel 2.6.36 的 SBC (TS-7200) 通过 RS232 将数据发送到 PC(运行 Windows)。数据被封装在数据包中(每个字节的字节)并发送。当 TS 尝试发送整数 (uint8_t)(10) 时会出现此问题,尤其是 \n 的 ASCII,终止字符 (0xA);不是随机的吧?!
奇怪的是,如果我用一个Arduino Uno做同样的精确操作,一个整数10的发送和接收都没有问题!所以我的结论是,Linux 像 \n 一样采用0b00001010,刷新串行缓冲区并且不发送 10,而 Arduino 没有。在网上搜索我发现可以在二进制模式(O_BINARY)或文件模式打开文件,但显然这在Linux中不可用;是对的吗?有没有办法让 Linux 表现得像 Arduino?
谢谢你, 费德里科
PS:我忘了说我正在使用 C
【问题讨论】:
-
如何发送一个带值的整数,比如
1000? -
在 Linux 上你不需要
O_BINARY,因为就像几乎所有正常的操作系统一样,它不会对行尾字符进行任何转换。只有 Windows 具有奇怪的 CR+LF 行结尾,您需要O_BINARY。 -
我打开串行通信:
COM2 = open("/dev/ttyAM1", O_RDWR | O_NONBLOCK);并写我使用bytes_writed=write(COM2, number, 1); -
@WeatherVane 我已经看过那篇文章,但我会说 Windows 对应的工作正常(LabVIEW 默认情况下会这样做,我猜(?)),否则你会如何解释它与 Arduino 一起工作而不是 TS?
标签: c linux binary serial-port