一种高可靠性异步环形缓存区存储、处理的实现方法技术

技术编号:31707271 阅读:14 留言:0更新日期:2022-01-01 11:09
本发明专利技术公开了一种高可靠性异步环形缓存区存储、处理的实现方法,采用异步环形缓存区进行数据存储,可用效地节约存储空间;数据达到结束地址时,通过对存数地址进行(2

【技术实现步骤摘要】
一种高可靠性异步环形缓存区存储、处理的实现方法


[0001]本专利技术涉及数据处理
,特别涉及基于异步软件的系统缓存
,具体涉及一种高可靠性异步环形缓存区存储、处理的实现方法。

技术介绍

[0002]在数据接收领域,外设的数据通信频率通常较低,而软件运行的主频较高,为了匹配两者之间的速度,数据接收缓存是常用的机制,即:数据通过中断或线程接收,在收到一定数量的数据之后,软件主进程中对缓存数据进行判定、执行,提高软件运行速率及数据处理能力。
[0003]数据缓存与处理属于两个相互独立的任务,两个任务通过数据缓存区接口进行联系。在数据缓存端,如何为数据缓存分配内存是数据可靠接收的关键,通常在嵌入式软件中分配一个超大的数组用于数据接收,而线程中常用链表扩展方式存储数据,两者均占用较多的内存资源;在数据处理端,在不破坏数据缓存区的情况下对数据可靠、高效处理是软件的核心。
[0004]现有技术方案主要有:通过动态分配内存方式,即接收到一个数据分配一个内存保存数据,简单但需要较多的系统资源,对轻量级应用不适合;通过固定长度的缓存区接收数据,分为先进先出、简易的环形缓存区保存数据,但处理效率较低。
[0005]在数据处理技术中,通常也有两种方式:通过等待方式,即当收到数据后,直至数据接收全部完成后,进行处理,但CPU运行效率较低,在多任务系统中无法运行;通过异步方式,即实时判定缓存区数据并处理,由于是并发操作,往往无法解析数据中的有效性信息。
[0006]为了解决上述技术问题:申请号为202011416055的专利中所述的环形缓存区,为解决多线程并发读写的“一写多读”场景,提出了一种一写多读高并发无锁环形缓存及其实现方法,主要解决了“多读”引起的错乱问题,但未能说明单一线程读取时如何高效可靠解析数据缓存区中的数据;申请号为201910829304.1的专利提供了一种基于异步环形缓冲区的数据读取、写入方法及装置,主要实现以较小的缓冲区完成对产品的成功升级,环形缓冲区的数据写入方式原始,读取方式效率较低。
[0007]针对上述问题,本专利技术提出了一种高可靠性异步环形缓存区存储、处理的实现方法,解决了数据存储、读取中数据占用存储多、解析效率低、识别率低的问题。

技术实现思路

[0008]为解决上述技术问题,本专利技术提供了一种高可靠性异步环形缓存区存储、处理的实现方法,异步环形缓存区包括存数地址、取数地址、帧头地址、帧尾地址、帧头及帧尾;帧头表示一帧正确数据的帧头地址;帧尾表示一帧正确数据的结束地址;
[0009]基于异步环形缓存区的存储实现步骤包括:
[0010]S11.整理需求,将数据包进行分包处理,整理通信协议;
[0011]S12.根据步骤S11中分包处理后的包大小,依次为通信端口创建环形缓存区接口
对象,长度满足2
n
,n为正整数;
[0012]S13.建立数据接收任务,将步骤S12建立的数据缓存区首地址映射到接收端口上,实现数据接收;
[0013]S14.接收到一个字节数据后,存数地址加1,并与2
n

1相与操作,实现首发相连,达到环形缓存区效果;
[0014]基于异步环形缓存区的处理实现步骤包括:
[0015]S21.在主进程中创建端口数据处理任务;
[0016]S22.比较存数地址与取数地址是否一致,发现不一致,对缓存区数据进行处理,包括帧头处理、数据帧长度处理,每处理一次存数地址,需要对存数地址进行加1,并与2
n

1相与操作;
[0017]S23.帧头处理完成后,根据数据帧长度完成一帧数据接收,完成数据解析;
[0018]S24.数据解析正确,从环形缓存区中,根据帧头地址及帧尾地址取出数据帧,由主进程进行相应处理。
[0019]其中,所述异步环形缓存区的接口设计包括:rcvBuf为接收缓存区,长度为2
n
字节要求大于数据包长度的2倍;rcvDataLen为数据接收长度;savePtr为存数地址,接收到一个字节之后该存数地址加1;getPtr为取数地址,每判定一个字节该取数地址加1;startPtr为帧头地址;endPtr为帧尾地址;bStartRcvFlag为帧头正确标志位。
[0020]通过上述技术方案,本专利技术具有如下有益效果:
[0021]1、采用异步环形缓存区进行数据存储,可用效地节约存储空间;
[0022]2、数据达到结束地址时,通过对存数地址进行(2
n
+1)&(2
n

1)操作以达到首尾相连的效果,避免过多的逻辑判断,增强数据存储的可靠性;
[0023]3、数据处理中每次仅丢弃帧头字节,丢弃最小的字节,保证后续数据解析的正确性、可靠性;
[0024]4、主进程中比较存数地址与取数地址的位置,进行数据解析操作,存数地址达到结束时,通过对存数地址进行(2
n
+1)&(2
n

1)操作以达到首尾相连的效果,避免过多的逻辑判断,提高数据处理的实时性及可靠性。
附图说明
[0025]为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
[0026]附图1是本专利技术所述异步环形缓存区的构成示意图;
[0027]附图2是本专利技术所述异步环形缓存区的存储实现图;
[0028]附图3是本专利技术所述异步环形缓存区的处理实现图;
[0029]附图4是本专利技术所述异步环形缓存区的处理流程图。
具体实施方式
[0030]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述。
[0031]参考图1,本专利技术提供的异步环形缓存区包括存数地址、取数地址、帧头地址、帧尾
地址、帧头及帧尾;帧头表示一帧正确数据的帧头地址;帧尾表示一帧正确数据的结束地址;异步环形缓存区的接口设计包括:rcvBuf为接收缓存区,长度为2
n
字节要求大于数据包长度的2倍;rcvDataLen为数据接收长度;savePtr为存数地址,接收到一个字节之后该存数地址加1;getPtr为取数地址,每判定一个字节该取数地址加1;startPtr为帧头地址;endPtr为帧尾地址;bStartRcvFlag为帧头正确标志位。
[0032]参考图2,基于异步环形缓存区的存储实现步骤包括:
[0033]S11.整理需求,将数据包进行分包处理,整理通信协议;
[0034]S12.根据步骤S11中分包处理后的包大小,依次为通信端口创建环形缓存区接口对象,长度满足2
n
,n为正整数;
[0035]S13.建立数据接收任务,将步骤S12建立的数据缓存区首地址映射到接收端口上,实现数据接收;
[0036]S14本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种高可靠性异步环形缓存区存储、处理的实现方法,其特征在于,异步环形缓存区包括存数地址、取数地址、帧头地址、帧尾地址、帧头及帧尾;帧头表示一帧正确数据的帧头地址;帧尾表示一帧正确数据的结束地址;基于异步环形缓存区的存储实现步骤包括:S11.整理需求,将数据包进行分包处理,整理通信协议;S12.根据步骤S11中分包处理后的包大小,依次为通信端口创建环形缓存区接口对象,长度满足2
n
,n为正整数;S13.建立数据接收任务,将步骤S12建立的数据缓存区首地址映射到接收端口上,实现数据接收;S14.接收到一个字节数据后,存数地址加1,并与2
n

1相与操作,实现首发相连,达到环形缓存区效果;基于异步环形缓存区的处理实现步骤包括:S21.在主进程中创建端口数据处理任务;S22.比较存数地址与取数地址是否一致,发现不一致,对...

【专利技术属性】
技术研发人员:裴文祥张建新汪先超赵路旭卞和毅金根黄晴
申请(专利权)人:苏州信卓胜电子科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1