gpt4 book ai didi

c - GIOChannel 有时读取有时不读取

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:16 25 4
gpt4 key购买 nike

这是我的一段代码。之后我会解释这个问题。

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 字符,这会很奇怪,因为我使用函数 g_io_channel_set_encoding(koncentrator, NULL, NULL);

将编码设置为 NULL

如果我尝试访问前两个字节之后的字节,我会得到 Segmentation fault,这也很奇怪,因为读取后的变量 ret 包含 13这意味着它读取了 13 个字节。

我尝试使用 g_io_channel_read_lineg_io_channel_read_to_end。对于这两个程序,程序会陷入无限循环(即使我验证了条件 G_IO_STATUS_EOF)。

最后一个问题,也许是最烦人的是,它第一次不起作用,我需要用终端打开串口,例如cutecom。否则我可以发送数据但它没有检测到任何回调。我对此很确定,因为该设备具有指示 RXTX 状态的二极管。

我不知道哪里出了问题,如果能给我一些提示或指向合适示例的链接,我将非常感激。我觉得我在谷歌上找不到更多东西了。谢谢,干杯!

最佳答案

当您处理串行端口时,您必须在开始读取之前正确配置它们。我的猜测是 cutecom 正在设置一些重要的串行参数,使端口可用。换句话说,您发布的代码不是问题。缺少的代码是。

检查这一点的一个好方法是使用 stty。这只是一个示例:使用 man stty 来获得(公认的很长的)选项列表。

stty -F /dev/ttyS0 raw 9600 -parity

关于c - GIOChannel 有时读取有时不读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16800162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com