一种基于数据流传输的数据包提取方法技术

技术编号:12282148 阅读:82 留言:0更新日期:2015-11-05 22:25
一种基于数据流传输的数据包提取方法,本发明专利技术涉及基于数据流传输的数据包提取方法。本发明专利技术的目的是为了解决现有系统资源占用大、运算量大以及因硬件故障造成的数据包串位现象的问题。通过以下技术方案实现的:1、初始化各变量;2、若接收队列中存在数据则判断解包进度值,若0执行3,若1执行4,若2执行5;3、搜索同步字,若搜索到执行4,否则删除首数据执行2,判断缓存更新条件,满足则更新缓存;4、校验长度,成功执行5,否则删除首数据执行2;5、校验数据包,成功执行6,否则执行2;6、退出程序。本发明专利技术应用于通信技术领域。

【技术实现步骤摘要】

本专利技术涉及基于数据流传输的数据包提取方法
技术介绍
在嵌入式系统中,很多通信接口可以提供一种数据流传输的功能,如串口、SPI总 线等,这种通信接口能够以数据为单位进行信息传递。一个完整的数据包通过这种通信接 口后,会转化为数据流的形式进行传输,数据接收端需在数据流中将数据包完整无误地提 取出来。与PC相比,嵌入式系统中RAM容量小、CPU主频低。但实际应用中系统资源占用 大、运算量大以及因硬件故障造成的数据包串位现象;所以,在嵌入式系统中,一种系统资 源占用少、运算量小,避免因硬件故障造成的数据包串位的数据包提取方法是必须的。
技术实现思路
本专利技术的目的是为了解决现有系统资源占用大、运算量大以及因硬件故障造成的 数据包串位现象的问题,而提出了 。 上述的专利技术目的是通过以下技术方案实现的: 步骤1、初始化各变量,执行解包进度等于0,队列头位置等于缓存首位置,队列尾 位置等于缓存首位置,同步字位置等于空值,数据包位置等于空值; 步骤2、若接收队列中存在数据,则读取接收数据,赋值队列尾位置的数据等于接 收数据,队列尾位置等于队列尾位置+1,当前接收数据的长度等于队列尾位置减去队列头 位置,执行步骤3; 若接收队列中不存在数据,则执行步骤5 ; 步骤3、判断解包进度值,若解包进度等于0,执行步骤4. 0. 1 ; 若解包进度等于1,执行步骤4. 1. 1 ; 若解包进度等于2,执行步骤4. 2. 1; 步骤4. 0. 1、若当前接收数据的长度大于等于同步字长度,则执行步骤4. 0. 2, 若当前接收数据的长度小于同步字长度,则执行步骤2 ; 步骤4. 0.2、在队列头位置到队列尾位置之间寻找同步字,若寻找到,设寻找到的 位置为寻找到的同步字位置,执行步骤4. 0. 3; 若没寻找到,执行步骤4.0?4; 步骤4. 0. 3、赋值解包进度等于1,同步字位置等于寻找到的同步字位置,数据包 位置等于同步字位置加同步字长度,执行步骤2; 步骤4. 0. 4、赋值队列头位置等于队列头位置加1,若队列头位置大于等于重更新 缓存阈值,则执行步骤4. 0. 5; 若队列头位置小于重更新缓存阈值,执行步骤2 ; 步骤4. 0. 5、复制队列尾位置减同步字长度加1位置同步字长度减1个数据到缓存 首位置位置,赋值队列头位置等于缓存首位置(,队列尾位置等于队列头位置加同步字长度 减1,执行步骤2 ; 步骤4. 1. 1、若当前接收数据的长度大于等于同步字长度加2,则执行步骤4. 1. 2 ; 若当前接收数据的长度小于同步字长度加2,则执行步骤2 ; 步骤4. 1. 2、若数据包位置长度位校验成功,赋值解包进度等于2,然后执行步骤 2, 若数据包位置长度位校验不成功,赋值解包进度等于0,队列头位置等于队列头位 置加1,然后执行步骤2; 步骤4. 2. 1、若当前接收数据的长度大于等于同步字长度加数据包位置的第一个 数据,则执行步骤4. 2. 2; 若当前接收数据的长度小于同步字长度加数据包位置的第一个数据,则执行步骤 2 ; 步骤4. 2. 2、若数据包位置数据包校验成功,执行步骤4. 2. 3; 若数据包位置数据包校验不成功,执行步骤4. 2. 4; 步骤4. 2. 3、复制数据包位置处数据包位置的第一个数据数目的数据到交换缓存 区,设置数据包接收标志,赋值解包进度等于〇,队列头位置等于缓存首位置,队列尾位置等 于缓存首位置,执行步骤5; 步骤4. 2. 4、赋值解包进度等于0,队列头位置等于队列头位置加1,执行步骤2; 步骤5、退出程序。 专利技术效果 采用本专利技术的, 本专利技术针对数据包格式和数据流传输的特点,提供了一种数据包提取算法,该算 法可以在数据流中提取数据包,采用基于队列存储结构实现,队列存储结构采用非循环结 构,降低运算量,达到系统资源占用内存小,运算量小;对错误数据采用逐数据删除的方式, 避免了因硬件故障造成的数据包串位现象;各变量具有明确意义,调试方便。解决了现有系 统资源占用大、运算量大以及因硬件故障造成的数据包出现串位现象的问题,使系统资源 占用减少30%以上,运算量减少40%以上。【附图说明】 图1为初始化赋值示意图; 图2为主体流程图,子步骤0为步骤4. 0. 1-4. 0. 5,子步骤1为步骤4. 1. 1-4. 1. 2, 子步骤2为步骤4. 2. 1-4. 2. 4; 图3为子步骤0流程图; 图4为子步骤1流程图; 图5为子步骤2流程图; 图6为实施例中发送数据内容图; 图7a为数据包处理前buffer缓存中存储的数据图; 图7b为数据包处理前其余变量的状态图; 图8a为数据包处理后buffer缓存中存储的数据图; 图8b为数据包处理后其余变量的状态图。【具体实施方式】【具体实施方式】 一:具体是按照以下步骤进 行的: 步骤1、如图1所示,初始化各变量,执行解包进度等于0(state= 0),队列头位置 等于缓存首(front=buffer),队列尾位置等于缓存首(rear=buffer),同步字位置等于 空值(sync=NULL),数据包位置等于空值(package=NULL),各变量为解包进度(state)、 队列头位置(front)、缓存首位置(buffer)、队列尾位置(rear)、同步字位置(sync)、(空 值)NULL和数据包位置(package);步骤2、若接收队列中存在数据,则读取数据接收的数据(c),赋值队列尾位置的 数据等于接收的数据(*rear=c),队列尾位置等于队列尾位置+1(rear=rear+1),当前 接收数据的长度等于队列尾位置-队列头位置(recv_length=rear-front),执行步骤3; 若接收队列中不存在数据,则执行步骤5 ; 步骤3、如图2所示,判断解包进度(state)值,若解包进度等于0(state= 0),执 行步骤4. 0. 1;若解包进度等于1(state= 1),执行步骤4. 1. 1;若解包进度等于2(state= 2),执行步骤4. 2. 1; 步骤4.0. 1、如图3所示,若当前接收数据的长度大于等于同步字长度(reCV_ length〉=PACK_SYNC_LEN),则执行步骤4.0? 2,若当前接收数据的长度小于同步字长度(reCV_length<PACK_SYNC_LEN),则执 行步骤2; 步骤4.0.2、在队列头位置(front)到队列尾位置(rear)之间寻找同步字(PACK_ SYNC),若寻找到,设寻找到的位置为寻找到的同步字位置(pos),执行步骤4.0.3; 若没寻找到,执行步骤4.0?4;步骤4. 0. 3、赋值解包进度等于1 (state=1),同步字位置等于寻找到的同步字位 置(sync=pos),数据包位置等于同步字位置加同步字长度(package=sync+PACK_SYNC_ LEN),执行步骤2 ; 步骤4. 0. 4、赋值队列头位置等于队列头位置加1(front=front+1),若队列头位 置大于等于重更新缓存阈值(front〉=REN当前第1页1 2 3 本文档来自技高网...

【技术保护点】
一种基于数据流传输的数据包提取方法,其特征在于,一种基于数据流传输的数据包提取方法具体是按照以下步骤进行的:步骤1、初始化各变量,执行解包进度等于0,队列头位置等于缓存首位置,队列尾位置等于缓存首位置,同步字位置等于空值,数据包位置等于空值;步骤2、若接收队列中存在数据,则读取接收数据,赋值队列尾位置的数据等于接收数据,队列尾位置等于队列尾位置+1,当前接收数据的长度等于队列尾位置减去队列头位置,执行步骤3;若接收队列中不存在数据,则执行步骤5;步骤3、判断解包进度值,若解包进度等于0,执行步骤4.0.1;若解包进度等于1,执行步骤4.1.1;若解包进度等于2,执行步骤4.2.1;步骤4.0.1、若当前接收数据的长度大于等于同步字长度,则执行步骤4.0.2,若当前接收数据的长度小于同步字长度,则执行步骤2;步骤4.0.2、在队列头位置到队列尾位置之间寻找同步字,若寻找到,设寻找到的位置为寻找到的同步字位置,执行步骤4.0.3;若没寻找到,执行步骤4.0.4;步骤4.0.3、赋值解包进度等于1,同步字位置等于寻找到的同步字位置,数据包位置等于同步字位置加同步字长度,执行步骤2;步骤4.0.4、赋值队列头位置等于队列头位置加1,若队列头位置大于等于重更新缓存阈值,则执行步骤4.0.5;若队列头位置小于重更新缓存阈值,执行步骤2;步骤4.0.5、复制队列尾位置减同步字长度加1位置同步字长度减1个数据到缓存首位置位置,赋值队列头位置等于缓存首位置,队列尾位置等于队列头位置加同步字长度减1,执行步骤2;步骤4.1.1、若当前接收数据的长度大于等于同步字长度加2,则执行步骤4.1.2;若当前接收数据的长度小于同步字长度加2,则执行步骤2;步骤4.1.2、若数据包位置长度位校验成功,赋值解包进度等于2,然后执行步骤2,若数据包位置长度位校验不成功,赋值解包进度等于0,队列头位置等于队列头位置加1,然后执行步骤2;步骤4.2.1、若当前接收数据的长度大于等于同步字长度加数据包位置的第一个数据,则执行步骤4.2.2;若当前接收数据的长度小于同步字长度加数据包位置的第一个数据,则执行步骤2;步骤4.2.2、若数据包位置数据包校验成功,执行步骤4.2.3;若数据包位置数据包校验不成功,执行步骤4.2.4;步骤4.2.3、复制数据包位置处数据包位置的第一个数据数目的数据到交换缓存区,设置数据包接收标志,赋值解包进度等于0,队列头位置等于缓存首位置,队列尾位置等于缓存首位置,执行步骤5;步骤4.2.4、赋值解包进度等于0,队列头位置等于队列头位置加1,执行步骤2;步骤5、退出程序。...

【技术特征摘要】

【专利技术属性】
技术研发人员:陈兴林李松高怡然罗文嘉徐川川于志亮崔宁李松峰耿光晓
申请(专利权)人:哈尔滨工业大学
类型:发明
国别省市:黑龙江;23

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1