The present invention relates to the technical field of serial communication, in particular to a serial order analytical method based on state machine and circular queue, which comprises the following steps: S1: definition of the serial communication protocol; S2: definition of state machine; S3: set the ring cycle data FIFO buffer; S4: when the host computer data after the machine adopts DMA mode to receive data from a peripheral read receiving array, while the main function of the program constantly check whether DMA receives new data, when the detected new data immediately into the new data is written to the data in the buffer when the ring; the data in the data buffer ring, in the main function in the program and data read, read in accordance with the state machine for data analysis. The method of serial command analysis based on the state machine and the ring queue can improve the real-time performance of the system.
【技术实现步骤摘要】
一种基于状态机和环形队列的串口命令解析方法
本专利技术涉及串口通讯
,具体涉及一种基于状态机和环形队列的串口命令解析方法。
技术介绍
目前在很多工程化应用控制中都采用了上位机和多台下位机构成的主从系统。下位机主要作为数据采集,驱动执行机构;上位机则通过对下位机进行集中管理,完成信息显示,数据运算并作出决策下发命令。上位机与下位机之间通过通讯的方式完成数据交互,在众多的通讯方式中,串口通讯应用比较普遍。传统的串口通讯的上位机和下位机的串口通讯过程中,上位机下发数据后,下位机通过串口中断,不仅要接收数据、进行数据的拷贝,还要进行帧头、帧长度、校验和、帧尾的判断。这样就会增大中断函数中程序的运算量和中断执行时间,因为在程序中中断函数的优先级要高于正常的函数,所以中断函数的运算量和执行时间增加不仅会影响其它函数的正常运行,并且还会因为中断函数中运算量和执行时间的增加甚至影响下一数据的接收,造成数据的丢失。这样的处理方式不仅冗余还缺乏稳定性和实时性。
技术实现思路
本专利技术的目的在于提供一种基于状态机和环形队列的串口命令解析方法,能够提高系统的实时性。为了实现上述目的,本专利技术采用如下技术方案:一种基于状态机和环形队列的串口命令解析方法,包括如下步骤:S1:定义串口通信协议;S2:定义状态机的状态;S3:设置先进先出的环形循环数据缓冲区;S4:当上位机下发数据后,下位机采用DMA的方式将接收到的数据从外设读取到接收数组中,同时在程序主函数中不停地检测DMA是否接收到新的数据,当检测到新入的数据时则立即将新入的数据写入到环形数据缓冲区中;当环形数据缓冲区中有数据 ...
【技术保护点】
一种基于状态机和环形队列的串口命令解析方法,其特征在于,包括如下步骤:S1:定义串口通信协议;S2:定义状态机的状态;S3:设置先进先出的环形循环数据缓冲区;S4:当上位机下发数据后,下位机采用DMA的方式将接收到的数据从外设读取到接收数组中,同时在程序主函数中不停地检测DMA是否接收到新的数据,当检测到新入的数据时则立即将新入的数据写入到环形数据缓冲区中;当环形数据缓冲区中有数据时,在程序的主函数中同时进行数据的读出,读出时依照状态机的状态进行数据的解析。
【技术特征摘要】
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,当...
【专利技术属性】
技术研发人员:王在义,王启叶,韩大伟,
申请(专利权)人:青岛华潞佳电子科技有限公司,
类型:发明
国别省市:山东,37
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。