0

我正在编写一个从 Linux 上的串口读取数据的程序。数据由具有以下帧格式的另一个设备发送:


|start | Command | Data               | CRC  | End |
|0x02  | 0x41    | (0-127 octets)     |      | 0x03|
----------------------------------------------------

如图所示,数据字段包含 127 个八位字节,八位字节 1,2 包含一种数据;八位字节 3,4 包含另一个数据。我需要得到这些数据。

因为在C中,一个字节只能容纳一个字符,并且在帧的起始字段中,它是 0x02,这意味着 STX 是 3 个字符。

所以,为了测试我的程序,

在发送方,我构造了一个数组作为上面格式化的帧,如:


char frame[254];
frame[0] = 0x02; // starting field
frame[1] = 0x41; // command field which is character 'A'
..so on..

然后,在接收方,我取出如下字段:

字符结果[254];
// 读取数据
读取(结果);
printf("命令 = %c", 结果[1]); // 获取帧的命令字段

// 获取其他字段的值

命令字段值 (result[1]) 不是字符“A”。

我认为,这是因为帧的第一个字段值是 0x02(STX),占据了阵列帧中的 3 个首位,导致接收端出现错误的结果。

我该如何纠正这个问题,或者我在发件人方面做错了什么?

相关问题:
在 C 中解析和读取数据帧?
在C中的Linux中清除串行端口的数据?

4

1 回答 1

0

如果您的程序实际上包含

read(result);

那么你需要添加

#include <unistd.h>

在顶部,获取read. 然后你需要open串行端口并将生成的文件描述符read与你的缓冲区一起传递给它,所以它知道要读取什么。见man 2 readman 2 open

于 2010-03-28T04:16:35.423 回答