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