》》串口协议开发
以下解析范式都是采用数据队列的形似来存储,并且根据设备运行速度差异,还需增加数据包队列来存储解析完毕的数据包
1.范式一《固定长度》无校验
0x6B----------20字节--------0xB6
上面数据中有一个帧头0x6B,帧尾0xB6,中间数据20个。
每次数据要找到帧头0x6B才开始存储,读取完22个字节后结束储存,并判断最后一个字节是否为0xB6.
这种范式如果出现误码,整个包就会变成错误包,会比较危险。
1.范式二《固定长度》有校验
0x6B----------20字节--------校验-0xB6
上面数据中有一个帧头0x6B,帧尾0xB6,中间数据20个,帧尾前面有一个校验码。
每次数据要找到帧头0x6B才开始存储,读取完23个字节后结束储存,并判断最后一个字节是否为0xB6.
并且判断校验码。
这种范式解决上述出现的误码问题。
1.范式三《不固定长度》无校验
0x6B----------N字节---------0xB6
上面数据中有一个帧头0x6B,帧尾0xB6,中间数据N个,帧尾前面有一个校验码。
每次数据要找到帧头0x6B才开始存储,读取到0xB6后结束储存,并判断最后一个字节是否为0xB6.
这种范式会出现错误解包的问题,例如数据中出现了0xB6的数据,这个包就丢了。
依然会有误码的问题。
1.范式四《不固定长度》有校验
0x6B----------N字节--------校验-0xB6
上面数据中有一个帧头0x6B,帧尾0xB6,中间数据N个,帧尾前面有一个校验码。
每次数据要找到帧头0x6B才开始存储,读取到0xB6后结束储存,并判断最后一个字节是否为0xB6.
并且判断校验码。
这种范式解决上述出现的误码问题。
这种范式会出现错误解包的问题,例如数据中出现了0xB6的数据,这个包就丢了。
1.范式五《不固定长度》有校验,加入转义字符
0x6B----------N字节--------校验-0xB6
如果数据中有0xB6数据,那么数据包就被提前结束了,并不是我们想要的数据。
这里需要加入转义字符
0xB6 -> 0xBf,0x01
0xBf -> 0xBf,0x02
上面数据中有一个帧头0x6B,帧尾0xB6,中间数据N个,帧尾前面有一个校验码。
每次数据要找到帧头0x6B才开始存储,读取到0xB6后结束储存,并判断最后一个字节是否为0xB6.
并且判断校验码。
需要去解析特定的转义字符
这种范式解决上述出现的误码问题。
这种范式不会出现错误解包的问题。
1.范式6《不固定长度》有校验
0x6B-0xB6-N数据长度---------N字节--------校验
上面数据中有一个帧头0x6B,0xB6,数据长度,中间数据N个,校验码。
每次数据要找到帧头0x6B才开始存储,读取到数据长度后读取对应长度,再读取一个校验码。
判断校验码即可。
这种范式解决上述出现的误码问题。
这种范式不会出现错误解包的问题。
2018-2-13:
以上都是单帧头,为了保证安全最好使用双帧头,三帧头,四帧头。根据实际情况而定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)