串口的数据协议解析

来源:互联网 发布:ubuntu wine1.8 编辑:程序博客网 时间:2024/06/05 09:30

接收来自串口的数据并解析,看起来是件容易的事情。而实际上,当协议变得复杂时,处理不好或者考虑不完善,会产生很多问题。

 

一般来说,通过串口传输的单个数据包都不会太大,否则,会导致数据被覆盖。对于通过串口传输的大数据,处理的办法是分割成多个小的数据包。可能出现的情况是因为接收和读取的不同步,接收到的数据需要分为多次读取,每次读取的单个数据包的一部分或者是一个数据包的后半部分和一个数据包的前半部分。另一种可能性是通过蓝牙或者红外等技术传输时,在数据流中加入了多余的数据。当传输的通道变得不可靠时,就需要引入一些冗余和机制来保证上层数据的正确性。

 

 

解析数据的第一步是要从字节流中提取出一个完整的数据包,我在这里只是对如何抓取一个完整的数据包并解析记录一些思路。

 

对于一个完整的数据包来说,必须要有可识别的部分。通常的识别方法是确定的前缀、后缀和数据结构。一般来说,前缀很好识别,而后缀,可能要结合数据结构来识别。

 

 

使用一个队列来存储中间数据,思路如下:

1. 如果队列非空;

   将队列中的数据取出,与新到达的数据合在一起,按照队列为空处理。

2. 如果队列为空;

  扫描字节流:

      如果找到了前缀,则判断以该前缀开始的数据是否一个完整的数据包。如果是,则处理,并将该数据包的结尾作为新的扫描起点。如果找不到前缀,则将从该次扫描起点的所有数据压入队列。

 

 

 

 

 

 

 

 

原创粉丝点击