一种实现环形缓冲区的方法、装置及数字电视接收终端的制作方法

文档序号:7740780阅读:149来源:国知局
专利名称:一种实现环形缓冲区的方法、装置及数字电视接收终端的制作方法
技术领域
本发明涉及电子通信领域,尤其涉及一种实现环形缓冲区的方法及装置。
背景技术
环形缓冲区是一种最常用的数据结构,在某些限制条件在是一种免锁的数据结 构。且环形缓冲区实现简单,性能很高,应用非常广泛。现有技术中,对环形缓冲区的使用主要有两种方式,一种是预留一个空间不用,用 来区分空和满两种状态,比如某个环形缓冲区大小为N,写指针为W,读指针为R,则此缓冲 区最多只能放N-I个消息,缓冲区为空的条件为W等于R,缓冲区为满的条件为(W+1)%N等 于H,此方法有个不足的地方是会浪费一个消息空间,当消息比较大时会造成空间的浪费。 另外一种使用环形缓冲区的方式是用一个计数器C来表示缓冲区的消息数,计数器C的初 始值为0,当写线程写入一个消息时,计数器C增加1,当读线程读取一个消息时,计数器C 减去1,当使用计数器来表示当前可用消息数时,此环形缓冲区的所有单元都可以用来存放 消息,比如大小为N的缓冲区可以存放N个消息。但因为读写线程都会修改计数器C,所以 对计数器C的修改需要加互斥保护。这样就降低了性能。

发明内容
本发明实施例所要解决的技术问题在于,提供一种实现环形缓冲区的方法及装 置。可实现环形缓冲区的最大利用率。为了解决上述技术问题,本发明实施例提供了一种实现环形缓冲区的方法,包 括当读取数据时,判断环形缓冲区当前读指针的数值是否等于当前写指针的数值, 判断为是时,返回空,判断为否时,读取所述环形缓冲区当前读指针所指向存储空间内的数 据,实施读取操作后将所述当前读指针的数值加一;写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的写入数 据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数值,将所述环形缓冲 区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之后的差值是否小于所 述环形缓冲区的最大存储值,判断为是时,将所述数据写入所述环形缓冲区当前写指针所 指向的存储空间,实施写入操作后将所述当前写指针的数值加一,判断为否时,返回满。相应地,本发明实施例提供了一种实现环形缓冲区的装置,包括第一判断单元,用于当读取数据时,判断环形缓冲区当前读指针的数值是否等于 当前写指针的数值,写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数值, 将所述环形缓冲区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之后的 差值是否小于所述环形缓冲区的最大存储值;执行单元,用于读取数据时,当所述第一判断单元判断为是时,返回空,判断为否时,读取所述环形缓冲区当前读指针所指向存储空间内的数据,实施读取操作后将所述当 前读指针的数值加一,写入数据时,当所述第一判断单元判断为是时,将所述数据写入所述环形缓冲区当前写指针所指向的存储空间,实施写入操作后将所述当前写指针的数值加一,判断为否 时,返回满。本发明实施例还提供了一种数字电视接收终端,包括如权利要求5 7任一项所述实现环形缓冲区的装置。实施本发明实施例,具有如下有益效果实施本发明,可在实现环形缓冲区时不需另设空余消息空间以区别环形缓冲区空 或满的情况,最大化的利用了环形缓冲区的消息空间,也不需要另设计数器来记录环形缓 冲区的消息数,从而避免了系统性能的降低。


图1是本发明一种实现环形缓冲区的方法的一实施例的流程示意图;图2是本发明一种实现环形缓冲区的方法的一实施例中读取数据时的流程示意 图;图3是本发明一种实现环形缓冲区的方法的一实施例中写入数据时的流程示意 图;图4是本发明一种实现环形缓冲区的装置一实施例的结构示意图;图5是本发明一种实现环形缓冲区的装置另一实施例的结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一 步地详细描述。图1是本发明一种实现环形缓冲区的方法的实施例的流程示意图,该方法包括以 下步骤100、读取数据时,判断环形缓冲区当前读指针的数值是否等于当前写指针的数 值,判断为是时,返回空,并结束流程,判断为否时,读取所述环形缓冲区当前读指针所指向 存储空间内的数据,实施读取操作后将所述当前读指针的数值加一;101、写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数 值,将所述环形缓冲区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之 后的差值是否小于所述环形缓冲区的最大存储值,判断为是时,将所述数据写入所述环形 缓冲区当前写指针所指向的存储空间,实施写入操作后将所述当前写指针的数值加一,判 断为否时,返回满,并结束流程。需要说明的,100与101之间没有必然的先后关系。需要说明的是,在当读/写操作完成,读指计/写指针的数值加一后还将判断所述 读指针/写指针是否溢出,当溢出时将对所述读指计/写指针进行修正操作。还需要说明的是,首次读写数据前需对所述环形缓冲区进行初始化操作,预设所 述环形缓冲区参数,即定义最大读写指针值、最大消息数、读写状态返回值(0K(好,表示当前环形缓冲区正常),FULL (满,表示当前环形缓冲区已满),EMPTY (空,表示当前环形缓冲 区为空),OVERFLOW(溢出,表示当前环形缓冲区溢出))、读写指针并设置初始值。例如#defineMAX_NUM OXfffffff/* 定义最大读写指针值 */ftdefine ClO /*定义最大消息数*/#define OK 0 /*定义读写状态返回值*/#define FULL (_1) /*定义读写状态返回值*/#def ine EMPTY (_2) /*定义读写状态返回值*/#define OVERFLOW (_3)/* 定义读写状态返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定义写指针并设初始值*/unsigned int R = 0 ;/*定义读指针并设初始值*/图2为本发明一种实现环形缓冲区的方法的实施例中进行读数据操作的具体流 程示意图,包括200、当读取数据时,判断环形缓冲区当前读指针的数值是否等于当前写指针的数 值,判断为是时,返回空,并结束流程,判断为否时,读取所述环形缓冲区当前读指针所指向 存储空间内的数据,实施读取操作后将所述当前读指针的数值加一,并执行步骤201。201、判断所述读指针的数值是否溢出,判断为否时,返回好,判断为是时,修正所 述读指针后返回好。例如,一环形缓冲区,初始预设如下#define MAX_NUM OXfffffff/* 定义最大读写指针值 */ftdefine C 10/*定义最大消息数*/#define OK 0/*定义读写状态返回值*/#def ine FULL (_1) /*定义读写状态返回值*/#def ine EMPTY (_2) /*定义读写状态返回值*/#define OVERFLOW (_3)/* 定义读写状态返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定义写指针并设初始值*/unsigned int R = 0 ;/*定义读指针并设初始值*/其中,当前W = 3,R = 5,读取数据时,先判断W与R是否相等,判断为否,则读取R 指针所指向存储空间内的数据,具体为,data = buffer [R% C],读取后,将所述R指针数据 加1,即R指针数值变为6。再判断所述R指针是否溢出,即判断R是否等于0,判断为否,返 回0K。若R指针溢出,将对R指针进行修正,具体为R = (MAX_NUM% C) +1,修正后再返回 OKo图3为本发明一种实现环形缓冲区的方法的实施例中进行写数据操作的具体流程示意图,包括300、写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数 值,将所述环形缓冲区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之 后的差值是否小于所述环形缓冲区的最大存储值,判断为是时,将所述数据写入所述环形 缓冲区当前写指针所指向的存储空间,实施写入操作后将所述当前写指针的数值加一,并 执行步骤201,判断为否时,返回满。需要说明的是,写入数据时,当所述环形缓冲区的当前写指针的数值小于所述当 前读指针的数值时,则表示所述环级缓冲区溢出。301、判断所述写指针的数值是否溢出,判断为否时,返回好,判断为是时,修正所 述读指针后返回好。
例如,一环形缓冲区,初始预设如下#define MAX_NUM OXfffffff/* 定义最大读写指针值 */ define C 10/*定义最大消息数*/#define OK 0/*定义读写状态返回值*/#def ine FULL (_1) /*定义读写状态返回值*/#def ine EMPTY (_2) /*定义读写状态返回值*/#define OVERFLOW (_3)/* 定义读写状态返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定义写指针并设初始值*/unsigned int R = 0 ;/*定义读指针并设初始值*/其中,当前W = 3,R= 5,写入数据时,先判断W与R相减是否小于环形缓冲区的最 大存储值,判断为是,则将数据写入W指针所指向存储空间内的数据,具体为,buffer [ff% C] =,data读取后,将所述W指针数据加1,即W指针数值变为4。再判断所述W指针是否 溢出,即判断W是否等于0,判断为否,返回0K。若W指针溢出,将对W指针进行修正,具体为W = (MAX_NUM% C) +1,修正后再返回 OKo图4是本发明一种实现环形缓冲区的装置一实施例的结构示意图,该装置可应用 于数字电视接收终端,包括第一判断单元1,用于当读取数据时,判断环形缓冲区当前读指针的数值是否等于 当前写指针的数值,写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数值, 将所述环形缓冲区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之后的 差值是否小于所述环形缓冲区的最大存储值。需要说明的是,写入数据时,当所述环形缓冲区的当前写指针的数值小于所述当 前读指针的数值时,则表示所述环级缓冲区溢出。执行单元2,用于读取数据时,当所述第一判断单元1判断为是时,返回空,判断为 否时,读取所述环形缓冲区当前读指针所指向存储空间内的数据,实施读取操作后将所述当前读指针的数值加一,写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数值, 所述第一判断单元1判断为是时,将所述数据写入所述环形缓冲区当前写指针所指向的存 储空间,实施写入操作后将所述当前写指针的数值加一,判断为否时,返回满。预设单元3,用于预设所述环形缓冲区的初始运行环境。需要说明的是,首次读写数据前需对所述环形缓冲区进行初始化操作,即预设义 最大读写指针值,定义最大消息数,定义读写状态返回值(0K,FULL,EMPTY,OVERFLOW),其中 OK、FULL、EMPTY、OVERFLOW分别代表好、满、空、溢出,定义读写指针并设置初始值。例如;#defineMAX_NUM OXfffffff/* 定义最大读写指针值 */ define C 10/*定义最大消息数*/#define OK 0/*定义读写状态返回值*/#def ine FULL (_1) /*定义读写状态返回值*/#def ine EMPTY (_2) /*定义读写状态返回值*/#define OVERFLOW (_3)/* 定义读写状态返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定义写指针并设初始值*/unsigned int R = 0 ;/*定义读指针并设初始值*/进一步,参照图5,本发明一种实现环形缓冲区的装置另一实施例,所述装置还包括第二判断单元4,用于实施读取操作并将所述当前读指针的数值加一后判断所述 读指针的数值是否溢出,判断为否时,返回好,判断为是时,修正所述读指针后返回好。或实施写入操作并将所述当前写指针的数值加后判断所述写指针的数值是否溢 出,判断为否时,返回好,判断为是时,修正所述读指针后返回好。例如,一环形缓冲区,能过预设单元3初始预设如下#define MAX_NUM OXfffffff/* 定义最大读写指针值 */ define C 10/*定义最大消息数*/#define OK 0/*定义读写状态返回值*/ #def ine FULL (_1) /*定义读写状态返回值*/#define EMPTY (_2)/*定义读写状态返回值*/#define OVERFLOW (_3)/* 定义读写状态返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定义写指针并设初始值*/unsigned int R = 0 ;/*定义读指针并设初始值*/其中,当前W = 3,R = 5,读取数据时,第一判断单元1先判断W与R是否相等,判 断为否,则执行单元2将读取R指针所指向存储空间内的数据,具体为,data = buffer [R%C],读取后,执行单元2将所述R指针数据加1,即R指针数值变为6。第二判断单元4再判 断所述R指针是否溢出,即判断R是否等于0,判断为否,返回OK。若第二判断单元4判断R指针溢出,将对R指针进行修正,具体为R = (MAX_NUM% C)+1,修正后再返回0K。写入数据时,第一判断单元1判断W与R相减是否小于环形缓冲区的最大存储值,判断为是,则执行单元2将数据写入W指针所指向存储空间内的数据,具体为,buffer [ff% C] =,data读取后,将所述W指针数据加1,即W指针数值变为4。第二判断单元4再判断 所述W指针是否溢出,即判断W是否等于0,判断为否,返回0K。若第二判断单元4判断W指针溢出,将对W指针进行修正,具体为W= (MAX_NUM% C)+1,修正后再返回0K。需要说明的是,本发明一种数字电视接收终端实施例中包括的实现环形缓冲区的 装置与图4及图5中所示的实现环形缓冲区的装置在结构与功能上相同,在此不再详述。本发明的数字电视接收终端包括但不限于机顶盒、网络协议电视 (InternetProtocol Television, IPTV)、数字电视一体机、电视手机等具有接收数字电视 功能的终端。由上可知,实施本发明实施例,可在实现环形缓冲区时不需另设空余消息空间以 区别环形缓冲区空或满的情况,最大化的利用了环形缓冲区的消息空间,也不需要另设计 数器来记录环形缓冲区的消息数,从而避免了系统性能的降低。另外,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程, 是可以通过程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介 质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为 磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Radom Access Memory, RAM)等。以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权 利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
权利要求
一种实现环形缓冲区的方法,其特征在于,包括当读取数据时,判断环形缓冲区当前读指针的数值是否等于当前写指针的数值,判断为是时,返回空,判断为否时,读取所述环形缓冲区当前读指针所指向存储空间内的数据,实施读取操作后将所述当前读指针的数值加一;写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数值,将所述环形缓冲区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之后的差值是否小于所述环形缓冲区的最大存储值,判断为是时,将所述数据写入所述环形缓冲区当前写指针所指向的存储空间,实施写入操作后将所述当前写指针的数值加一,判断为否时,返回满。
2.如权利要求1所述的方法,其特征在于,所述实施读取操作后将所述当前读指针的 数值加一的步骤后还包括判断所述读指针的数值是否溢出,判断为否时,返回好,判断为是时,修正所述读指针 后返回好。
3.如权利要求1所述的方法,其特征在于,所述实施写入操作后将所述当前写指针的 数值加一的步骤后还包括判断所述写指针的数值是否溢出,判断为否时,返回好,判断为是时,修正所述读指针 后返回好。
4.如权利要求1 3任一项所述的方法,其特征在于,还包括预设所述环形缓冲区参数。
5.一种实现环形缓冲区的装置,其特征在于,包括第一判断单元,用于当读取数据时,判断环形缓冲区当前读指针的数值是否等于当前 写指针的数值,写入数据时,当所述环形缓冲区当前写指针的数值大于所述当前读指针的数值,将所 述环形缓冲区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之后的差值 是否小于所述环形缓冲区的最大存储值;执行单元,用于读取数据时,当所述第一判断单元判断为是时,返回空,判断为否时,读 取所述环形缓冲区当前读指针所指向存储空间内的数据,实施读取操作后将所述当前读指 针的数值加一,写入数据时,当所述第一判断单元判断为是时,将所述数据写入所述环形缓冲区当前 写指针所指向的存储空间,实施写入操作后将所述当前写指针的数值加一,判断为否时,返 回满。
6.如权利要求5所述的方法,其特征在于,还包括第二判断单元,用于实施读取操作并将所述当前读指针的数值加一后判断所述读指针 的数值是否溢出,判断为否时,返回好,判断为是时,修正所述读指针后返回好。或实施写入操作并将所述当前写指针的数值加后判断所述写指针的数值是否溢出,判 断为否时,返回好,判断为是时,修正所述读指针后返回好。
7.如权利要求5或6所述的方法,其特征在于,还包括预设单元,用于预设所述环形缓冲区参数。
8.一种数字电视接收终端,其特征在于包括如权利要求5 7任一项所述实现环形缓冲区的装置.
全文摘要
本发明实施例公开了一种实现环形缓冲区的方法,包括当读取数据时,判断环形缓冲区当前读指针的数值是否等于当前写指针的数值,或是,返回空,若否,读取所述环形缓冲区当前读指针所指向存储空间内的数据,实施读取操作后将所述当前读指针的数值加一;当写入数据时,将所述环形缓冲区当前写指针的数值与所述当前读指针的数值相减,判断所述相减之后的差值是否小于所述环形缓冲区的最大存储值,若是,将所述数据写入所述环形缓冲区当前写指针所指向的存储空间,实施写入操作后将所述当前写指针的数值加一,若否,返回满。实施本发明,即可最大化的利用了环形缓冲区的消息空间,又不会降低系统的性能。
文档编号H04N5/44GK101800867SQ201010042859
公开日2010年8月11日 申请日期2010年1月19日 优先权日2010年1月19日
发明者喻欣 申请人:深圳市同洲电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1