我正在尝试编程一个机器人,它在某些串行端口(即ttys9)上有驱动程序。
通过cutecom(作为十六进制输入),我可以发送以下输入,这给了我预期的结果:

5aaa0700fffff000

现在,我试图用一个c程序实现同样的结果,它执行以下操作:
int port9 = open("/dev/ttyS9", O_RDWR | O_NONBLOCK);

char buff[17] = "5aaa0700fffff000";

write(port9, buff, 16);

我还尝试用十六进制值分别初始化buff
buff[0] = 0x5;
buff[1] = 0xa;

等等。
两者都不起作用。是我的代码有问题,还是司机有问题?
我使用gcc编译,然后用sudo运行它。open函数还返回正确的值(没有错误)以及write。

最佳答案

用字符串填充字符数组将把字符转换成它们的ascii表示形式,而不是十六进制。

char buff[17] = "5aaa0700fffff000"; // Incorrect for saving 0x5aaa0700fffff000 to buff

如我所见,你想在串行端口上写8字节0x5aaa0700fffff000,一个字符是8位(1字节),你必须发送8字节而不是16,所以代码应该是这样的
buff[0] = 0x5a;
buff[1] = 0xaa;
...
write(port9, buff, 8);

关于c - 在Linux中写入串行端口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41184715/

10-12 18:52