我正在编写一个从Linux上的串口读取数据的程序。
数据由另一台设备发送,帧格式如下:
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
数据字段包含 127 个八位位组,如图所示,八位位组 1,2 包含一种类型的数据;八位位组 3,4 包含另一个数据。我需要获取这些数据
我知道如何在Linux中向串行端口写入和读取数据,但这只是写入和读取一个简单的字符串(例如“ABD”)
我的问题是我不知道如何解析上述格式的数据帧,以便我可以:
- 获取数据字段中八位字节 1,2 中的数据
- 获取Data字段中八位字节3,4的数据
- 获取CRC字段的值来检查数据的一致性
下面是在 Linux 中从串行端口读取和写入简单字符串的示例片段代码:
int writeport(int fd, char *chars) {
int len = strlen(chars);
chars[len] = 0x0d; // stick a <CR> after the command
chars[len+1] = 0x00; // terminate the string properly
int n = write(fd, chars, strlen(chars));
if (n < 0) {
fputs("write failed!\n", stderr);
return 0;
}
return 1;
}
int readport(int fd, char *result) {
int iIn = read(fd, result, 254);
result[iIn-1] = 0x00;
if (iIn < 0) {
if (errno == EAGAIN) {
printf("SERIAL EAGAIN ERROR\n");
return 0;
} else {
printf("SERIAL read error %d %s\n", errno, strerror(errno));
return 0;
}
}
return 1;
}
有人有什么想法吗?