掌桥专利:专业的专利平台
掌桥专利
首页

数据缓存区、基于数据缓存区的串口通信数据帧解析方法及汽车

文献发布时间:2023-06-19 11:57:35


数据缓存区、基于数据缓存区的串口通信数据帧解析方法及汽车

技术领域

本发明涉及到数据传输技术领域,提供了一种数据缓存区及基于数据缓存区的串口通信数据帧解析方法及汽车。

背景技术

Arm和MCU通信获取车辆CAN数据时传输的是字节流数据,收到的可能是完整的消息字节流,也可能是不完整的消息字节流。所以需要不断读取串口中的字节流流数据,然后向数据缓冲区中追加读取到的数据,由于数据缓存区只具备数据存储功能,因此,进行数据解析需要人工定义维护偏移量offset及索引位置Index,偏移量offset用于标识从数据缓存区开始存放接收到的字节流数据的位置,Index用于维护缓存区mBuffer中剩余不够一帧完整数据的索引位置,以上两个变量如果维护不当很容易在拷贝过程中出现数组越界报异常等信息,并且还会出现数据丢失问题。

发明内容

本发明提供了一种基于数据缓存区的串口通信数据帧解析方法,旨在改善上述问题。

本发明是这样是实现的,一种数据缓存区,所述数据缓存区包括:

缓存区对象cache,用于存储字节数据流,

缓存区对象cache的属性,包括:容量Capacity、当前终点Limit、当前位置Position及位置标记Mark;

容量Capacity表示缓存区对象cache可容纳的最大数据量,当前终点Limit表示当前缓存区对象cache内存储数据的数据终点位置,当前位置Position表示下一个要被读或写的字节索引,位置标记Mark用于标记指定的当前位置Position。

另一方面,本发明还提供了一种串口通讯数据解析方法,所述方法具体包括如下步骤:

周期性的将读取的字节流数据存储至权利要求1所述的数据缓存区,同时周期性的对所述数据缓存区存储的字节流数据进行解析,并将解析出的完整数据帧存储至数组raw中。

进一步的,基于数据缓存区的数据存储方法具体如下:

S1、读取字节流数据;

S2、获取数据缓冲区的当前终点位置Limit,将当前终点位置Limit作为当前位置position;

S3、将读取到字节流数据从当前位置position开始逐个存储,并同步更新当前位置position。

进一步的,所述步骤S3具体包括如下步骤:

S31、将读取到的字节流数据中的当前待存储字节存储至当前位置position,令当前位置position=postion+1;

S32、检测当前位置position是否为容量位置,若检测结果为否,则执行步骤S33,若检测结果为是,则令当前位置position=0,再执步骤S33;

S33、读取字节流数据中的下一个字节作为当前待存储字节,执行步骤S31,直至读取的字节流数据中的所有字节存储完毕。

进一步的,字节流数据的解析方法具体包括如下步骤:

S1、将当前位置position赋值给当前终点位置Limit,将当前位置position重置到数据缓冲区的起始位置处;

S2、从数据缓冲区的起始位置处开始,查找数据帧的开始标识位;

S3、从开始标识位处开始,查找数据帧的结束标识位;

S4、将结束标识志位与开始标识位之间的数据存储至数组raw中。

进一步的,开始标识位的获取方法具体如下:

S21、以position=0处的字节作为起始位置,

S22、对当前位置position处的字节进行读取,检测读取字节的标签是否为数据帧的开始标志位;

S23、若检测结果为是,则将标记mark当前位置position为数据帧的开始标识位,并令当前位置position=postion+1,若检测结果为否,则令当前位置position=postion+1,并执行步骤S22。

进一步的,结束标识位的读取方法具体如下:

S24、以开始标识位处的字节作为起始位置;

S25、读取当前位置position处的字节,检测读取字节是否为结束标志位;

S26、若检测结果为是,则将当前位置position至开始位的数据组成的数据帧存储至数组raw中,

若检测结果为否,则令当前位置position=postion+1,检测当前位置position是否等于当前终点位置Limit,若检测结果为否,则执行步骤S25,若检测结果为是,则执行步骤S27;

S27、将当前位置重置至mark标记的开始标识位,执行步骤S25。

进一步的,在一帧数据存储完毕后,数据缓存区内的剩余字节为limit–position,令当前终点位置Limit=limit–position。

另一方面,本发明还提供了一种计算机可读存储介质,所述存储介质中存储至少一条指令,所述至少一段程序,代码集或指令集,所述至少一条指令,至少一段程序,代码集或指令集由处理器记载并执行时实现如权利要求如上所述串口通讯数据解析方法的步骤。

另一方面,本发明还提供了一种串口通讯数据解析方法的电子设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上所述的串口通讯数据解析方法的步骤。

本发明还提供了一种汽车,所述汽车设置有如上串口通讯数据解析方法的电子设备。

本发明通过Arm和MCU通信获取车辆CAN数据时传输的是字节流数据,采用ByteBuffer作为数据缓冲区用来从字节流数据中解析提取出每帧CAN数据,不需要自己维护偏移量offset和索引位置Index,由ByteBuffer内部维护,使用时只需调用它的相关指令就可以保证数据拷贝正确,且不会出现数组越界报的异常问题。

附图说明

图1为本发明实施例提供的基于数据缓存区的数据存储方法流程图;

图2为本发明实施例提供的基于数据缓存区的字节流数据解析方法流程图;

图3为本发明实施例提供的开始标识位获取方法流程图;

图4为本发明实施例提供的结束标识位读取方法流程图;

图5为本发明实施例提供的串口通信数据帧解析方法的电子设备的结构图。

具体实施方式

下面对照附图,通过对最优实施例的描述,对本发明的具体实施方式作进一步详细的说明。

本发明实施例提供的数据缓存区ByteBuffer包括:

缓存区对象cache,用于存储字节数据流,

缓存区对象cache的属性,包括:容量Capacity、当前终点Limit、当前位置Position及位置标记Mark,并遵循:mark<=position<=limit<=capacity,在构建缓存区对象cache时,定义好缓存区对象cache的上述四个属性,表1是对上述四个属性的解释,表1具体如下:

表1缓存区对象cache的属性及其定义

基于术数据缓存区的串口通信数据解析方法具体如下:

在不停地将读取的字节流数据存储至数据缓存区的同时,不停的对数据缓存区的存储的字节流数据进行解析,并将解析出的完整数据帧存储至数组raw中,字节流数据的存储方法及字节流数据解析方法具体如下:

图1为本发明实施例提供的基于数据缓存区的数据存储方法流程图,该方法具体包括如下步骤:

S1、读取字节流数据;

S2、获取数据缓冲区的当前终点Limit位置,将当前终点Limit位置作为当前位置position;

S3、将读取到字节流数据从当前位置position开始逐个存储,并同步更新当前位置position,即向当前位置position写入一个byte,令将当前位置position=postion+1,为下次读写做准备;

在本发明实施例中,上述字节流数据的存储方法具体如下:

S31、将读取到的字节流数据中的当前待存储字节存储至当前位置position,令当前位置position=postion+1;

S32、检测当前位置position是否为容量位置,若检测结果为否,则执行步骤S33,若检测结果为是,则令当前位置position=0,即将当前位置position重置到缓冲区的起始位置处,再执步骤S33;

在数据缓存区的容量为Capacity,那么容量位置即为Capacity-1。

S33、读取字节流数据中的下一个字节作为当前待存储字节,执行步骤S31,直至读取的字节流数据中的所有字节存储完毕。

图2为本发明实施例提供的基于数据缓存区的字节流数据解析方法流程图,该方法具体包括如下步骤:

S1、将当前位置position赋值给当前终点位置Limit,将当前位置position重置到数据缓冲区的起始位置处,即当前位置position=0;

S2、从数据缓冲区的起始位置处开始,查找数据帧的开始标识位;

S3、从开始标识位处开始,查找数据帧的结束标识位;

S4、将结束标识志位与开始标识位之间的数据存储至数组raw中。

在本发明实施例中,以MCU通信协议格式为例进行说明,每条消息由开始标识位、消息头、消息体、校验码及结束标识位组成,其中,开始标识位及结束标识位分别占一个字节,例如用字符0x7e表示。

图3为本发明实施例提供的开始标识位获取方法流程图,该方法具体包括如下步骤:

S21、以position=0处的字节作为起始位置,

S22、对当前位置position处的字节进行读取,检测读取字节的标签是否为数据帧的开始标志位;

S23、若检测结果为是,则将标记mark当前位置position为数据帧的开始标识位,并令当前位置position=postion+1,若检测结果为否,则令当前位置position=postion+1,并执行步骤S22。

图4为本发明实施例提供的结束标识位读取方法流程图,该方法具体包括如下步骤:

S24、以开始标识位处的字节作为起始位置,

S25、读取当前位置position处的字节,检测读取字节的标签是否为结束标志位;

S26、若检测结果为是,则将当前位置position至开始位的数据组成的数据帧存储至数组raw中,若检测结果为否,则执行步骤S27;

S27、令当前位置position=postion+1,检测当前位置position是否等于当前终点位置Limit,若检测结果为否,则执行步骤S25,若检测结果为是,则执行步骤S28;

S28、将当前位置重置至mark标记的开始标识位,执行步骤S25。

本发明实施例中的数据缓存区,在前位置position处于容量位置时,position+1=0,即从当前位置position从0依次移动至Capacity-1处,再从Capacity-1处移动至0处。

在本发明实施例中,在一帧数据存储完毕后,数据缓存区内的剩余字节为limit–position,令当前终点位置Limit=limit–position,将当前位置position重置到缓冲区的起始位置处,执行下一帧数据的读取。

本发明以MCU串口通讯数据为例进行说明,MCU字节流数据的存储方法及MCU字节流数据解析方法的代码分别如下;

MCU字节流数据的存储方法代码如下:

MCU字节流数据解析方法代码如下:

表1为MCU字节流数据存储方法及MCU字节流数据解析方法中相关指令的解释,表1如下:

表1指令功能的解释

本发明通过Arm和MCU通信获取车辆CAN数据时传输的是字节流数据,采用ByteBuffer作为数据缓冲区用来从字节流数据中解析提取出每帧CAN数据,不需要自己维护偏移量offset和索引位置Index,由ByteBuffer内部维护,使用时只需调用它的相关指令就可以保证数据拷贝正确,且不会出现数组越界报的异常问题。

相应的,本发明提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行时实现前述所述的应用服务自启动方法步骤。

相应的,本发明还公开了一种基于数据缓存区的串口通信数据帧解析方法的电子设备,图5为本发明实施例提供一种串口通信数据帧解析方法的电子设备的结构图,如图5所示,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如前述公开的一种基于数据缓存区的串口通信数据帧解析方法的步骤。

另一方面,本发明实施例提供了一种汽车,所述汽车设置有上述基于数据缓存区的串口通信数据帧解析方法的电子设备。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参加即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参加方法实施例的部分说明即可。

本说明书实施例并不局限于必须是符合行业通信标准、标准计算机数据处理和数据存储规则或本说明书一个或多个实施例所描述的情况。某些行业标准或者使用自定义方式或实施例描述的实施基础上略加修改后的实施方案也可以实现上述实施例相同、等同或相近、或变形后可预料的实施效果。应用这些修改或变形后的数据获取、存储、判断、处理方式等获取的实施例,仍然可以属于本说明书实施例的可选实施方案范围之内。另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤.

而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

技术分类

06120113117353