專利名稱:一種實現(xiàn)環(huán)形緩沖區(qū)的方法、裝置及數(shù)字電視接收終端的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子通信領(lǐng)域,尤其涉及一種實現(xiàn)環(huán)形緩沖區(qū)的方法及裝置。
背景技術(shù):
環(huán)形緩沖區(qū)是一種最常用的數(shù)據(jù)結(jié)構(gòu),在某些限制條件在是一種免鎖的數(shù)據(jù)結(jié) 構(gòu)。且環(huán)形緩沖區(qū)實現(xiàn)簡單,性能很高,應(yīng)用非常廣泛?,F(xiàn)有技術(shù)中,對環(huán)形緩沖區(qū)的使用主要有兩種方式,一種是預(yù)留一個空間不用,用 來區(qū)分空和滿兩種狀態(tài),比如某個環(huán)形緩沖區(qū)大小為N,寫指針為W,讀指針為R,則此緩沖 區(qū)最多只能放N-I個消息,緩沖區(qū)為空的條件為W等于R,緩沖區(qū)為滿的條件為(W+1)%N等 于H,此方法有個不足的地方是會浪費一個消息空間,當(dāng)消息比較大時會造成空間的浪費。 另外一種使用環(huán)形緩沖區(qū)的方式是用一個計數(shù)器C來表示緩沖區(qū)的消息數(shù),計數(shù)器C的初 始值為0,當(dāng)寫線程寫入一個消息時,計數(shù)器C增加1,當(dāng)讀線程讀取一個消息時,計數(shù)器C 減去1,當(dāng)使用計數(shù)器來表示當(dāng)前可用消息數(shù)時,此環(huán)形緩沖區(qū)的所有單元都可以用來存放 消息,比如大小為N的緩沖區(qū)可以存放N個消息。但因為讀寫線程都會修改計數(shù)器C,所以 對計數(shù)器C的修改需要加互斥保護。這樣就降低了性能。
發(fā)明內(nèi)容
本發(fā)明實施例所要解決的技術(shù)問題在于,提供一種實現(xiàn)環(huán)形緩沖區(qū)的方法及裝 置??蓪崿F(xiàn)環(huán)形緩沖區(qū)的最大利用率。為了解決上述技術(shù)問題,本發(fā)明實施例提供了一種實現(xiàn)環(huán)形緩沖區(qū)的方法,包 括當(dāng)讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于當(dāng)前寫指針的數(shù)值, 判斷為是時,返回空,判斷為否時,讀取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶虼鎯臻g內(nèi)的數(shù) 據(jù),實施讀取操作后將所述當(dāng)前讀指針的數(shù)值加一;寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的寫入數(shù) 據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù)值,將所述環(huán)形緩沖 區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之后的差值是否小于所 述環(huán)形緩沖區(qū)的最大存儲值,判斷為是時,將所述數(shù)據(jù)寫入所述環(huán)形緩沖區(qū)當(dāng)前寫指針?biāo)?指向的存儲空間,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,判斷為否時,返回滿。相應(yīng)地,本發(fā)明實施例提供了一種實現(xiàn)環(huán)形緩沖區(qū)的裝置,包括第一判斷單元,用于當(dāng)讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于 當(dāng)前寫指針的數(shù)值,寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù)值, 將所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之后的 差值是否小于所述環(huán)形緩沖區(qū)的最大存儲值;執(zhí)行單元,用于讀取數(shù)據(jù)時,當(dāng)所述第一判斷單元判斷為是時,返回空,判斷為否時,讀取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),實施讀取操作后將所述當(dāng) 前讀指針的數(shù)值加一,寫入數(shù)據(jù)時,當(dāng)所述第一判斷單元判斷為是時,將所述數(shù)據(jù)寫入所述環(huán)形緩沖區(qū)當(dāng)前寫指針?biāo)赶虻拇鎯臻g,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,判斷為否 時,返回滿。本發(fā)明實施例還提供了一種數(shù)字電視接收終端,包括如權(quán)利要求5 7任一項所述實現(xiàn)環(huán)形緩沖區(qū)的裝置。實施本發(fā)明實施例,具有如下有益效果實施本發(fā)明,可在實現(xiàn)環(huán)形緩沖區(qū)時不需另設(shè)空余消息空間以區(qū)別環(huán)形緩沖區(qū)空 或滿的情況,最大化的利用了環(huán)形緩沖區(qū)的消息空間,也不需要另設(shè)計數(shù)器來記錄環(huán)形緩 沖區(qū)的消息數(shù),從而避免了系統(tǒng)性能的降低。
圖1是本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的方法的一實施例的流程示意圖;圖2是本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的方法的一實施例中讀取數(shù)據(jù)時的流程示意 圖;圖3是本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的方法的一實施例中寫入數(shù)據(jù)時的流程示意 圖;圖4是本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的裝置一實施例的結(jié)構(gòu)示意圖;圖5是本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的裝置另一實施例的結(jié)構(gòu)示意圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進一 步地詳細(xì)描述。圖1是本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的方法的實施例的流程示意圖,該方法包括以 下步驟100、讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于當(dāng)前寫指針的數(shù) 值,判斷為是時,返回空,并結(jié)束流程,判斷為否時,讀取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶?存儲空間內(nèi)的數(shù)據(jù),實施讀取操作后將所述當(dāng)前讀指針的數(shù)值加一;101、寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù) 值,將所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之 后的差值是否小于所述環(huán)形緩沖區(qū)的最大存儲值,判斷為是時,將所述數(shù)據(jù)寫入所述環(huán)形 緩沖區(qū)當(dāng)前寫指針?biāo)赶虻拇鎯臻g,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,判 斷為否時,返回滿,并結(jié)束流程。需要說明的,100與101之間沒有必然的先后關(guān)系。需要說明的是,在當(dāng)讀/寫操作完成,讀指計/寫指針的數(shù)值加一后還將判斷所述 讀指針/寫指針是否溢出,當(dāng)溢出時將對所述讀指計/寫指針進行修正操作。還需要說明的是,首次讀寫數(shù)據(jù)前需對所述環(huán)形緩沖區(qū)進行初始化操作,預(yù)設(shè)所 述環(huán)形緩沖區(qū)參數(shù),即定義最大讀寫指針值、最大消息數(shù)、讀寫狀態(tài)返回值(0K(好,表示當(dāng)前環(huán)形緩沖區(qū)正常),F(xiàn)ULL (滿,表示當(dāng)前環(huán)形緩沖區(qū)已滿),EMPTY (空,表示當(dāng)前環(huán)形緩沖 區(qū)為空),OVERFLOW(溢出,表示當(dāng)前環(huán)形緩沖區(qū)溢出))、讀寫指針并設(shè)置初始值。例如#defineMAX_NUM OXfffffff/* 定義最大讀寫指針值 */ftdefine ClO /*定義最大消息數(shù)*/#define OK 0 /*定義讀寫狀態(tài)返回值*/#define FULL (_1) /*定義讀寫狀態(tài)返回值*/#def ine EMPTY (_2) /*定義讀寫狀態(tài)返回值*/#define OVERFLOW (_3)/* 定義讀寫狀態(tài)返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定義寫指針并設(shè)初始值*/unsigned int R = 0 ;/*定義讀指針并設(shè)初始值*/圖2為本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的方法的實施例中進行讀數(shù)據(jù)操作的具體流 程示意圖,包括200、當(dāng)讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于當(dāng)前寫指針的數(shù) 值,判斷為是時,返回空,并結(jié)束流程,判斷為否時,讀取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶?存儲空間內(nèi)的數(shù)據(jù),實施讀取操作后將所述當(dāng)前讀指針的數(shù)值加一,并執(zhí)行步驟201。201、判斷所述讀指針的數(shù)值是否溢出,判斷為否時,返回好,判斷為是時,修正所 述讀指針后返回好。例如,一環(huán)形緩沖區(qū),初始預(yù)設(shè)如下#define MAX_NUM OXfffffff/* 定義最大讀寫指針值 */ftdefine C 10/*定義最大消息數(shù)*/#define OK 0/*定義讀寫狀態(tài)返回值*/#def ine FULL (_1) /*定義讀寫狀態(tài)返回值*/#def ine EMPTY (_2) /*定義讀寫狀態(tài)返回值*/#define OVERFLOW (_3)/* 定義讀寫狀態(tài)返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定義寫指針并設(shè)初始值*/unsigned int R = 0 ;/*定義讀指針并設(shè)初始值*/其中,當(dāng)前W = 3,R = 5,讀取數(shù)據(jù)時,先判斷W與R是否相等,判斷為否,則讀取R 指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),具體為,data = buffer [R% C],讀取后,將所述R指針數(shù)據(jù) 加1,即R指針數(shù)值變?yōu)?。再判斷所述R指針是否溢出,即判斷R是否等于0,判斷為否,返 回0K。若R指針溢出,將對R指針進行修正,具體為R = (MAX_NUM% C) +1,修正后再返回 OKo圖3為本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的方法的實施例中進行寫數(shù)據(jù)操作的具體流程示意圖,包括300、寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù) 值,將所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之 后的差值是否小于所述環(huán)形緩沖區(qū)的最大存儲值,判斷為是時,將所述數(shù)據(jù)寫入所述環(huán)形 緩沖區(qū)當(dāng)前寫指針?biāo)赶虻拇鎯臻g,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,并 執(zhí)行步驟201,判斷為否時,返回滿。需要說明的是,寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)的當(dāng)前寫指針的數(shù)值小于所述當(dāng) 前讀指針的數(shù)值時,則表示所述環(huán)級緩沖區(qū)溢出。301、判斷所述寫指針的數(shù)值是否溢出,判斷為否時,返回好,判斷為是時,修正所 述讀指針后返回好。
例如,一環(huán)形緩沖區(qū),初始預(yù)設(shè)如下#define MAX_NUM OXfffffff/* 定義最大讀寫指針值 */ define C 10/*定義最大消息數(shù)*/#define OK 0/*定義讀寫狀態(tài)返回值*/#def ine FULL (_1) /*定義讀寫狀態(tài)返回值*/#def ine EMPTY (_2) /*定義讀寫狀態(tài)返回值*/#define OVERFLOW (_3)/* 定義讀寫狀態(tài)返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定義寫指針并設(shè)初始值*/unsigned int R = 0 ;/*定義讀指針并設(shè)初始值*/其中,當(dāng)前W = 3,R= 5,寫入數(shù)據(jù)時,先判斷W與R相減是否小于環(huán)形緩沖區(qū)的最 大存儲值,判斷為是,則將數(shù)據(jù)寫入W指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),具體為,buffer [ff% C] =,data讀取后,將所述W指針數(shù)據(jù)加1,即W指針數(shù)值變?yōu)?。再判斷所述W指針是否 溢出,即判斷W是否等于0,判斷為否,返回0K。若W指針溢出,將對W指針進行修正,具體為W = (MAX_NUM% C) +1,修正后再返回 OKo圖4是本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的裝置一實施例的結(jié)構(gòu)示意圖,該裝置可應(yīng)用 于數(shù)字電視接收終端,包括第一判斷單元1,用于當(dāng)讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于 當(dāng)前寫指針的數(shù)值,寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù)值, 將所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之后的 差值是否小于所述環(huán)形緩沖區(qū)的最大存儲值。需要說明的是,寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)的當(dāng)前寫指針的數(shù)值小于所述當(dāng) 前讀指針的數(shù)值時,則表示所述環(huán)級緩沖區(qū)溢出。執(zhí)行單元2,用于讀取數(shù)據(jù)時,當(dāng)所述第一判斷單元1判斷為是時,返回空,判斷為 否時,讀取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),實施讀取操作后將所述當(dāng)前讀指針的數(shù)值加一,寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù)值, 所述第一判斷單元1判斷為是時,將所述數(shù)據(jù)寫入所述環(huán)形緩沖區(qū)當(dāng)前寫指針?biāo)赶虻拇?儲空間,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,判斷為否時,返回滿。預(yù)設(shè)單元3,用于預(yù)設(shè)所述環(huán)形緩沖區(qū)的初始運行環(huán)境。需要說明的是,首次讀寫數(shù)據(jù)前需對所述環(huán)形緩沖區(qū)進行初始化操作,即預(yù)設(shè)義 最大讀寫指針值,定義最大消息數(shù),定義讀寫狀態(tài)返回值(0K,F(xiàn)ULL,EMPTY,OVERFLOW),其中 OK、FULL、EMPTY、OVERFLOW分別代表好、滿、空、溢出,定義讀寫指針并設(shè)置初始值。例如;#defineMAX_NUM OXfffffff/* 定義最大讀寫指針值 */ define C 10/*定義最大消息數(shù)*/#define OK 0/*定義讀寫狀態(tài)返回值*/#def ine FULL (_1) /*定義讀寫狀態(tài)返回值*/#def ine EMPTY (_2) /*定義讀寫狀態(tài)返回值*/#define OVERFLOW (_3)/* 定義讀寫狀態(tài)返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定義寫指針并設(shè)初始值*/unsigned int R = 0 ;/*定義讀指針并設(shè)初始值*/進一步,參照圖5,本發(fā)明一種實現(xiàn)環(huán)形緩沖區(qū)的裝置另一實施例,所述裝置還包括第二判斷單元4,用于實施讀取操作并將所述當(dāng)前讀指針的數(shù)值加一后判斷所述 讀指針的數(shù)值是否溢出,判斷為否時,返回好,判斷為是時,修正所述讀指針后返回好?;?qū)嵤懭氩僮鞑⑺霎?dāng)前寫指針的數(shù)值加后判斷所述寫指針的數(shù)值是否溢 出,判斷為否時,返回好,判斷為是時,修正所述讀指針后返回好。例如,一環(huán)形緩沖區(qū),能過預(yù)設(shè)單元3初始預(yù)設(shè)如下#define MAX_NUM OXfffffff/* 定義最大讀寫指針值 */ define C 10/*定義最大消息數(shù)*/#define OK 0/*定義讀寫狀態(tài)返回值*/ #def ine FULL (_1) /*定義讀寫狀態(tài)返回值*/#define EMPTY (_2)/*定義讀寫狀態(tài)返回值*/#define OVERFLOW (_3)/* 定義讀寫狀態(tài)返回值 */typedef BUF_ITEM int ;typedef BUF_RESULT int ;BUF_ITEM buffer[C];unsigned int W = 0 ;/*定義寫指針并設(shè)初始值*/unsigned int R = 0 ;/*定義讀指針并設(shè)初始值*/其中,當(dāng)前W = 3,R = 5,讀取數(shù)據(jù)時,第一判斷單元1先判斷W與R是否相等,判 斷為否,則執(zhí)行單元2將讀取R指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),具體為,data = buffer [R%C],讀取后,執(zhí)行單元2將所述R指針數(shù)據(jù)加1,即R指針數(shù)值變?yōu)?。第二判斷單元4再判 斷所述R指針是否溢出,即判斷R是否等于0,判斷為否,返回OK。若第二判斷單元4判斷R指針溢出,將對R指針進行修正,具體為R = (MAX_NUM% C)+1,修正后再返回0K。寫入數(shù)據(jù)時,第一判斷單元1判斷W與R相減是否小于環(huán)形緩沖區(qū)的最大存儲值,判斷為是,則執(zhí)行單元2將數(shù)據(jù)寫入W指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),具體為,buffer [ff% C] =,data讀取后,將所述W指針數(shù)據(jù)加1,即W指針數(shù)值變?yōu)?。第二判斷單元4再判斷 所述W指針是否溢出,即判斷W是否等于0,判斷為否,返回0K。若第二判斷單元4判斷W指針溢出,將對W指針進行修正,具體為W= (MAX_NUM% C)+1,修正后再返回0K。需要說明的是,本發(fā)明一種數(shù)字電視接收終端實施例中包括的實現(xiàn)環(huán)形緩沖區(qū)的 裝置與圖4及圖5中所示的實現(xiàn)環(huán)形緩沖區(qū)的裝置在結(jié)構(gòu)與功能上相同,在此不再詳述。本發(fā)明的數(shù)字電視接收終端包括但不限于機頂盒、網(wǎng)絡(luò)協(xié)議電視 (InternetProtocol Television, IPTV)、數(shù)字電視一體機、電視手機等具有接收數(shù)字電視 功能的終端。由上可知,實施本發(fā)明實施例,可在實現(xiàn)環(huán)形緩沖區(qū)時不需另設(shè)空余消息空間以 區(qū)別環(huán)形緩沖區(qū)空或滿的情況,最大化的利用了環(huán)形緩沖區(qū)的消息空間,也不需要另設(shè)計 數(shù)器來記錄環(huán)形緩沖區(qū)的消息數(shù),從而避免了系統(tǒng)性能的降低。另外,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程, 是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介 質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為 磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機存儲記憶體(Radom Access Memory, RAM)等。以上所揭露的僅為本發(fā)明一種較佳實施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán) 利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
權(quán)利要求
一種實現(xiàn)環(huán)形緩沖區(qū)的方法,其特征在于,包括當(dāng)讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于當(dāng)前寫指針的數(shù)值,判斷為是時,返回空,判斷為否時,讀取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),實施讀取操作后將所述當(dāng)前讀指針的數(shù)值加一;寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù)值,將所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之后的差值是否小于所述環(huán)形緩沖區(qū)的最大存儲值,判斷為是時,將所述數(shù)據(jù)寫入所述環(huán)形緩沖區(qū)當(dāng)前寫指針?biāo)赶虻拇鎯臻g,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,判斷為否時,返回滿。
2.如權(quán)利要求1所述的方法,其特征在于,所述實施讀取操作后將所述當(dāng)前讀指針的 數(shù)值加一的步驟后還包括判斷所述讀指針的數(shù)值是否溢出,判斷為否時,返回好,判斷為是時,修正所述讀指針 后返回好。
3.如權(quán)利要求1所述的方法,其特征在于,所述實施寫入操作后將所述當(dāng)前寫指針的 數(shù)值加一的步驟后還包括判斷所述寫指針的數(shù)值是否溢出,判斷為否時,返回好,判斷為是時,修正所述讀指針 后返回好。
4.如權(quán)利要求1 3任一項所述的方法,其特征在于,還包括預(yù)設(shè)所述環(huán)形緩沖區(qū)參數(shù)。
5.一種實現(xiàn)環(huán)形緩沖區(qū)的裝置,其特征在于,包括第一判斷單元,用于當(dāng)讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于當(dāng)前 寫指針的數(shù)值,寫入數(shù)據(jù)時,當(dāng)所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值大于所述當(dāng)前讀指針的數(shù)值,將所 述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之后的差值 是否小于所述環(huán)形緩沖區(qū)的最大存儲值;執(zhí)行單元,用于讀取數(shù)據(jù)時,當(dāng)所述第一判斷單元判斷為是時,返回空,判斷為否時,讀 取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),實施讀取操作后將所述當(dāng)前讀指 針的數(shù)值加一,寫入數(shù)據(jù)時,當(dāng)所述第一判斷單元判斷為是時,將所述數(shù)據(jù)寫入所述環(huán)形緩沖區(qū)當(dāng)前 寫指針?biāo)赶虻拇鎯臻g,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,判斷為否時,返 回滿。
6.如權(quán)利要求5所述的方法,其特征在于,還包括第二判斷單元,用于實施讀取操作并將所述當(dāng)前讀指針的數(shù)值加一后判斷所述讀指針 的數(shù)值是否溢出,判斷為否時,返回好,判斷為是時,修正所述讀指針后返回好?;?qū)嵤懭氩僮鞑⑺霎?dāng)前寫指針的數(shù)值加后判斷所述寫指針的數(shù)值是否溢出,判 斷為否時,返回好,判斷為是時,修正所述讀指針后返回好。
7.如權(quán)利要求5或6所述的方法,其特征在于,還包括預(yù)設(shè)單元,用于預(yù)設(shè)所述環(huán)形緩沖區(qū)參數(shù)。
8.一種數(shù)字電視接收終端,其特征在于包括如權(quán)利要求5 7任一項所述實現(xiàn)環(huán)形緩沖區(qū)的裝置.
全文摘要
本發(fā)明實施例公開了一種實現(xiàn)環(huán)形緩沖區(qū)的方法,包括當(dāng)讀取數(shù)據(jù)時,判斷環(huán)形緩沖區(qū)當(dāng)前讀指針的數(shù)值是否等于當(dāng)前寫指針的數(shù)值,或是,返回空,若否,讀取所述環(huán)形緩沖區(qū)當(dāng)前讀指針?biāo)赶虼鎯臻g內(nèi)的數(shù)據(jù),實施讀取操作后將所述當(dāng)前讀指針的數(shù)值加一;當(dāng)寫入數(shù)據(jù)時,將所述環(huán)形緩沖區(qū)當(dāng)前寫指針的數(shù)值與所述當(dāng)前讀指針的數(shù)值相減,判斷所述相減之后的差值是否小于所述環(huán)形緩沖區(qū)的最大存儲值,若是,將所述數(shù)據(jù)寫入所述環(huán)形緩沖區(qū)當(dāng)前寫指針?biāo)赶虻拇鎯臻g,實施寫入操作后將所述當(dāng)前寫指針的數(shù)值加一,若否,返回滿。實施本發(fā)明,即可最大化的利用了環(huán)形緩沖區(qū)的消息空間,又不會降低系統(tǒng)的性能。
文檔編號H04N5/44GK101800867SQ201010042859
公開日2010年8月11日 申請日期2010年1月19日 優(yōu)先權(quán)日2010年1月19日
發(fā)明者喻欣 申請人:深圳市同洲電子股份有限公司