CN102169420B - 缓冲区循环读写方法及装置 - Google Patents
缓冲区循环读写方法及装置 Download PDFInfo
- Publication number
- CN102169420B CN102169420B CN2011101047209A CN201110104720A CN102169420B CN 102169420 B CN102169420 B CN 102169420B CN 2011101047209 A CN2011101047209 A CN 2011101047209A CN 201110104720 A CN201110104720 A CN 201110104720A CN 102169420 B CN102169420 B CN 102169420B
- Authority
- CN
- China
- Prior art keywords
- buffer zone
- address pointer
- data
- read
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种缓冲区循环读写方法,该方法包括:向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记;从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。本发明还公开了一种缓冲区循环读写装置,该方法和装置能够在保证读数据的操作简便的同时,提高读数据的速度。
Description
技术领域
本发明涉及存储技术领域,特别涉及一种缓冲区循环读写方法及装置。
背景技术
目前,在使用缓冲区做数据读写时,一般都会用一定的方式,实现缓冲区的循环读写。具体步骤如下:
先为程序分配一块固定大小的内存,例如用pBufferBeginPtr来标志该块内存的起始地址,然后定义两个指针对象m_pReadPtr和pWritePtr;m_pReadPtr用来标志缓冲区读数据的位置,m_pWritePtr用来标志和缓冲区写的位置。
写数据时,先将数据组合成分隔符+数据长度+数据的格式,例如用pData标志组合后的数据(pData的数据长度为nDataLen),然后判断缓冲区剩余空间是否能够存放pData数据,若不够,则丢弃该块数据,或采用等待的方式,等有空间后再将该段pData数据拷贝至缓冲区;若空间足够,则直接将pData从m_pWritePtr位置开始拷贝,同时将m_pWritePtr的位置向后移动nDataLen个单位。在遇到缓冲区末端空间不够时(假设此时缓冲区末端剩余的空间单位为nLeftLen),现有的循环读写方法一般有两种处理方式:
写方式1:先将部分数据拷贝至缓冲区末端(此时将剩余nDataLen-nLeftLen的数据),然后将剩余部分从缓冲区起始位置开始拷贝,同时将m_pWritePtr的位置移动pBufferBeginPtr+(nDataLen-nLeftLen)的位置;
写方式2:将数据直接从缓冲区开始位置拷贝,将末端这些空间浪费掉,同时将m_pWritePtr的位置移动pBufferBeginPtr+nDataLen的位置。
读数据时,先判断缓冲区是否有可读数据,若无,则直接返回;若存在可读数据,则先从m_pReadPtr开始,通过分隔符搜索有效数据的位置,找到后,计算出需要读取的数据长度,例如用aDataLen表示,然后再根据数据长度读取剩余的数据。
针对上述两种写数据方式,在读数据时,分别采用如下方式:
若采用写方式1,那么在计算aDataLen时,需要先判断数据是如何存放的,如果数据的一部分字节存放在缓冲区末端,一部分字节存放在缓冲区起始位置,那么计算aDataLen时需要先将这两部分字节组合起来,然后根据组合后的字节计算长度,这种方式在计算aDataLen时比较繁琐,不够简便。
若采用写方式2,那么当读到缓冲区末端时,由于存在一些无效数据,在搜索有效数据时,要将末端整个无效数据搜索一遍,才会从缓冲区开始位置搜索,这个过程会浪费掉一部分搜索时间,降低了数据读取的速度。
发明内容
本发明实施例提供一种缓冲区循环读写方法,能够在保证读数据的操作简便的同时,提高读数据的速度。
本发明实施例提供一种缓冲区循环读写装置,能够在保证读数据的操作简便的同时,提高读数据的速度。
为达到上述目的,本发明的技术方案具体是这样实现的:
一种缓冲区循环读写方法,该方法包括:
向缓冲区写数据时,在依次判断当前写操作和读操作为同一轮、缓冲区末端空间不够存放完整的当前待写入数据、且缓冲区开始位置足够存放完整的当前待写入数据后,从缓冲区开始位置写入待写入数据,在缓冲区上一个数据的末尾处进行标记,同时修改写地址指针,将写地址指针指向写入数据的末尾位置,然后修改轮差值为真;
从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。
较佳地,所述在缓冲区上一个数据的末尾处进行标记,包括:
令无效地址指针等于当前写地址指针,以所述无效地址指针为标记。
较佳地,所述若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,包括:
判断读地址指针是否等于所述无效地址指针,如果是,则令读地址指针指向缓冲区开始位置,令无效地址指针指向缓冲区末尾位置,同时修改轮差值为假;
根据所述读地址指针从缓冲区开始位置通过搜索分隔符搜索有效数据位置。
较佳地,所述通过搜索分隔符搜索有效数据位置,包括:
分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置均为分隔符“$”,则认为搜索到有效数据,否则认为没有搜索到有效数据。
较佳地,所述后续读取数据操作包括:
若没有搜索到有效数据,则判断读地址指针与写地址指针是否相同,如果相同,则结束流程,否则令读地址指针等于写地址指针,修改轮差值为假,并结束流程。
一种缓冲区循环读写装置,该装置包括:
写模块,用于在向缓冲区写数据时,在依次判断当前写操作和读操作为同一轮、缓冲区末端空间不够存放完整的当前待写入数据、且缓冲区开始位置足够存放完整的当前待写入数据后,从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记,同时修改写地址指针,将写地址指针指向写入数据的末尾位置,然后修改轮差值为真;
读模块,用于在从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。
较佳地,所述写模块包括:
写入单元,在向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,
标记单元,与所述写入单元相连,令无效地址指针等于当前写地址指针,以所述无效地址指针为标记。
较佳地,所述读模块包括:
指令单元,判断读地址指针是否等于所述无效地址指针,如果是,则令读地址指针指向缓冲区开始位置,令无效地址指针指向缓冲区末尾位置,同时修改轮差值为假;
搜索单元,与所述指令单元相连,根据所述读地址指针从缓冲区开始位置通过搜索分隔符搜索有效数据位置。
较佳地,所述搜索单元分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置均为分隔符“$”,则认为搜索到有效数据,否则认为没有搜索到有效数据。
较佳地,所述读模块进一步包括:
处理单元,与所诉搜索单元相连,若所述搜索单元没有搜索到有效数据,则判断读地址指针与写地址指针是否相同,如果相同,则结束流程,否则令读地址指针等于写地址指针,修改轮差值为假,并结束流程。
由上述的技术方案可见,本发明的这种缓冲区循环读写方法和装置,在现有缓冲区读写方法2的基础上,添加一个用于标志缓冲区尾端无效位置的变量,使读数据过程中,搜索有效数据时可以跳过无效数据区域,直接从缓冲区开始部分搜索,从而减少了搜索时间,而且利用现有写方法2保证了数据长度计算的简单特性,从而达到在保证读数据的操作简便的同时,提高读数据速度的目的。
附图说明
图1为本发明实施例的缓冲区循环读写原理示意图;
图2为本发明实施例的缓冲区写数据流程图;
图3为本发明实施例的缓冲区读数据流程图;
图4为本发明实施例的缓冲区循环读写装置结构示意图;
图5为本发明实施例的写模块结构示意图;
图6为本发明实施例的读模块结构示意图;
图7为本发明实施例的缓冲区循环读写方法基本流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明主要是在现有缓冲区读写方法2的基础上,添加一个用于标志缓冲区尾端无效位置的变量,使读数据过程中,搜索有效数据时可以跳过无效数据区域,直接从缓冲区开始部分搜索,从而减少了搜索时间,而且现有写方法2保证了数据长度计算的简单特性,从而达到在保证读数据的操作简便的同时,提高读数据速度的目的。
下面将分别以缓冲区的写数据过程和读数据过程详细说明本发明实施例的缓冲区读写方法。
本发明的缓冲区循环读写方法的基本的流程如图7所示:包括:
步骤701,向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记;
步骤702,从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。
其具体流程举例如下:
图1为本发明实施例的缓冲区读写原理示意图,如图1所示,包括以m_pBufferTmpPtr位置开始的一个40K的临时缓冲区,用来保存组合为分隔符$$$$+数据长度iDataLen+具体数据形式的待拷贝数据pData(iDataLen表示具体数据的长度,不是pData的长度);一个以m_pBufferBeginPtr位置开始的200K的缓冲区,用来保存pData数据;
对如图1所示的缓冲区进行读写时,使用的指针及变量如下:
临时缓冲区首地址指针m_pTmpBufferPtr;
缓冲区首地址指针m_pBufferBeginPtr;
缓冲区尾地址指针m_pBufferEndPtr;
无效地址指针m_pInvalidPtr;
读地址指针m_pReadPtr;
写地址指针m_pWritePtr;
轮差值m_bOneRound;
分隔符'$','$','$','$';
其中,轮差值表示当前的写操作和读操作之间是否差了一轮(当写地址的指针从缓冲区末端位置移动到缓冲区开始位置,而读地址的指针还没有这样移动,则读写之间差一轮),其值为真或假(true/false),值为真true时,表示读写之间差一轮,值为假false时,表示读写同一轮。
另外,分隔符可以使用任意符号,位数也可以任意。
缓冲区初始化时:可令m_pReadPtr、m_pWritePtr指向m_pBufferBeginPtr;m_pInvalicPtr、m_pBufferEndPtr指向缓冲区末端,m_bOneRound为false。
将组合数据pData写入缓冲区的过程如图2所示,包括如下步骤:
步骤201,判断当前写操作和读操作是否同一轮,如果是同一轮,即m_bOneRound的值为假(false)则执行步骤202,否则执行步骤208;
步骤202,判断缓冲区尾部空间是否足够;
这一步用于判断缓冲区剩余的空间是否足够写入当前待写入的数据pData(即判断m_pWritePtr+iDataLen是否大于m_pBufferEndPtr,大于则表示不够),如果不足够,则执行步骤203,否则执行步骤209。
步骤203,判断缓冲区开始空间是否足够;
这一步用于判断从缓冲区开始位置到当前读地址指针的位置之间的缓存空间是否足够存放当前待写入的数据pData(即判断m_pBufferBeginPtr+iDataLen是否大于m_pReadPtr,大于则表示不够),如果不足够,则结束流程,否则执行步骤204。
步骤204,从缓冲区开始位置写入数据,即从m_pBufferBeginPtr位置写入pData;
步骤205,将无效地址指针修改为当前写地址,即令m_pInvalidPtr=m_pWritePtr;其中当前的写地址指针指向的是上一个写入缓冲区的数据的末尾位置。
步骤206,修改写地址指针,即令m_pWritePtr=m_pBufferBeginPtr+iDataLen;通过本步骤,写地址指针指向pData的末尾位置。
步骤207,修改轮差值,即令m_bOneRound=true,并结束流程;由于写地址指针超过了读地址指针一轮(即从缓冲区末尾移动到了缓冲区开始,而读地址指针还在缓冲区末尾),所以本步骤将轮差值设为真。
步骤208,判断缓冲区空间是否足够(即判断m_pWritePtr+iDataLen是否大于m_pReadPtr,大于则表示不够),如果不够,则结束流程,否则执行步骤209;这里的足够是指当前待写入数据写入缓冲区后,数据的末尾位置不能超过当前读地址指针的位置,否则就会影响上一个缓存的数据的读取,这也是为什么要设置轮差值这个变量的原因,缓冲区的数据都是先写入再被读出,如果还没有读出数据就被新写入的数据覆盖,则会产生数据错误,而通过轮差值,可以知道写指针是否已经超过读指针一轮(即从缓冲区末尾移动到了缓冲区开始),从而为实现避免写入和读取操作之间的互相影响提供判断依据。
步骤209,写入数据,即从m_pWritePtr位置开始写入pData;
步骤210,修改写地址指针,即令m_pWritePtr+=iDataLen;并结束流程。
另外,在步骤201之前,还可以先对写地址是否为空进行判断,如果为空,即m_pWritePtr==NULL时,直接结束流程,如果不为空,即m_pWritePtr!=NULL时再执行步骤201及后续步骤;判断写地址是否为空,也是为了防止意外情况发生,影响后续操作。
上述各步骤中,“==”“+=”“!=”分别表示等于、加等和不等。
将组合数据pData从缓冲区中读出的过程如图3所示,包括如下步骤:
步骤301,判断读地址指针是否指向无效地址(即判断m_pReadPtr与m_pInvalidPtr是否相等),如果是,则执行步骤302,否则执行步骤305;
步骤302,修改读地址指针,即令m_pReadPtr=m_pBufferBeginPtr;
步骤303,修改无效地址指针,即令m_pInvalidPtr=m_pBufferEndPtr;
步骤304,修改轮差值,即令m_bOneRound=false;
步骤305,判断是否搜索到有效数据;
例如设置一个变量bFindSepratorCode,seprator_code定义为intseprator_code[4]={‘$’,’$’,’$’,’$’},如果这个变量的值为真true,则认为搜索到有效数据,具体搜索时可以采用搜索分隔符的方式,具体如下:
以上代码分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置均为分隔符“$”,则认为搜索到了有效数据,即bFindSepratorCode=true执行步骤306;否则认为没有搜索到有效数据,即bFindSepratorCode=false,执行步骤311;
步骤306,获取数据长度,即通过运算m_pReadPtr[4]|m_pReadPtr[5]<<8|m_pReadPtr[6]<<16|m_pReadPtr[7]<<24,得到数据长度aDataLen的值(这里是通过内存移位的方式,计算数据长度。<<8表示向左移8位,<<16表示向左移16位,<<24表示内存向左移24位。m_pReadPtr[7]表示从m_pReadPtr开始向后偏移7个单位,aDataLen表示缓冲区中保存的具体数据的长度);aDataLen的值应当与写入步骤中,数据pData中携带的数据长度iDataLen的值相同。
步骤307,判断数据长度是否有效;
本步骤判断数据长度aDataLen的值是否小于0或者aDataLen+8的值是否大于无效地址指针减去读地址指针的值(即判断aDataLen是否小于0和判断(aDataLen+8)是否大于(m_pInvalidPtr-m_pReadPtr));如果有效,则执行步骤308,否则执行步骤312;本步骤用于防止数据读取错误,属于可选步骤。
步骤308,读取数据,即从m_pReadPtr+8的位置读取数据;这里读取的是具体数据,即pData中除前8位(分隔符4位,数据长度iDataLen4位)以外的数据内容。
步骤309,清空已读取数据的缓冲区,即将缓冲区中m_pReadPtr到m_pReadPtr+aDataLen+8之间的数据清空;当然,不清空也是可以的,此时本步骤不需要执行,后续数据直接覆盖原始数据即可。
步骤310,修改读地址指针,即令m_pReadPtr=m_pReadPtr+aDataLen+8;并结束流程。
步骤311,判断读地址与写地址是否相同(即判断m_pReadPtr和m_pWritePtr是否相等),如果相同,则结束流程,否则执行步骤312。
步骤312,修改读地址指针,即令m_pReadPtr=m_pWritePtr。
步骤313,修改轮差值,即令m_bOneRound=false;并结束流程。
另外,在步骤301之前,还可以先对读地址是否为空进行判断,如果为空,即m_pReadPtr==NULL时,直接结束流程,如果不为空,即m_pReadPtr!=NULL时再执行步骤301及后续步骤。
本发明实施例还提供一种缓冲区循环读写装置,如图4所示,该装置包括:
缓冲区401,用于缓存数据;
写模块402,与所述缓冲区401相连,在向缓冲区401写数据时,若缓冲区401末端空间不够存放完整的当前待写入数据,则从缓冲区401开始位置写入待写入数据,并在缓冲区401上一个数据的末尾处进行标记;
读模块403,与所述缓冲区401相连,在从缓冲区401读数据时,若读地址指针指向所述标记,则直接从缓冲区401开始位置搜索有效数据位置,并进行后续读取数据的操作。
实际上,上述写模块402执行的具体操作可以参考图2所示的写流程,读模块403执行的具体操作可以参考图3所示的读流程,这里不再详细介绍。
其中,所述写模块402如图5所示,包括:
写入单元501,在向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则从缓冲区开始位置写入待写入数据;具体可参考上述方法实施例中介绍的步骤201~204,及步骤206~210。
标记单元502,与所述写入单元相连,令无效地址指针等于当前写地址指针,以所述无效地址指针为标记;具体可参考上述方法实施例中介绍的步骤205。
所述读模块403如图6所示,包括:
指令单元601,判断读地址指针是否等于所述无效地址指针,如果是,则令读地址指针指向缓冲区开始位置,令无效地址指针指向缓冲区末尾位置,同时修改轮差值为假;具体可参考上述方法实施例中介绍的步骤301~304。
搜索单元602,与所述指令单元相连,根据所述读地址指针从缓冲区开始位置通过搜索分隔符搜索有效数据位置;具体可参考上述方法实施例中介绍的步骤305~313。
其中,所述搜索单元602搜索有效数据位置的具体方法可参考上述步骤305:分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置均为分隔符“$”,则认为搜索到有效数据,否则认为没有搜索到有效数据。
作为另一实施例,仍如图6所示,所述读模块403可以进一步包括:
处理单元603,与所诉搜索单元602相连,若所述搜索单元没有搜索到有效数据,则判断读地址指针与写地址指针是否相同,如果相同,则结束流程,否则令读地址指针等于写地址指针,修改轮差值为假,并结束流程;具体可参考上述方法实施例中介绍的步骤311~313。
另外,所述读模块403中还可以包括一读取单元,与所诉搜索单元602相连,执行操作具体可参考上述方法实施例中介绍的步骤306~310:若所述搜索单元搜索到有效数据,则获取数据长度,即通过运算m_pReadPtr[4]|m_pReadPtr[5]<<8|m_pReadPtr[6]<<16|m_pReadPtr[7]<<24,得到数据长度aDataLen的值;并判断数据长度是否有效;若有效,即aDataLen<=0||(aDataLen+8)>(m_pInvalidPtr-m_pReadPtr)不成立,则读取数据,即从m_pReadPtr+8的位置读取数据;这里读取的是具体数据,即pData中除前8位(分隔符4位,数据长度iDataLen4位)以外的数据内容;数据读取完成后,可以进一步清空已读取数据的缓冲区,即将缓冲区中m_pReadPtr到m_pReadPtr+aDataLen+8之间的数据清空;当然,不清空也是可以的,后续数据直接覆盖即可。数据读取完成后,或者进一步清空缓存后,需要修改读地址指针,即令m_pReadPtr=m_pReadPtr+aDataLen+8;并结束流程。
由上述的实施例可见,本发明的这种缓冲区循环读写方法和装置,在现有缓冲区读写方法2的基础上,添加一个用于标志缓冲区尾端无效位置的变量,使读数据过程中,搜索有效数据时可以跳过无效数据区域,直接从缓冲区开始部分搜索,从而减少了搜索时间,而且利用现有写方法2保证了数据长度计算的简单特性,从而达到在保证读数据的操作简便的同时,提高读数据速度的目的。
Claims (10)
1.一种缓冲区循环读写方法,其特征在于,该方法包括:
向缓冲区写数据时,在依次判断当前写操作和读操作为同一轮、缓冲区末端空间不够存放完整的当前待写入数据、且缓冲区开始位置足够存放完整的当前待写入数据后,从缓冲区开始位置写入待写入数据,在缓冲区上一个数据的末尾处进行标记,同时修改写地址指针,将写地址指针指向写入数据的末尾位置,然后修改轮差值为真;
从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。
2.如权利要求1所述的缓冲区循环读写方法,其特征在于,所述在缓冲区上一个数据的末尾处进行标记,包括:
令无效地址指针等于当前写地址指针,以所述无效地址指针为标记。
3.如权利要求2所述的缓冲区循环读写方法,其特征在于,所述若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,包括:
判断读地址指针是否等于所述无效地址指针,如果是,则令读地址指针指向缓冲区开始位置,令无效地址指针指向缓冲区末尾位置,同时修改轮差值为假;
根据所述读地址指针从缓冲区开始位置通过搜索分隔符搜索有效数据位置。
4.如权利要求3所述的缓冲区循环读写方法,其特征在于,所述通过搜索分隔符搜索有效数据位置,包括:
分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置以及读地址指针+3位置均为分隔符“$”,则认为搜索到有效数据,否则认为没有搜索到有效数据。
5.如权利要求4所述的缓冲区循环读写方法,其特征在于,所述后续读取数据操作包括:
若没有搜索到有效数据,则判断读地址指针与写地址指针是否相同,如果相同,则结束流程,否则令读地址指针等于写地址指针,修改轮差值为假,并结束流程。
6.一种缓冲区循环读写装置,其特征在于,该装置包括:
写模块,用于在向缓冲区写数据时,在依次判断当前写操作和读操作为同一轮、缓冲区末端空间不够存放完整的当前待写入数据、且缓冲区开始位置足够存放完整的当前待写入数据后,从缓冲区开始位置写入待写入数据,并在缓冲区上一个数据的末尾处进行标记,同时修改写地址指针,将写地址指针指向写入数据的末尾位置,然后修改轮差值为真;
读模块,用于在从缓冲区读数据时,若读地址指针指向所述标记,则直接从缓冲区开始位置搜索有效数据位置,并进行后续读取数据的操作。
7.如权利要求6所述的缓冲区循环读写装置,其特征在于,所述写模块包括:
写入单元,在向缓冲区写数据时,若缓冲区末端空间不够存放完整的当前待写入数据,则检查从缓冲区开始位置到当前读数据指针的这段空间是否足够,如果够则从缓冲区开始位置写入待写入数据,否则结束流程;
标记单元,与所述写入单元相连,令无效地址指针等于当前写地址指针,以所述无效地址指针为标记。
8.如权利要求6所述的缓冲区循环读写装置,其特征在于,所述读模块包括:
指令单元,判断读地址指针是否等于所述无效地址指针,如果是,则令读地址指针指向缓冲区开始位置,令无效地址指针指向缓冲区末尾位置,同时修改轮差值为假;
搜索单元,与所述指令单元相连,根据所述读地址指针从缓冲区开始位置通过搜索分隔符搜索有效数据位置。
9.如权利要求8所述的缓冲区循环读写装置,其特征在于,所述搜索单元分别判断读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置是否为分隔符“$”,如果读地址指针位置,读地址指针+1位置,读地址指针+2位置及读地址指针+3位置均为分隔符“$”,则认为搜索到有效数据,否则认为没有搜索到有效数据。
10.如权利要求8或9所述的缓冲区循环读写装置,其特征在于,所述读模块进一步包括:
处理单元,与所诉搜索单元相连,若所述搜索单元没有搜索到有效数据,则判断读地址指针与写地址指针是否相同,如果相同,则结束流程,否则令读地址指针等于写地址指针,修改轮差值为假,并结束流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101047209A CN102169420B (zh) | 2011-04-18 | 2011-04-18 | 缓冲区循环读写方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011101047209A CN102169420B (zh) | 2011-04-18 | 2011-04-18 | 缓冲区循环读写方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102169420A CN102169420A (zh) | 2011-08-31 |
CN102169420B true CN102169420B (zh) | 2013-10-30 |
Family
ID=44490591
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011101047209A Active CN102169420B (zh) | 2011-04-18 | 2011-04-18 | 缓冲区循环读写方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102169420B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103064679B (zh) * | 2012-12-25 | 2015-07-15 | 北京航天测控技术有限公司 | 长时间连续dma传输的缓冲区管理的方法 |
CN103744621A (zh) * | 2013-12-31 | 2014-04-23 | 深圳英飞拓科技股份有限公司 | 缓冲区循环读写的方法及装置 |
CN104461933B (zh) * | 2014-11-07 | 2017-10-03 | 珠海全志科技股份有限公司 | 内存管理方法及其装置 |
CN104464246A (zh) * | 2014-12-10 | 2015-03-25 | 广东广联电子科技有限公司 | 一种远程抄表系统中的串口数据处理方法 |
CN106446705A (zh) * | 2016-08-26 | 2017-02-22 | 杨鹏 | 一种基于区块链的数据循环写入方法及系统 |
CN106909513A (zh) * | 2017-03-20 | 2017-06-30 | 杭州朔天科技有限公司 | 一种异步非对称的读写存储区管理方法 |
EP3575738A1 (de) | 2018-06-01 | 2019-12-04 | Siemens Aktiengesellschaft | Simultanes messen bei mehrspindel-werkzeugmaschinen |
CN109271193B (zh) * | 2018-10-08 | 2023-01-13 | 广州市百果园信息技术有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN109597580B (zh) * | 2018-12-03 | 2021-10-29 | 烟台东方威思顿电气有限公司 | 适用于智能电表负荷曲线存储的flash操作方法 |
CN110673554A (zh) * | 2019-09-19 | 2020-01-10 | 深圳市爱康生物科技有限公司 | 一种应用于工业控制系统的数据缓存处理机制 |
CN110764703A (zh) * | 2019-10-17 | 2020-02-07 | 山东神戎电子股份有限公司 | 一种基于数组实现的用于实时读写pcm数据的方法 |
CN111399781B (zh) * | 2020-04-21 | 2023-09-19 | 中国科学院光电技术研究所 | 一种提高实时图像记录系统可靠性的存储方法 |
CN111865824A (zh) * | 2020-06-19 | 2020-10-30 | 重庆川仪自动化股份有限公司 | 一种串口通信中的双指针环形缓冲区设计方法及系统 |
CN112130765B (zh) * | 2020-09-17 | 2023-05-30 | 智新控制系统有限公司 | Eeprom数据读写方法及装置 |
CN112379844A (zh) * | 2020-11-25 | 2021-02-19 | 深圳市华宝电子科技有限公司 | 一种数据保护方法、装置、电子终端及存储介质 |
CN113138945B (zh) * | 2021-04-16 | 2023-11-21 | 宜通世纪科技股份有限公司 | 一种数据缓存方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545031A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种fifo存储器的数据处理方法 |
CN101281489A (zh) * | 2007-04-03 | 2008-10-08 | 中兴通讯股份有限公司 | 一种先进先出存储器实现方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100180095A1 (en) * | 2005-12-02 | 2010-07-15 | Matsushita Electric Industrial Co., Ltd. | Buffer control device and buffer memory device |
-
2011
- 2011-04-18 CN CN2011101047209A patent/CN102169420B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545031A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种fifo存储器的数据处理方法 |
CN101281489A (zh) * | 2007-04-03 | 2008-10-08 | 中兴通讯股份有限公司 | 一种先进先出存储器实现方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102169420A (zh) | 2011-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102169420B (zh) | 缓冲区循环读写方法及装置 | |
CN101627366B (zh) | 预加载指令的方法及装置 | |
CN104133780B (zh) | 一种跨页预取方法、装置及系统 | |
CN101916180B (zh) | Risc处理器中执行寄存器类型指令的方法和其系统 | |
CN105051680B (zh) | 用于在处理器内部的硬件并行执行道上处理指令的处理器及方法 | |
US8447896B2 (en) | Memory system having high data transfer efficiency and host controller | |
CN106598876B (zh) | 数据储存装置及其数据维护方法 | |
CN109219805B (zh) | 一种多核系统内存访问方法、相关装置、系统及存储介质 | |
CN103513957A (zh) | 高性能缓存系统和方法 | |
TWI406130B (zh) | 資料處理系統、控制器及其搜尋特定記憶體區的方法 | |
KR950703325A (ko) | 수퍼스칼라 마이크로 프로세서에서의 적재 및 저장 연산처리 방법 및 시스템 | |
CN102841865A (zh) | 高性能缓存系统和方法 | |
CN101097522A (zh) | 一种加速bios运行的方法 | |
CN102890722A (zh) | 应用于时序历史数据库的索引方法 | |
CN102508635A (zh) | 一种处理器装置及其循环处理方法 | |
CN103164490A (zh) | 一种不固定长度数据的高效存储实现方法和装置 | |
CN103176914A (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
CN106372008A (zh) | 一种数据缓存方法及装置 | |
CN117950726B (zh) | 基于gpu指令集的spir-v链式操作指令处理方法 | |
CN111443949A (zh) | 一种飞腾服务器平台下的内核内存页拷贝加速方法 | |
CN102375801A (zh) | 一种多核处理器存储系统装置及方法 | |
CN116627502B (zh) | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 | |
CN103514107B (zh) | 高性能数据缓存系统和方法 | |
US20070073971A1 (en) | Memory caching in data processing | |
CN103049324A (zh) | 一种基于优先级位图的AUTOSAR NvM读写任务的管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |