当前位置:首页 > 公众号精选 > 嵌入式大杂烩
[导读]关注「嵌入式大杂烩」,选择「星标公众号」一起进步!在嵌入式产品开发中,经常会遇到两个设备之间的通信、设备与服务器的通信、设备和上位机的通信等,很多时候通信协议都是自定义的,所以就涉及到自定义协议的解析和组包问题。比如针对下面的这样一个协议:帧头1帧头2字段1字段2校验固定值:0x...

关注「嵌入式大杂烩」,选择「星标公众号」一起进步!



在嵌入式产品开发中,经常会遇到两个设备之间的通信、设备与服务器的通信、设备和上位机的通信等,很多时候通信协议都是自定义的,所以就涉及到自定义协议的解析和组包问题。


比如针对下面的这样一个协议:


帧头1 帧头2 字段1 字段2 校验
固定值:0x55 固定值:0xAA 设备ID 电压值 前面所有数据异或值
char char short float char
1字节 1字节 2字节 4字节 1字节
数据在发送时涉及到一个大小端的概念,大小端是针对多字节数据的传输,比如上述协议中字段1,假设两字节内容为0x0001,先发送0x01后发送0x00,称为小端模式;先发送0x00后发送0x01,称为大端模式。


假设字段1内容为0x001,字段2内容为0x40533333 (对应为3.3)


假设按照小端方式发送,下面是帧数据:


55 AA 01 00 33 33 53 40 ED


下面来看看如何解析,


若干年前,在第一次面对这种问题时,用的如下傻瓜式的代码方式实现:


#include 

int main()
{
unsigned char Rxbuf[9] = {0x55,0xAA,0x01,0x00,0x33,0x33,0x53,0x40,0xED};

short DeviceId;
float Voltage;

unsigned char check = 0;
int i;

for(i=0;i<8;i )
{
check ^= Rxbuf[i];
}

if(Rxbuf[0]==0x55 
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭