我正在编写一个程序,该程序从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 read
和man 2 open
。关于c - 从C中的帧中提取错误的数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2531860/