首页 文章

从串行端口Linux C读取NULL字符

提问于
浏览
0

我已经阅读了很多问题和答案,但没有找到任何解决方案 . 可能是我的问题不对,但我需要一些指导 . 我在Linux中使用串口,它从我的Arduino设备读取数据 . 每当我想将数据从Arduino发送到Linux时,我首先发送两个字节,表示来自Arduino的总字节数 . 我将这两个字节转换为整数值并开始从串行端口读取数据 . 说,我想从Ardiuno向Linux发送300个字节,我将先写入{1,44}然后通过以下公式将此1和44字节转换为int:

char data[] = {1, 44};
int to_read = data[0]
to_read = to_read << 8;
to_read = to_read | data[1];
return to_read;

这将给我300 int值,这就像魅力一样 . 但是当我必须读取少于255的数据时出现问题 . 假设我想要读取100个字节,那么前两个字节将是{0,100} . 0是空字符,串口不处理它(我手动写0到串口,它总是给我写0字节),我的所有序列都出错了 . 所以我的问题是我可以从串口读取空字符或有人请给我更好的解决方案..

提前致谢 .

1 回答

  • 1

    我解决了问题 . 当处理C中的字节时,不要将字节(char)与字符串混淆,就像我正在处理字节数组(char data [])和当我尝试使用带有strlen长度的 write 方法在串行端口上写这些字节时(数据) ),我只得到那些非空的字节 . strlen 在看到 \0 的第一个空字符后返回数据长度,因此我得不到我想要的输出 . 我做的是,如果我想写数据 char data[] = {0, 4} 那么我会做这样的事情:

    char data[] = {0, 4};
    write(serial_port_fd, data, 2);
    

    告诉 write 函数写2个字节 . 这将写0和4,如果我写这样的东西:

    char data[] = {0, 4}
    write(serial_port_fd, data, strlen(data));
    

    这将写 NOTHING .

    还有一件事,如果要在串行端口上写入不可打印的字符(从字节值0到32),请确保已为原始输入和输出配置了串行端口 . 看看本指南:

    http://www.cmrr.umn.edu/~strupp/serial.html#config

相关问题