[发明专利]一种基于链表结构的接收多字节数据帧的串口通讯方法有效
申请号: | 201911358381.X | 申请日: | 2019-12-25 |
公开(公告)号: | CN111181819B | 公开(公告)日: | 2022-03-08 |
发明(设计)人: | 周树林;李根 | 申请(专利权)人: | 交控科技股份有限公司 |
主分类号: | H04L12/40 | 分类号: | H04L12/40;G06F16/901;G06F16/903 |
代理公司: | 北京华专卓海知识产权代理事务所(普通合伙) 11664 | 代理人: | 彭锐 |
地址: | 100070 北京市丰台区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 结构 接收 多字 数据 串口 通讯 方法 | ||
1.一种基于链表结构的接收多字节数据帧的串口通讯方法,其特征在于,包括:
从串口缓冲区接收数据,存储于接收数据链表;
通过帧提取线程调用帧提取操作,识别接收数据链表中的完整帧,提取完整帧的数据,复制到帧数据链表进行存储;
在所述完整帧的数据从接收数据链表复制到帧数据链表后,删除接收数据链表中对应的数据;
通过帧解析线程调用帧解析操作,对帧数据链表中完整帧的数据进行解析;
所述删除接收数据链表中对应的数据,包括:
从首项开始,对接收数据链表中的链表元素按照串接顺序逐个进行遍历,累加被遍历链表元素内数据的字节长度;
当累加的字节长度等于待删除字节数时,停止遍历,记录被遍历的链表元素个数;其中待删除字节数为提取的所有完整帧的总字节数;从接收数据链表中,删除被遍历的链表元素;
当累加的字节长度大于待删除字节数时,停止遍历,记录被遍历的链表元素个数;此时最后一个待删除字节落在最后一个被遍历链表元素内,删除待删除的字节对应的数据,新建数组,并将所述最后一个被遍历链表元素中的剩余数据复制到新数组中,用新数组替换原数组;
所述接收数据链表是以链表元素的形式存储,每个链表元素只存储一个字节数组,每个字节数组包含多个字节数据。
2.根据权利要求1所述的方法,其特征在于,所述接收数据链表由若干个链表元素根据接收数据的先后顺序串接形成,每个链表元素只存储一个字节数组,每个字节数组包含一个用于存储字节数据的成员和一个标志位成员;其中字节数据为单次从串口缓冲区读取到的数据,标志位用于表示对应的字节数据是否进行过帧提取操作。
3.根据权利要求1所述的方法,其特征在于,所述帧数据链表由若干个链表元素根据提取帧数据的先后顺序串接形成,每个链表元素只存储一个帧数据对象,每个帧数据对象包含一个用于存储帧数据的成员和两个标志位的成员,其中帧数据为从接收数据链表中提取的帧数据,第一标志位用于表示帧数据是否被解析,第二标志位用于表示帧数据是否是完整帧。
4.根据权利要求1或3所述的方法,其特征在于,所述完整帧的数据包括:
上一帧的帧尾与下一帧帧头之间的数据;
本帧帧头与下一帧帧头之间的数据;
本帧帧头与本帧帧尾之间的数据。
5.根据权利要求1所述的方法,其特征在于,还包括从接收数据链表中提取非完整帧的数据,置于所述帧数据链表的末位置。
6.根据权利要求5所述的方法,其特征在于,所述非完整帧的数据为:
在未发现下一帧帧头及下一帧帧尾,且存在上一帧帧尾的情况下,上一帧帧尾至数据结尾之间的数据;
在未发现下一帧帧头及下一帧帧尾,且存在本帧帧头的情况下,本帧帧头至数据结尾之间的数据。
7.根据权利要求1所述的方法,其特征在于,还包括线程链表,用于存储帧提取线程和帧解析线程,通过添加线程操作和移除线程操作,使同一类型的可运行状态下的线程个数不超过1。
8.根据权利要求7所述的方法,其特征在于,所述添加线程操作为:
线程链表检测其表内的链表元素个数,如果不大于1,则创建线程,并将其加入线程链表;
再次检测线程链表内的链表元素个数,如果等于1,则启动运行该线程;否则将该线程置为等待状态;
所述移除线程操作为:
先从线程链表中移除第一个链表元素中的线程,再判断链表内元素数,元素数不为0时,启动链表中的第一个元素中的线程。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于交控科技股份有限公司,未经交控科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911358381.X/1.html,转载请声明来源钻瓜专利网。