我正在编写一个程序,该程序从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 fieldframe[1] = 0x41; // command field which is character 'A'..so on..


然后,在接收器端,我取出类似的字段:


字符结果[254];
//读取数据
阅读(结果);
printf(“ command =%c”,result [1]); //获取框架的命令字段

//获取其他字段的值



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

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

我该如何解决该问题,或者我在发送方做错了什么?

相关问题:
Parse and read data frame in C?
Clear data at serial port in Linux in C?

最佳答案

如果您的程序实际上包含

read(result);


那么你需要添加

#include <unistd.h>


在顶部,获取read的函数原型。然后,您需要open串行端口,并将生成的文件描述符与缓冲区一起传递给read,以便它知道要读取的内容。请参见man 2 readman 2 open

关于c - 从C中的帧中提取错误的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2531860/

10-12 14:11
查看更多