6种串口协议的实现

》》串口协议开发
	以下解析范式都是采用数据队列的形似来存储,并且根据设备运行速度差异,还需增加数据包队列来存储解析完毕的数据包

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:

以上都是单帧头,为了保证安全最好使用双帧头,三帧头,四帧头。根据实际情况而定。




猜你喜欢

转载自blog.csdn.net/hes_c/article/details/79320717