中级会员
 
- 积分
- 327
- 金钱
- 327
- 注册时间
- 2015-8-4
- 在线时间
- 46 小时
|
这两天在写一个小代码,具体是这样的,用的是STM32,通过其串口接收数据包,数据包里的数据遵从一个协议(协议是预先制定好的)。当然了,涉及到数据包时,必然会有数据包的起始位,和停止位(当然确定数据包的起始方法不止一种)。
我要做的便是解析收到的数据,将每一条送来的数据包按照协议,将其每个字节有序的存储下来。
一开始,我便想着从起始位入手,收到一个起始位,便开始存储数据,存储好起始位之后,便可以开始存储数据包中其他的有效字节。但是这个数据包中有效字节段接收的数据可能会出现和起始位一样的字符。一开始思路很乱,折腾了好多天,今天回过头看看写好的代码,总结了下自己切割存储数据包的方法。虽然可能会看着很挫,但是起码可以记录下来,以后回过头再看看。数据包的格式如图,我的数据分为ABCD四段,如果想要最快的分割数据包进行存储,可以直接设置两个标志位 即,接收完A后一个(1处),接收完B后一个(2处)(接收完C后的标志位可以要可以不要),这样,先拿标志位2进行判断,再拿标志位1进行判断,便可快速存储。
说了这么多,其实想表达的很简单,分割存储一个数据包时的思路,便是先按照协议将包分割成数段,每段添加一个标志位,再数据包中心的标志位2先做判断其是否置1,再对数据进行分割处理
即
if(B处还没接收好)
接收A,B
else if(B处接收好了)
接收C D
|
|