一种基于串口通讯的帧数据流软件接收方法转让专利

申请号 : CN202311087657.1

文献号 : CN116795756B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 阮琪璋伍文杰

申请人 : 成都量芯集成科技有限公司

摘要 :

本发明涉及串口通讯技术领域,尤其涉及一种基于串口通讯的帧数据流软件接收方法,包括将字节流数据写入字节流环形缓冲器;对写入的字节流数据进行分帧,标记为帧数据,将帧数据的帧属性写入帧数据流环形缓冲器;当有帧属性写入,从字节流环形缓冲器中提取对应的帧数据;检测帧数据的帧长度的正确性,触发回调事件,输出帧数据,供业务逻辑使用。本发明采用多级循环先进先出的机制进行串口字节流数据的读写同步,使用串口在不同波特率下传输单位字节所花费的时间作为超时时间基准来描述一帧数据是否接收完成,以此实现数据帧的分割,然后再通过从字节流被分割的帧实现帧流数据的写入和读出,使数据接收和处理同步,具有协同性。

权利要求 :

1.一种基于串口通讯的帧数据流软件接收方法,其特征在于,包括:

步骤1、将串口接收的字节流数据写入字节流环形缓冲器;对写入字节流环形缓冲器的字节流数据进行分帧,标记为帧数据,将帧数据的帧属性写入帧数据流环形缓冲器;

步骤2、当帧数据流环形缓冲器有帧属性写入,根据帧属性从字节流环形缓冲器中提取对应的帧数据到用户数据缓冲器;

步骤3、检测用户数据缓冲器中帧数据的帧长度的正确性,由帧数据流事件触发器触发输出回调事件,输出帧数据,供业务逻辑使用。

2.根据权利要求1所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,在所述步骤1中,通过字节数据接收器,向字节流环形缓冲器的字节队列持续写入串口接收的字节流数据;通过通信波特率计算出传输单位字节数据所需时间,将传输单位字节数据所需时间的两倍作为超时时间,采用定时器记录相邻前后两字节数据的时间间隔,若相邻前后两字节数据的时间间隔大于超时时间,判定一帧数据传输完成,等待下一帧数据,记录本帧数据的长度和起始地址,标记为帧数据,将帧数据的帧属性写入帧数据流环形缓冲器的帧队列。

3.根据权利要求2所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,在所述步骤1中,分帧的模式包括硬件定时器计数模式和周期轮询模式。

4.根据权利要求3所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,采用硬件定时器计数模式进行分帧时,以定时器的计数周期为基准进行计时;当串口接收到第一字节数据时,开启定时器进行硬件计时,当一帧数据传输完成,停止定时器;串口接收到下一字节数据时,重置定时器的定时计数值,直至结束。

5.根据权利要求3所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,采用周期轮询模式进行分帧时,以定时器的中断周期为基准进行计时;定时器保持开启状态,一帧数据传输完成,复位变量计数值,直至结束。

6.根据权利要求3所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,所述步骤1还包括:在字节流数据写入字节流环形缓冲器前,初始化字节流环形缓冲器和帧数据流环形缓冲器的资源空间、设置字节流和帧数据流的循环缓冲告警余量和循环缓冲资源告警时需申请资源的大小、初始化回调事件、选择分帧模式。

7.根据权利要求6所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,所述步骤1还包括:在对写入字节流环形缓冲器的字节流数据进行分帧前,依次检查字节流和帧数据流循环缓冲资源告警;基于告警结果,动态扩展字节流环形缓冲器和帧数据流环形缓冲器的资源空间。

8.根据权利要求7所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,在所述步骤1中,帧数据的标记过程包括:从字节流环形缓冲器的字节队列中获取当前帧数据的信息,所述信息包括起始指针位置和帧长度;向后偏移起始指针位置,当字节流环形缓冲器的字节队列未满时,将当前帧数据的帧属性写入帧数据流环形缓冲器的帧队列中。

9.根据权利要求8所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,在所述步骤2中,当帧数据流环形缓冲器的帧队列未空时,从帧队列读取帧属性,根据帧属性从字节流环形缓冲器的字节队列读取对应的帧数据到用户数据缓冲器;当帧数据流环形缓冲器的帧队列为空时,依次释放动态扩展的字节流环形缓冲器和帧数据流环形缓冲器的资源空间,恢复到初始化状态。

10.根据权利要求9所述的一种基于串口通讯的帧数据流软件接收方法,其特征在于,在所述步骤3中,当存在动态扩展的字节流环形缓冲器的资源空间,依次释放本帧宽度的字节流环形缓冲器和帧数据流环形缓冲器的资源空间;当不存在或已释放动态扩展的字节流环形缓冲器的资源空间,验证帧长度的正确性;若帧长度正确,根据帧数据的信息,由帧数据流事件触发器触发输出回调事件并触发帧数据接收事件,输出帧数据的帧句柄,帧句柄包括帧起始长度和帧长度,供业务逻辑使用。

说明书 :

一种基于串口通讯的帧数据流软件接收方法

技术领域

[0001] 本发明涉及串口通讯技术领域,具体涉及一种基于串口通讯的帧数据流软件接收方法。

背景技术

[0002] 目前基于串口通讯的应用已是常态化,但是在协议通信或者串口调试过程中往往大多是以HEX帧的形式描述,市面上甚至有封装的通信协议,比如MODBUS协议还可以以ASCII方式传输,但它们通常更适合应用于面向特定的对象,并且其代码体积也较大,在实际使用时展示的数据帧不够直观方便。另外MODBUS仅能以一次通讯、一次响应的方式运行;且对于一些自定义通信协议场合下,解析比较困难。
[0003] 传统的多帧数据接收机制是直接通过FIFO实现队列读写,串口接收中断发生时直接向队列写入字节数据,CPU资源空闲时直接检测队列是否有数据,若有则直接取队列数据到缓冲区处理,这种处理方式是按字节进行处理且不存在自动帧分割机制,并且不能分割缓存多帧数据。还有大部分数据接收机制都是根据帧校验分帧,计算量过大,或者利用硬件资源中的空闲中断达到要求,虽然有效载荷传输效率高,由于对硬件依赖较多,所以通用性不强。
[0004] 因此提供了一种带分帧机制且能准确快速缓存端口收到的多帧数据的处理机制作为传输层中间件,提供串口稳定通讯传输的通用解决方法,已成为所属技术领域亟待解决的技术问题。

发明内容

[0005] 本发明要解决的技术问题是:提供一种基于串口通讯的帧数据流软件接收方法,以至少解决上述部分技术问题。
[0006] 为实现上述目的,本发明采用的技术方案如下:
[0007] 一种基于串口通讯的帧数据流软件接收方法,包括:
[0008] 步骤1、将串口接收的字节流数据写入字节流环形缓冲器;对写入字节流环形缓冲器的字节流数据进行分帧,标记为帧数据,将帧数据的帧属性写入帧数据流环形缓冲器;
[0009] 步骤2、当帧数据流环形缓冲器有帧属性写入,根据帧属性从字节流环形缓冲器中提取对应的帧数据到用户数据缓冲器;
[0010] 步骤3、检测用户数据缓冲器中帧数据的帧长度的正确性,由帧数据流事件触发器触发输出回调事件,输出帧数据,供业务逻辑使用。
[0011] 进一步地,在所述步骤1中,通过字节数据接收器,向字节流环形缓冲器的字节队列持续写入串口接收的字节流数据;通过通信波特率计算出传输单位字节数据所需时间,将传输单位字节数据所需时间的两倍作为超时时间,采用定时器记录相邻前后两字节数据的时间间隔,若相邻前后两字节数据的时间间隔大于超时时间,判定一帧数据传输完成,等待下一帧数据,记录本帧数据的长度和起始地址,标记为帧数据,将帧数据的帧属性写入帧数据流环形缓冲器的帧队列。
[0012] 进一步地,在所述步骤1中,分帧的模式包括硬件定时器计数模式和周期轮询模式。
[0013] 进一步地,采用硬件定时器计数模式进行分帧时,以定时器的计数周期为基准进行计时;当串口接收到第一字节数据时,开启定时器进行硬件计时,当一帧数据传输完成,停止定时器;串口接收到下一字节数据时,重置定时器的定时计数值,直至结束。
[0014] 进一步地,采用周期轮询模式进行分帧时,以定时器的中断周期为基准进行计时;定时器保持开启状态,一帧数据传输完成,复位变量计数值,直至结束。
[0015] 进一步地,所述步骤1还包括:在字节流数据写入字节流环形缓冲器前,初始化字节流环形缓冲器和帧数据流环形缓冲器的资源空间、设置字节流和帧数据流的循环缓冲告警余量和循环缓冲资源告警时需申请资源的大小、初始化回调事件、选择分帧模式。
[0016] 进一步地,所述步骤1还包括:在对写入字节流环形缓冲器的字节流数据进行分帧前,依次检查字节流和帧数据流循环缓冲资源告警;基于告警结果,动态扩展字节流环形缓冲器和帧数据流环形缓冲器的资源空间。
[0017] 进一步地,在所述步骤1中,帧数据的标记过程包括:从字节流环形缓冲器的字节队列中获取当前帧数据的信息,所述信息包括起始指针位置和帧长度;向后偏移起始指针位置,当字节流环形缓冲器的字节队列未满时,将当前帧数据的帧属性写入帧数据流环形缓冲器的帧队列中。
[0018] 进一步地,在所述步骤2中,当帧数据流环形缓冲器的帧队列未空时,从帧队列读取帧属性,根据帧属性从字节流环形缓冲器的字节队列读取对应的帧数据到用户数据缓冲器;当帧数据流环形缓冲器的帧队列为空时,依次释放动态扩展的字节流环形缓冲器和帧数据流环形缓冲器的资源空间,恢复到初始化状态。
[0019] 进一步地,在所述步骤3中,当存在动态扩展的字节流环形缓冲器的资源空间,依次释放本帧宽度的字节流环形缓冲器和帧数据流环形缓冲器的资源空间;当不存在或已释放动态扩展的字节流环形缓冲器的资源空间,验证帧长度的正确性;若帧长度正确,根据帧数据的信息,由帧数据流事件触发器触发输出回调事件并触发帧数据接收事件,输出帧数据的帧句柄,帧句柄包括帧起始长度和帧长度,供业务逻辑使用。
[0020] 与现有技术相比,本发明具有以下有益效果:
[0021] 本发明通过将输入的字节流数据转化为帧数据流输出,在使用数据时可以直接取出一整段数据直接使用,采用了数据同步方法,保证优先接收到数据为主,而数据的处理流程可以在处理器空闲时运行。
[0022] 本发明采用两个循环队列结构,一级队列包含字节流处理时的状态字信息,即字节队列,二级队列包含帧数据处理时的帧数据流信息属性,即帧队列。本发明在原有单队列方式下增加了二级队列,当有数据需要处理时每次都只取一帧数据处理,提高了处理效率,便于复用和扩展,也提高了使用效率。
[0023] 本发明采用两种分帧机制,其核心都是通过数据传输时间进行区分。第一类是基于定时器的硬件定时器计数模式实现精确分帧,仅在通信传输时外设运行,可节省CPU资源也可节省功耗;第二类是依靠定时器的周期轮询模式,此类处理机制更加灵活。

附图说明

[0024] 图1为本发明的方法流程图。

具体实施方式

[0025] 技术解释:
[0026] FIFO:一种先进先出的存储器管理方式,也称为固定大小数据结构。
[0027] Modbus协议:一种串行通信协议。
[0028] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0029] 如图1所示,本发明提供的一种基于串口通讯的帧数据流软件接收方法,包括:
[0030] 步骤1、将串口接收的字节流数据写入字节流环形缓冲器;对写入字节流环形缓冲器的字节流数据进行分帧,标记为帧数据,将帧数据的帧属性写入帧数据流环形缓冲器;
[0031] 在步骤1中,串口每接收到一字节数据,就将当前一字节数据写入字节流环形缓冲器的字节队列,设置字节数据就绪信号,等待被标记到帧数据流环形缓冲器的帧队列中;然后进行超时分帧,将分帧后的数据标记为帧数据并写入帧数据流环形缓冲器的帧队列。
[0032] 步骤2、当帧数据流环形缓冲器有帧属性写入,根据帧属性从字节流环形缓冲器中提取对应的帧数据到用户数据缓冲器;
[0033] 在步骤2中,为了实现高效传输和高效缓存,帧数据流仅携带帧属性,而不是直接携带实际帧数据,而实际的帧数据来源于字节流环形缓冲器中。步骤3、检测用户数据缓冲器中帧数据的帧长度的正确性,由帧数据流事件触发器触发输出回调事件,输出帧数据,供业务逻辑使用。
[0034] 步骤3、检测用户数据缓冲器中帧数据的帧长度的正确性,由帧数据流事件触发器触发输出回调事件,输出帧数据,供业务逻辑使用;
[0035] 在步骤3中,当需要处理时直接从字节流环形缓冲器中截取实际的帧数据,而数据被使用后处于字节流环形缓冲器中的数据才会允许被新的数据覆盖。这种方式不仅省去了MCU数据拷贝处理时间,也节省了缓冲容器的资源空间占用。
[0036] 本发明主要应用于MCU等嵌入式平台中,核心采用多级循环先进先出的机制进行串口字节流数据的读写同步,使用串口在不同波特率下传输单位字节所花费的时间作为超时时间基准来描述一帧数据是否接收完成,以此实现数据帧的分割,然后再通过从字节流被分割的帧实现帧流数据的写入和读出,使数据接收和处理同步,具有协同性。
[0037] 本发明还提供了一种基于串口通讯的帧数据流软件接收方法对应的结构,包括字节流环形缓冲器、帧数据流环形缓冲器、资源断言分配器、分帧器、用户数据缓冲器和帧数据流事件触发器,字节流环形缓冲器与串口中断字节流接收器相连接。上述结构易于封装和复用,可应用于裸机或RTOS环境。
[0038] 在部分实施例中,在所述步骤1中,通过字节数据接收器,向字节流环形缓冲器的字节队列持续写入串口接收的字节流数据;通过通信波特率计算出传输单位字节数据所需时间,将传输单位字节数据所需时间的两倍作为超时时间,采用定时器记录相邻前后两字节数据的时间间隔,若相邻前后两字节数据的时间间隔大于超时时间,则说明超时,判定一帧数据传输完成,等待下一帧数据,记录本帧数据的长度和起始地址,标记为帧数据,将帧数据的帧属性写入帧数据流环形缓冲器的帧队列。所述字节队列和帧队列为环形队列结构,且帧数据流环形缓冲器中帧队列的属性映射信息来源于字节流环形缓冲器的字节队列,并且帧数据仅包含数据信息,而不存在帧头帧尾和帧校验等附加识别信息。
[0039] 以传输单位字节数据所需时间的两倍作为超时时间,也叫做理论时间间隙。传输单位字节数据所需时间是基于实际通信的波特率对应计算得到的,它是在指定通讯波特率下理论传输1字节所需耗时得到的:例如当前波特率为115200bps,则传输1bit所需时间为1/115200秒,若传输1字节通常包含10位(1bit起始位+8bit数据位+1bit停止位),则传输1字节所需时间约为10*(1/115200)=87us,为此超时时间为174us。前后相邻两字节的时间间隙是实际通信时的时间间隙,本发明通过字节流数据传输一字节的停顿时间(实际时间间隙)是否超过该波特率下传输两字节所花的时间(理论时间间隙)实现分帧和帧数据流标记。
[0040] 在部分实施例中,在所述步骤1中,分帧的模式包括硬件定时器计数模式和周期轮询模式。作为优选,采用硬件定时器计数模式进行分帧时,以定时器的计数周期为基准进行计时;当串口接收到第一字节数据时,开启定时器进行硬件计时,当一帧数据传输完成,停止定时器;串口接收到下一字节数据时,重置定时器的定时计数值,直至结束。作为优选,采用周期轮询模式进行分帧时,以定时器的中断周期为基准进行计时;定时器保持开启状态,一帧数据传输完成,复位变量计数值,直至结束。
[0041] 本发明包含两大类分帧模式,能快速缓冲分存接收多帧数据做同步数据处理,其核心都是通过数据传输时间进行区分,两种分帧模式为了适应不同的应用场景。采用硬件定时器计数模式,可应用于高速度通讯传输和更即时响应的场合下,更准确的产生帧分割,在此模式下定时器资源是在通讯传输时才会被启用,而在无通讯数据时定时器处于停止状态,能有效降低体统功耗和提高系统利用率。采用周期轮询模式的处理机制更加灵活,但效率上达不到采用硬件定时器计数模式的同等条件。特别地,若用户对分帧响应或帧通信速度要求较高,则可以启用定时器的中断周期轮询扫描,若要求并不严格,则可以直接去掉定时器,改为在主线程中等间隔延时周期扫描,即将原来放在定时器中轮询的函数移到主函数中运行即可,降低了对硬件的绝对依赖性。
[0042] 在部分实施例中,所述步骤1还包括:在字节流数据写入字节流环形缓冲器前,初始化字节流环形缓冲器和帧数据流环形缓冲器的资源空间、设置字节流和帧数据流的循环缓冲告警余量和循环缓冲资源告警时需申请资源的大小、初始化回调事件、选择分帧模式。
[0043] 在部分实施例中,所述步骤1还包括:在对写入字节流环形缓冲器的字节流数据进行分帧前,依次检查字节流和帧数据流循环缓冲资源告警;基于告警结果,动态扩展字节流环形缓冲器和帧数据流环形缓冲器的资源空间。依次检查字节流和帧数据流循环缓冲资源告警,当存在字节流或帧数据流循环缓冲资源告警时,动态扩展一次字节流环形缓冲器资源或帧数据流环形缓冲器资源,在动态扩展后再进行资源不足分配失败的判断。
[0044] 在初始化时,预设栈资源告警余量,当收到的数据量达到循环队列资源告警余量时,自动从堆区分配动态内存资源衔接扩充到循环缓冲区尾部,达到增加循环队列空间的目的,当帧数据流依次被处理的同时,也依次释放堆资源,当所有帧数据流都被处理后,会释放所有堆资源,从而恢复到仅存在静态的栈资源。
[0045] 对于间歇突发性大数据量通讯涌动且来不及处理通信数据时,能够实现提前自动扩展环形缓冲器的内存资源,使默认的栈空间资源和动态扩展的堆资源衔接合并,从而使数据不存在丢失,随着帧数据被取走的同时,会自动释放对应宽度的内存资源,当无需要处理的数据时会直接释放所有动态扩展的缓冲器堆资源。
[0046] 在部分实施例中,在所述步骤1中,帧数据的标记过程包括:从字节流环形缓冲器的字节队列中获取当前帧数据的信息,所述信息包括起始指针位置和帧长度;向后偏移起始指针位置,当字节流环形缓冲器的字节队列未满时,将当前帧数据的帧属性写入帧数据流环形缓冲器的帧队列中。
[0047] 在部分实施例中,在所述步骤2中,当帧数据流环形缓冲器的帧队列未空时,从帧队列读取帧属性,根据帧属性从字节流环形缓冲器的字节队列读取对应的帧数据到用户数据缓冲器;当帧数据流环形缓冲器的帧队列为空时,依次释放动态扩展的字节流环形缓冲器和帧数据流环形缓冲器的资源空间,恢复到初始化状态。
[0048] 只要字节队列未满时,都支持向字节队列写入数据;只要帧队列未满,都支持向帧数据流队列写入帧属性;只要字节流数据不会导致帧队列数据被覆盖时,都可以写入字节流和帧数据;当帧数据未被读出使用时,则该帧对应字节流空间不允许数据覆盖,因此仅当该帧帧数据被使用后,才会给对应空间释放被覆盖权。
[0049] 作为优选,采用初始化函数初始化字节流和帧流数据结构、缓冲器资源、分帧模式(硬件定时器计数模式或周期轮询模式)、回调事件、超时时间和帧标记。
[0050] 作为优选,采用字节流写队列函数将串口接收的字节流数据写入字节流环形缓冲器。
[0051] 作为优选,采用超时分帧扫描函数在固定的基准时间下间隔扫描或利用定时器计数方式实现分帧和帧数据流标记。
[0052] 作为优选,采用事件扫描函数检测是否有数据被接收并获取帧数据触发回调事件。
[0053] 最后应说明的是:以上各实施例仅仅为本发明的较优实施例用以说明本发明的技术方案,而非对其限制,当然更不是限制本发明的专利范围;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围;也就是说,但凡在本发明的主体设计思想和精神上作出的毫无实质意义的改动或润色,其所解决的技术问题仍然与本发明一致的,均应当包含在本发明的保护范围之内;另外,将本发明的技术方案直接或间接的运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。