这是我的一段代码。我会在之后解释问题。GIOChannel有时它读取有时不是
GIOStatus ret;
GError *err = NULL;
gchar *msg;
gsize *len;
ret = g_io_channel_read_chars (koncentrator, &msg, 13, &len, err);
printf ("Read %u bytes: %hx\n", len, msg);
我的设备通过串口发送13个字节的链。不幸的是,只有前两个字节被正确读取。也许这是因为只有前两个字节可以解释为ASCII字符,这将是奇怪的,因为我设置编码与功能NULL g_io_channel_set_encoding(koncentrator, NULL, NULL);
如果我尝试访问前两后的字节,我得到Segmentation fault
,这是也很奇怪,因为读取后变量ret
包含13
这意味着它已经读取了13个字节。我试过用g_io_channel_read_line
和g_io_channel_read_to_end
。有了这两个程序在无限循环(甚至当我验证条件G_IO_STATUS_EOF
)。
最后一个问题,也许最烦人的是它不能在第一时间工作,我需要打开终端的串口,例如cutecom
。否则,我可以发送数据,但它不检测任何回调。我相信这是因为该设备具有二极管以指示RX
和TX
的状态。
我不知道什么是错,我会非常好的给我一些提示或链接到合适的例子。我觉得没有什么比谷歌我可以找到更多。谢谢,欢呼!
非常感谢。这工作。我也想问一下如何制作它,我应该将它添加到引导rc脚本中,以便在每次引导后执行此操作? – Marek
@Marek可以,例如你可以使用'/ etc/rc.local'。更好的方法是在你的程序开始时通过'g_spawn_command_line_sync()'产生'stty'调用。最好的解决方案是直接调用'termios' API来获得相同的配置,但这需要更多的工作。 – fetasail