[发明专利]一种基于状态机和环形队列的串口命令解析方法在审
申请号: | 201710462136.8 | 申请日: | 2017-06-19 |
公开(公告)号: | CN107302531A | 公开(公告)日: | 2017-10-27 |
发明(设计)人: | 王在义;王启叶;韩大伟 | 申请(专利权)人: | 青岛华潞佳电子科技有限公司 |
主分类号: | H04L29/06 | 分类号: | H04L29/06;H04L12/879;H04L12/861;H04L1/00 |
代理公司: | 青岛中天汇智知识产权代理有限公司37241 | 代理人: | 史文樊,刘晓 |
地址: | 266000 山*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 状态机 环形 队列 串口 命令 解析 方法 | ||
1.一种基于状态机和环形队列的串口命令解析方法,其特征在于,包括如下步骤:
S1:定义串口通信协议;
S2:定义状态机的状态;
S3:设置先进先出的环形循环数据缓冲区;
S4:当上位机下发数据后,下位机采用DMA的方式将接收到的数据从外设读取到接收数组中,同时在程序主函数中不停地检测DMA是否接收到新的数据,当检测到新入的数据时则立即将新入的数据写入到环形数据缓冲区中;当环形数据缓冲区中有数据时,在程序的主函数中同时进行数据的读出,读出时依照状态机的状态进行数据的解析。
2.根据权利要求1所述的基于状态机和环形队列的串口命令解析方法,其特征在于,所述步骤S1中,定义串口通信协议包含以下几个域:(1)帧头;(2)帧长度;(3)功能码;(4)帧数据体;(5)校验和。
3.根据权利要求2所述的基于状态机和环形队列的串口命令解析方法,其特征在于,所述数据帧头设置两个。
4.根据权利要求3所述的基于状态机和环形队列的串口命令解析方法,其特征在于,所述步骤S2中,定义状态机有以下几种状态:(1)数据帧头检查接收状态;(2)数据帧长检查接收状态;(3)功能码检查接收状态;(4)帧数据体接收状态;(5)数据帧校验和检查状态。
5.根据权利要求1或2或3或4所述的基于状态机和环形队列的串口命令解析方法,其特征在于,先进先出的环形循环数据缓冲区的设置方法为:
设置一个大小为SIZE的线性数据缓冲区,用Tail指针指向该缓冲区中接收到的有效数据位置即写入数据的位置,用Head指针指向该缓冲区中已经处理的有效数据位置即读出的数据位置,初始化时,Head指针和Tail指针都指到0的位置;当串口接收到数据存放到缓冲区后,Tail就加1,当Tail大于SIZE-1时,将Tail更新为0;当系统从缓冲区取出一个数据进行分析,Head就加1,当Head大于SIZE-1时,将Head更新0。
6.根据权利要求4所述的基于状态机和环形队列的串口命令解析方法,其特征在于,按照下列步骤对读出的数据进行解析:
S61:状态机的初始状态为数据帧头检查接收状态,依次对读出的数据进行帧头检查,若该数据与通信协议中预设的第一个帧头不相等则该数据无效,继续读取下一个数据,直到读取的两个数据与预设的两个帧头数据相等,此时帧头数据读取成功,更改状态机的状态为数据帧长检查接收状态;
S62:继续读取下一个数据进行帧长度检查,如果该数据满足通信协议中对数据体长度的要求,则得到帧长度数据的同时更改状态机的状态为功能码检查接收状态;否则则表明该数据无效,更改状态机的状态为帧头检查接收状态,返回步骤S61;
S63:继续读取下一个数据进行功能码检查,如果该数据满足通信协议中对功能码的要求,则更改状态机的状态为帧数据体接收状态;否则则表明该数据无效,更改状态机的状态为帧头检查接收状态,返回步骤S61;
S64:根据步骤S2获得的帧长度数据,连续读取帧长度所要求的长度的数据作为帧数据体数据,然后更改状态机的状态为数据帧校验和检查状态,进入步骤S65;
S65:对步骤S4获得的帧数据体进行校验和检查,若校验和正确则执行功能码规定的相应操作,否则则表明该数据无效,更改状态机的状态为帧头检查接收状态,返回步骤S61。
7.根据权利要求6所述的基于状态机和环形队列的串口命令解析方法,其特征在于,状态机在接收时,在字节与字节之间设置接收时间阈值,如果超过该时间阈值则该数据无效,返回步骤S61。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于青岛华潞佳电子科技有限公司,未经青岛华潞佳电子科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710462136.8/1.html,转载请声明来源钻瓜专利网。