內(nèi)存管理方法及其裝置制造方法
【專利摘要】本發(fā)明提供一種內(nèi)存管理方法及其裝置,管理方法步驟包括:初始化循環(huán)緩沖器的空間;設(shè)置數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加1的位置上;獲取循環(huán)緩沖器的剩余空間的剩余容量;判斷剩余容量是否大于等于目標(biāo)數(shù)據(jù)的長(zhǎng)度;如判斷剩余容量大于或等于目標(biāo)數(shù)據(jù)的長(zhǎng)度,目標(biāo)數(shù)據(jù)根據(jù)剩余空間的首地址寫(xiě)入數(shù)據(jù);如判斷剩余容量小于目標(biāo)數(shù)據(jù)的長(zhǎng)度,設(shè)置數(shù)據(jù)結(jié)束指針指向剩余空間的首地址。以及應(yīng)用上述方法的管理裝置。通過(guò)改變數(shù)據(jù)結(jié)束指針的指向位置有利于節(jié)省CUP運(yùn)行的資源,同時(shí)利用對(duì)目標(biāo)數(shù)據(jù)的長(zhǎng)度和剩余空間的容量大小的判斷,解決了循環(huán)緩沖器在使用過(guò)程中數(shù)據(jù)長(zhǎng)度不夠用時(shí)的問(wèn)題,有利于節(jié)省內(nèi)存的占用空間,從而優(yōu)化運(yùn)行速度。
【專利說(shuō)明】?jī)?nèi)存管理方法及其裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及內(nèi)存數(shù)量處理領(lǐng)域,具體涉及一種內(nèi)存管理方法及裝置。
【背景技術(shù)】
[0002]脈沖編碼調(diào)制(Pulse Code Modulat1n),簡(jiǎn)稱PCM,是對(duì)連續(xù)變化的模擬信號(hào)進(jìn)行抽樣、量化和編碼產(chǎn)生的數(shù)字信號(hào),PCM的優(yōu)點(diǎn)就是音質(zhì)好,缺點(diǎn)就是體積大。PCM可以提供用戶從2M到155M速率的數(shù)字?jǐn)?shù)據(jù)專線業(yè)務(wù),也可以提供話音、圖象傳送、遠(yuǎn)程教學(xué)等其他業(yè)務(wù)。而對(duì)壓縮數(shù)據(jù)解碼成PCM數(shù)據(jù)一般的做法是單獨(dú)在內(nèi)存上開(kāi)辟一個(gè)空間,通過(guò)解碼器對(duì)PCM數(shù)據(jù)的一幀數(shù)據(jù)進(jìn)行解碼,并將該一幀數(shù)據(jù)寫(xiě)入該空間上,每次進(jìn)行一次解碼一幀數(shù)據(jù),就把這個(gè)單獨(dú)開(kāi)辟的空間復(fù)制到循環(huán)緩沖器中,這樣導(dǎo)致也增加了一次復(fù)制。上述的解碼過(guò)程為內(nèi)存的可用資源造成浪費(fèi),也會(huì)大大影響機(jī)器的運(yùn)行速度。另一種做法是為每一幀開(kāi)辟一個(gè)空間,在不確定一幀大小時(shí),只能開(kāi)辟最大的數(shù)據(jù)空間,浪費(fèi)了數(shù)據(jù)空間,在內(nèi)存空間受限的時(shí),無(wú)法滿足要求。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的主要目的是提供一種可節(jié)省內(nèi)存空間和優(yōu)化運(yùn)行速度的內(nèi)存管理方法。
[0004]本發(fā)明的第二目的是提供一種可節(jié)省內(nèi)存空間和優(yōu)化運(yùn)行速度的內(nèi)存管理裝置。
[0005]為了實(shí)現(xiàn)本發(fā)明的主要目的,本發(fā)明提供一種內(nèi)存管理方法,其步驟包括:初始化循環(huán)緩沖器的空間,設(shè)置剩余空間容量為循環(huán)緩沖器的全部空間容量;設(shè)置數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上;獲取剩余空間容量;獲取循環(huán)緩沖器的剩余空間的剩余容量;判斷剩余容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,如剩余容量小于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則等待循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取,循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取后返回執(zhí)行獲取循環(huán)緩沖器的剩余空間的剩余容量的步驟;如剩余容量大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則執(zhí)行判斷是否越界步驟;判斷是否越界的步驟為判斷數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度;如數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則執(zhí)行目標(biāo)數(shù)據(jù)根據(jù)剩余空間的首地址寫(xiě)入數(shù)據(jù)的步驟;如數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量小于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則執(zhí)行設(shè)置數(shù)據(jù)結(jié)束指針指向剩余空間的首地址的步驟。
[0006]由上述方案可見(jiàn),通過(guò)改變數(shù)據(jù)結(jié)束指針的指向位置有利于節(jié)省CUP運(yùn)行的資源,同時(shí)利用對(duì)目標(biāo)數(shù)據(jù)的長(zhǎng)度和剩余空間的容量大小的判斷,解決了循環(huán)緩沖器在使用過(guò)程中數(shù)據(jù)長(zhǎng)度不夠用時(shí)的問(wèn)題,有利于節(jié)省內(nèi)存的占用空間,從而優(yōu)化運(yùn)行速度。且對(duì)于不固定幀長(zhǎng)的數(shù)據(jù),或者剩余空間不是幀長(zhǎng)的整數(shù)倍時(shí),將會(huì)出現(xiàn)浪費(fèi)內(nèi)存空間,通過(guò)判斷剩余空間是否大于一幀數(shù)據(jù)的長(zhǎng)度,使得不再需要單獨(dú)開(kāi)辟內(nèi)存空間,直接利用循環(huán)緩沖器的空間進(jìn)行處理即可,亦可以有效地節(jié)省內(nèi)存的占用空間。
[0007]更進(jìn)一步的方案是,目標(biāo)數(shù)據(jù)根據(jù)剩余空間的首地址寫(xiě)入數(shù)據(jù)的步驟包括:將剩余空間的首地址發(fā)送至解碼器;解碼器對(duì)數(shù)據(jù)解碼成脈沖碼編碼調(diào)制格式的數(shù)據(jù),并將解碼后的數(shù)據(jù)寫(xiě)入到剩余空間,更新剩余空間容量。。
[0008]由上可見(jiàn),在解碼數(shù)據(jù)時(shí)通常是需要在內(nèi)存單獨(dú)在開(kāi)設(shè)另一空間進(jìn)行解碼,隨后在拷貝到循環(huán)緩沖器內(nèi),而本發(fā)明提供的內(nèi)存管理方法采用是將剩余空間的首地址發(fā)送至解碼器,解碼器解碼,并將解碼后的數(shù)據(jù)寫(xiě)入到剩余空間中。
[0009]更進(jìn)一步的方案是,等待循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取的步驟包括:獲取所需讀取數(shù)據(jù)的長(zhǎng)度;獲取循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度;判斷循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度是否大于或等于所需讀取數(shù)據(jù)的長(zhǎng)度;如循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度大于或等于所需讀取數(shù)據(jù)的長(zhǎng)度,則執(zhí)行判斷所需讀取數(shù)據(jù)的長(zhǎng)度是否大于或等于數(shù)據(jù)結(jié)束指針與所需讀取數(shù)據(jù)的讀取指針之間的容量;如所需讀取數(shù)據(jù)的長(zhǎng)度小于或等于數(shù)據(jù)結(jié)束指針與所需讀取數(shù)據(jù)的讀取指針之間的容量,則執(zhí)行拷貝循環(huán)緩沖器內(nèi)的數(shù)據(jù)。
[0010]由上可見(jiàn),CPU或其他程序需要拷貝循環(huán)緩沖器內(nèi)的數(shù)據(jù)時(shí),則通過(guò)判斷循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度是否大于或等于所需讀取數(shù)據(jù)的長(zhǎng)度,從而避免拷貝數(shù)據(jù)時(shí)出現(xiàn)錯(cuò)漏現(xiàn)象。
[0011]更進(jìn)一步的方案是,如所需讀取數(shù)據(jù)的長(zhǎng)度大于數(shù)據(jù)結(jié)束指針與所需讀取數(shù)據(jù)的讀取指針之間的容量,則執(zhí)行拷貝所需讀取數(shù)據(jù)的讀取指針和數(shù)據(jù)結(jié)束指針之間的數(shù)據(jù),然后執(zhí)行從循環(huán)緩沖器的首地址拷貝所需讀取數(shù)據(jù)的另一部分?jǐn)?shù)據(jù);設(shè)置數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上,更新剩余空間容量。。
[0012]更進(jìn)一步的方案是,如循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度小于所需讀取數(shù)據(jù)的長(zhǎng)度,則等待目標(biāo)數(shù)據(jù)完全寫(xiě)入到循環(huán)緩沖器。
[0013]由上可見(jiàn),在讀取數(shù)據(jù)是通過(guò)復(fù)位數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上,使得循環(huán)緩沖器的剩余空間相對(duì)于數(shù)據(jù)寫(xiě)入時(shí)的剩余空間較大,這樣有利于提高拷貝數(shù)據(jù)的效率。
[0014]為了實(shí)現(xiàn)本發(fā)明的第二目的,本發(fā)明提供一種內(nèi)存管理裝置,包括初始化模塊、指針設(shè)置模塊、剩余容量獲取模塊、判斷模塊、寫(xiě)入模塊和等待模塊,初始化模塊用于初始化循環(huán)緩沖器的空間并輸出初始化信號(hào),其中,指針設(shè)置模塊接收初始化信號(hào)并輸出指針設(shè)置信號(hào),指針設(shè)置模塊用于設(shè)置數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上,指針設(shè)置模塊還用于設(shè)置數(shù)據(jù)結(jié)束指針指向剩余空間的首地址剩余容量獲取模塊接收指針設(shè)置信號(hào)并輸出剩余容量信號(hào),剩余容量獲取模塊用于獲取循環(huán)緩沖器的剩余空間的剩余容量,寫(xiě)入模塊用于根據(jù)剩余空間的首地址寫(xiě)入目標(biāo)數(shù)據(jù),等待模塊用于等待數(shù)據(jù)的寫(xiě)入或讀取,判斷模塊接收剩余容量信號(hào),判斷模塊向指針設(shè)置模塊、等待模塊或?qū)懭肽K輸出啟動(dòng)信號(hào),判斷模塊用于判斷剩余容量是否大于等于目標(biāo)數(shù)據(jù)的長(zhǎng)度。
[0015]由上述方案可見(jiàn),通過(guò)改變數(shù)據(jù)結(jié)束指針的指向位置有利于節(jié)省CUP運(yùn)行的資源,同時(shí)利用對(duì)目標(biāo)數(shù)據(jù)的長(zhǎng)度和剩余空間的容量大小的判斷,解決了循環(huán)緩沖器在使用過(guò)程中數(shù)據(jù)長(zhǎng)度不夠用時(shí)的問(wèn)題,有利于節(jié)省內(nèi)存的占用空間,從而優(yōu)化運(yùn)行速度。
[0016]更進(jìn)一步的方案是,判斷模塊包括第一判斷模塊和第二判斷模塊;第一判斷模塊用于判斷剩余容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,第一判斷模塊向等待模塊輸出啟動(dòng)信號(hào);第二判斷模塊用于判斷數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,第二判斷模塊想指針設(shè)置模塊或?qū)懭肽K輸出啟動(dòng)信號(hào)。
[0017]由上可見(jiàn),對(duì)于不固定幀長(zhǎng)的數(shù)據(jù),或者剩余空間不是幀長(zhǎng)的整數(shù)倍時(shí),將會(huì)出現(xiàn)浪費(fèi)內(nèi)存空間,通過(guò)判斷模塊去判斷剩余空間是否大于一幀數(shù)據(jù)的長(zhǎng)度,使得不再需要單獨(dú)開(kāi)辟內(nèi)存空間,直接利用循環(huán)緩沖器的空間進(jìn)行處理即可,可以有效地節(jié)省內(nèi)存的占用空間。
【專利附圖】
【附圖說(shuō)明】
[0018]圖1是本發(fā)明內(nèi)存管理方法實(shí)施例中寫(xiě)入數(shù)據(jù)時(shí)的流程圖。
[0019]圖2是本發(fā)明內(nèi)存管理方法實(shí)施例寫(xiě)入數(shù)據(jù)時(shí)的原理圖。
[0020]圖3是本發(fā)明內(nèi)存管理方法實(shí)施例中讀取數(shù)據(jù)時(shí)的流程圖。
[0021]圖4是本發(fā)明內(nèi)存管理裝置實(shí)施例的系統(tǒng)框圖。
[0022]以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
【具體實(shí)施方式】
[0023]內(nèi)存管理方法實(shí)施例:
參照?qǐng)D1,圖1是內(nèi)存管理方法實(shí)施例中寫(xiě)入數(shù)據(jù)時(shí)的流程圖。對(duì)內(nèi)存進(jìn)行管理時(shí),首先執(zhí)行步驟S11,即首先初始化循環(huán)緩沖器的空間,循環(huán)緩沖器為開(kāi)設(shè)在內(nèi)存上的循環(huán)緩沖器(buffer),同時(shí)設(shè)置剩余空間容量為循環(huán)緩沖器的全部空間容量,將寫(xiě)指針和讀指針指向循環(huán)緩沖器的首地址。然后執(zhí)行步驟S12,即設(shè)置數(shù)據(jù)結(jié)束指針(pEnd)為循環(huán)緩沖器的結(jié)束位置,也就是將數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上。隨后執(zhí)行步驟S13,即獲取循環(huán)緩沖器的剩余空間的剩余容量大小,再執(zhí)行步驟S14獲取目標(biāo)數(shù)據(jù)的長(zhǎng)度,目標(biāo)數(shù)據(jù)是指所需要寫(xiě)入的數(shù)據(jù)。
[0024]隨后執(zhí)行判斷步驟S15,即判斷剩余容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,當(dāng)剩余容量小于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度時(shí),則執(zhí)行步驟S151,即等待循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取后,釋放循環(huán)緩沖器內(nèi)空間。執(zhí)行完畢步驟S151后,則返回步驟S13,重新獲取剩余空間的剩余容量。當(dāng)剩余容量大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度時(shí),則執(zhí)行步驟S16,即判斷是否越界步驟。判斷是否越界步驟是判斷數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度。
[0025]如數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則目標(biāo)數(shù)據(jù)將根據(jù)剩余空間的首地址寫(xiě)入所需要寫(xiě)入的數(shù)據(jù),該步驟具體包括依次執(zhí)行的步驟S171、步驟S172和步驟S173。首先執(zhí)行步驟S171,即將當(dāng)前剩余空間的首地址發(fā)送至解碼器,隨后執(zhí)行步驟S172,解碼器進(jìn)行解碼,并將解碼后的數(shù)據(jù)從解碼器的寫(xiě)入指針開(kāi)始寫(xiě)入到剩余空間中。然后執(zhí)行步驟S173,更新PCM數(shù)據(jù)空間,使得下一次的解碼或?qū)懭霃奈磳?xiě)區(qū)域開(kāi)始進(jìn)行。更新完畢PCM數(shù)據(jù)空間后則返回步驟S13,從而繼續(xù)進(jìn)行下一步的寫(xiě)入程序。
[0026]當(dāng)在執(zhí)行判斷步驟S16時(shí),數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量小于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的大小時(shí),則執(zhí)行步驟S181,設(shè)置數(shù)據(jù)結(jié)束指針指向剩余空間的首地址。隨后再執(zhí)行步驟S182,將寫(xiě)入指針指向循環(huán)緩沖器的首地址,再執(zhí)行步驟S183,更新剩余空間容量大小。最后返回步驟S13,從而繼續(xù)進(jìn)行下一步的寫(xiě)入程序。
[0027]參照?qǐng)D2,圖2是內(nèi)存管理方法實(shí)施例中寫(xiě)入數(shù)據(jù)時(shí)的原理圖。當(dāng)其他外部數(shù)據(jù)從位于PO的位置寫(xiě)入到循環(huán)緩沖器中,并且寫(xiě)入完成后當(dāng)前指針位于Pl的位置,此時(shí)需要寫(xiě)入PCM數(shù)據(jù)的一幀數(shù)據(jù)Dl時(shí),由于此時(shí)數(shù)據(jù)結(jié)束指針位于P2,同時(shí)由于循環(huán)緩沖器中Pl與P2之間的剩余空間容量小于數(shù)據(jù)Dl的長(zhǎng)度,所以將設(shè)置數(shù)據(jù)結(jié)束指針指向剩余空間的首地址即Pl處的位置,同時(shí)將寫(xiě)入指針更新到下一循環(huán)的循環(huán)緩沖器的首地址P3處。更新剩余空間長(zhǎng)度,其方法是:剩余空間長(zhǎng)度等于原來(lái)剩余空間長(zhǎng)度減去Pl到P2之間的長(zhǎng)度。
[0028]進(jìn)入下一循環(huán)緩沖器后,當(dāng)讀數(shù)據(jù)流程讀取到Pl處時(shí)則判斷數(shù)據(jù)結(jié)束,并將數(shù)據(jù)結(jié)束指針指向位置P6處,即將數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上,讀數(shù)據(jù)流程從循環(huán)空間首地址開(kāi)始繼續(xù)讀取數(shù)據(jù)。隨后將對(duì)一幀數(shù)據(jù)Dl進(jìn)行寫(xiě)入,由于循環(huán)緩沖器中P3與P6之間的剩余空間容量大于數(shù)據(jù)Dl的大小,則將循環(huán)緩沖器的剩余空間首地址即P3發(fā)送至解碼器,解碼器根據(jù)地址P3寫(xiě)入數(shù)據(jù)。隨后如將要寫(xiě)入數(shù)據(jù)D2時(shí),則判斷循環(huán)緩沖器中剩余空間的容量,即判斷當(dāng)前指針的位置P4與P6之間的剩余空間容量是否大于數(shù)據(jù)D2的大小,由于當(dāng)前剩余空間的容量大于數(shù)據(jù)D2的大小,則數(shù)據(jù)D2根據(jù)當(dāng)前剩余空間的首地址即P4進(jìn)行寫(xiě)入數(shù)據(jù)。隨后如再需要對(duì)PCM數(shù)據(jù)的另一幀數(shù)據(jù)D3進(jìn)行寫(xiě)入時(shí),由于此時(shí)數(shù)據(jù)結(jié)束指針位于P6,同時(shí)由于循環(huán)緩沖器中P5與P6之間的剩余空間容量小于數(shù)據(jù)D3的大小,所以將設(shè)置數(shù)據(jù)結(jié)束指針指向當(dāng)前剩余空間的首地址即P5處的位置。由上可見(jiàn),通過(guò)改變數(shù)據(jù)結(jié)束指針的指向位置有利于節(jié)省CUP運(yùn)行的資源,從而優(yōu)化運(yùn)行速度。
[0029]參照?qǐng)D3,圖3是內(nèi)存管理方法實(shí)施例中讀取數(shù)據(jù)時(shí)的流程圖。在目標(biāo)數(shù)據(jù)根據(jù)剩余空間的首地址寫(xiě)入數(shù)據(jù)的步驟或設(shè)置數(shù)據(jù)結(jié)束指針指向剩余空間的首地址的步驟執(zhí)行完畢后,首先執(zhí)行步驟S21,即讀取PCM數(shù)據(jù),隨后執(zhí)行步驟S22,獲取所需讀取數(shù)據(jù)的長(zhǎng)度,然后再執(zhí)行步驟S23,獲取循環(huán)緩沖器內(nèi)數(shù)據(jù)的長(zhǎng)度。隨后在執(zhí)行步驟S24,判斷循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度是否大于或等于所需讀取數(shù)據(jù)的長(zhǎng)度。
[0030]如循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度小于所需讀取數(shù)據(jù)的長(zhǎng)度,則執(zhí)行步驟S241,即等待所需的數(shù)據(jù)完全寫(xiě)入到循環(huán)緩沖器內(nèi),待所需的數(shù)據(jù)完全寫(xiě)入到循環(huán)緩沖器后,則返回執(zhí)行步驟S21。
[0031]如循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度大于或等于所需讀取數(shù)據(jù)的長(zhǎng)度,則執(zhí)行判斷步驟S25,即判斷所需讀取數(shù)據(jù)的長(zhǎng)度是否大于或等于數(shù)據(jù)結(jié)束指針與所需讀取數(shù)據(jù)的讀取指針之間的容量。
[0032]如所需讀取數(shù)據(jù)的長(zhǎng)度等于或小于數(shù)據(jù)結(jié)束指針與所需讀取數(shù)據(jù)的讀取指針之間的容量,則執(zhí)行步驟S26,即拷貝當(dāng)前數(shù)據(jù)到內(nèi)存的其他位置上,再執(zhí)行步驟S27,即更新PCM數(shù)據(jù)空間。
[0033]如所需讀取數(shù)據(jù)的長(zhǎng)度大于數(shù)據(jù)結(jié)束指針與所需讀取數(shù)據(jù)的讀取指針之間的容量,則執(zhí)行步驟S28,即拷貝所需讀取數(shù)據(jù)的讀取指針和數(shù)據(jù)結(jié)束指針之間的數(shù)據(jù),再執(zhí)行步驟S29,從循環(huán)緩沖器的首地址拷貝所需讀取數(shù)據(jù)的另一部分?jǐn)?shù)據(jù),最后在執(zhí)行步驟S30,將數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上。
[0034]內(nèi)存管理裝置實(shí)施例:
參照?qǐng)D4,圖4是內(nèi)存管理裝置3的系統(tǒng)框圖,內(nèi)存管理裝置3包括初始化模塊31、指針設(shè)置模塊32、剩余容量獲取模塊33、判斷模塊34、寫(xiě)入模塊35、解碼器36和等待模塊38。初始化模塊31用于初始化循環(huán)緩沖器的空間向指針設(shè)置模塊32輸出初始化信號(hào)。指針設(shè)置模塊32接收到初始化信號(hào)后,指針設(shè)置模塊32除了可將數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上,指針設(shè)置模塊32還可將數(shù)據(jù)結(jié)束指針指向剩余空間的首地址,在指針設(shè)置模塊32將數(shù)據(jù)結(jié)束指針設(shè)置完畢后則向剩余容量模塊33輸出指針設(shè)置信號(hào)。
[0035]剩余容量獲取模塊33接收指針設(shè)置信號(hào)后,剩余容量獲取模塊33將獲取循環(huán)緩沖器的剩余空間的剩余容量,剩余容量獲取模塊33向判斷模塊34輸出剩余容量信號(hào)。
[0036]判斷模塊34包括第一判斷模塊341和第二判斷模塊342。判斷模塊34接收到剩余容量信號(hào)后,判斷模塊34將判斷剩余容量是否大于等于目標(biāo)數(shù)據(jù)的大小。具體地,首先第一判斷模塊341判斷剩余容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的大小,如剩余容量小于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的大小,則第一判斷模塊341向等待模塊38輸出啟動(dòng)信號(hào),等待模塊38則等待循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取或等待所需數(shù)據(jù)完全寫(xiě)入到循環(huán)緩沖器內(nèi)。如剩余容量大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的大小,則第二判斷模塊判斷數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量是否大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的大小。
[0037]如數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量小于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的大小,則第二判斷模塊向指針設(shè)置模塊輸出啟動(dòng)信號(hào)。如數(shù)據(jù)結(jié)束指針與目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量大于或等于目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的大小,則第二判斷模塊向?qū)懭肽K輸出啟動(dòng)信號(hào)。
[0038]在指針設(shè)置模塊32接收到啟動(dòng)信號(hào)后,則根據(jù)啟動(dòng)信號(hào)的不同將數(shù)據(jù)結(jié)束指針指向不同的位置。寫(xiě)入模塊35在接收到啟動(dòng)信號(hào)后,寫(xiě)入模塊35根據(jù)剩余空間的首地址寫(xiě)入目標(biāo)數(shù)據(jù)。具體地,寫(xiě)入模塊35用于將剩余空間的首地址發(fā)送至解碼器36,解碼器36解碼,將解碼后脈沖碼編碼調(diào)制格式的數(shù)據(jù)即PCM數(shù)據(jù)寫(xiě)入到剩余空間中。
[0039]內(nèi)存管理裝置3包括讀取模塊37,讀取模塊37用于讀取PCM數(shù)據(jù),并獲取所需讀取數(shù)據(jù)的長(zhǎng)度和循環(huán)緩沖器內(nèi)數(shù)據(jù)的長(zhǎng)度。讀取模塊37向判斷模塊34輸出剩余容量信號(hào),使得判斷模塊34判斷循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度是否大于或等于所需讀取數(shù)據(jù)的長(zhǎng)度。
[0040]如循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度大于或等于所需讀取數(shù)據(jù)的長(zhǎng)度,則拷貝當(dāng)前數(shù)據(jù)到內(nèi)存的其他位置上,再更新PCM數(shù)據(jù)空間。
[0041]如循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度小于所需讀取數(shù)據(jù)的長(zhǎng)度,則拷貝所需讀取數(shù)據(jù)的讀取指針和數(shù)據(jù)結(jié)束指針之間的數(shù)據(jù),再?gòu)难h(huán)緩沖器的首地址拷貝所需讀取數(shù)據(jù)的另一部分?jǐn)?shù)據(jù),最后向指針設(shè)置模塊32輸出啟動(dòng)信號(hào),并使數(shù)據(jù)結(jié)束指針指向循環(huán)緩沖器的末地址加I的位置上。
[0042]由上可見(jiàn),通過(guò)改變數(shù)據(jù)結(jié)束指針的指向位置有利于節(jié)省CUP運(yùn)行的資源,同時(shí)利用對(duì)目標(biāo)數(shù)據(jù)的長(zhǎng)度和剩余空間的容量大小的判斷,解決了循環(huán)緩沖器在使用過(guò)程中數(shù)據(jù)長(zhǎng)度不夠用時(shí)的問(wèn)題。在對(duì)于不固定幀長(zhǎng)的數(shù)據(jù),或者剩余空間不是幀長(zhǎng)的整數(shù)倍時(shí),通過(guò)判斷模塊去判斷剩余空間是否大于一幀數(shù)據(jù)的長(zhǎng)度,不再需要單獨(dú)開(kāi)辟內(nèi)存空間,直接利用循環(huán)緩沖器的空間進(jìn)行處理即可,可以有效地節(jié)省內(nèi)存的占用空間,從而優(yōu)化運(yùn)行速度。
[0043]需要說(shuō)明的是,本發(fā)明采用音頻PCM數(shù)據(jù)進(jìn)行說(shuō)明,并不局限在音頻PCM數(shù)據(jù)的方面,只要是該裝置需要數(shù)據(jù)空間進(jìn)行管理數(shù)據(jù)輸入輸出,并且該裝置需要連續(xù)的空間來(lái)存放輸出的數(shù)據(jù)時(shí),本發(fā)明均可以解決上述情況,并實(shí)現(xiàn)本發(fā)明的主要目的,即減少數(shù)據(jù)拷貝或者空間的開(kāi)辟,從而提高速度和在空間緊張的情況下的提供一種有效地解決方法。
【權(quán)利要求】
1.內(nèi)存管理方法,包括以下步驟 初始化循環(huán)緩沖器的空間,設(shè)置剩余空間容量為所述循環(huán)緩沖器的整個(gè)剩余空間的剩余容量; 其特征在于: 設(shè)置數(shù)據(jù)結(jié)束指針指向所述循環(huán)緩沖器的末地址加I的位置上; 獲取所述剩余空間容量; 判斷所述剩余容量是否大于或等于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,如所述剩余容量小于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則等待所述循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取,所述循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取后返回執(zhí)行獲取所述循環(huán)緩沖器的剩余空間的剩余容量的步驟;如所述剩余容量大于或等于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則執(zhí)行判斷是否越界步驟; 所述判斷是否越界的步驟為判斷所述數(shù)據(jù)結(jié)束指針與所述目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量是否大于或等于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度; 如所述數(shù)據(jù)結(jié)束指針與所述目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量大于或等于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則執(zhí)行所述目標(biāo)數(shù)據(jù)根據(jù)剩余空間的首地址寫(xiě)入數(shù)據(jù)的步驟; 如所述數(shù)據(jù)結(jié)束指針與所述目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量小于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,則執(zhí)行所述設(shè)置所述數(shù)據(jù)結(jié)束指針指向剩余空間的首地址的步驟。
2.根據(jù)權(quán)利要求1所述的內(nèi)存管理方法,其特征在于: 所述內(nèi)存管理方法還包括在執(zhí)行設(shè)置所述數(shù)據(jù)結(jié)束指針指向剩余空間的首地址的步驟后,將所述目標(biāo)數(shù)據(jù)的寫(xiě)入指針指向所述循環(huán)緩沖器的首地址; 更新所述剩余空間容量。
3.根據(jù)權(quán)利要求2所述的內(nèi)存管理方法,其特征在于: 所述目標(biāo)數(shù)據(jù)根據(jù)剩余空間的首地址寫(xiě)入數(shù)據(jù)的步驟包括 將所述剩余空間的首地址發(fā)送至解碼器; 所述解碼器對(duì)數(shù)據(jù)進(jìn)行解碼,并將解碼后的數(shù)據(jù)寫(xiě)入到所述剩余空間。
4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的內(nèi)存管理方法,其特征在于: 等待所述循環(huán)緩沖器內(nèi)的數(shù)據(jù)被讀取的步驟包括: 獲取所需讀取數(shù)據(jù)的長(zhǎng)度; 獲取循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度; 判斷所述循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度是否大于或等于所述所需讀取數(shù)據(jù)的長(zhǎng)度; 如所述循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度大于或等于所述所需讀取數(shù)據(jù)的長(zhǎng)度,則執(zhí)行判斷所述所需讀取數(shù)據(jù)的長(zhǎng)度是否大于所述數(shù)據(jù)結(jié)束指針與所述所需讀取數(shù)據(jù)的讀取指針之間的容量; 如所述所需讀取數(shù)據(jù)的長(zhǎng)度小于或等于所述數(shù)據(jù)結(jié)束指針與所述所需讀取數(shù)據(jù)的讀取指針之間的容量,則執(zhí)行拷貝循環(huán)緩沖器內(nèi)的數(shù)據(jù)。
5.根據(jù)權(quán)利要求4所述的內(nèi)存管理方法,其特征在于: 如所述所需讀取數(shù)據(jù)的大于所述數(shù)據(jù)結(jié)束指針與所述所需讀取數(shù)據(jù)的讀取指針之間的容量,則執(zhí)行拷貝所述所需讀取數(shù)據(jù)的讀取指針和所述數(shù)據(jù)結(jié)束指針之間的數(shù)據(jù),然后執(zhí)行從循環(huán)緩沖器的首地址拷貝所述所需讀取數(shù)據(jù)的另一部分?jǐn)?shù)據(jù); 設(shè)置所述數(shù)據(jù)結(jié)束指針指向所述循環(huán)緩沖器的末地址加I的位置上; 更新所述剩余空間容量。
6.根據(jù)權(quán)利要求5所述的內(nèi)存管理方法,其特征在于: 如所述循環(huán)緩沖器內(nèi)的數(shù)據(jù)的長(zhǎng)度小于所述所需讀取數(shù)據(jù)的長(zhǎng)度,則等待所述目標(biāo)數(shù)據(jù)完全寫(xiě)入到所述循環(huán)緩沖器。
7.內(nèi)存管理裝置,包括 初始化模塊,所述初始化模塊用于初始化循環(huán)緩沖器的空間并輸出初始化信號(hào); 其特征在于: 指針設(shè)置模塊,所述指針設(shè)置模塊接收所述初始化信號(hào)并輸出指針設(shè)置信號(hào),所述指針設(shè)置模塊用于設(shè)置數(shù)據(jù)結(jié)束指針指向所述循環(huán)緩沖器的末地址加I的位置上,所述指針設(shè)置模塊還用于設(shè)置所述數(shù)據(jù)結(jié)束指針指向剩余空間的首地址; 剩余容量獲取模塊,所述剩余容量獲取模塊接收所述指針設(shè)置信號(hào)并輸出剩余容量信號(hào),所述剩余容量獲取模塊用于獲取循環(huán)緩沖器的剩余空間的剩余容量; 寫(xiě)入模塊,用于根據(jù)剩余空間的首地址寫(xiě)入目標(biāo)數(shù)據(jù); 等待模塊,用于等待數(shù)據(jù)的寫(xiě)入或讀??; 判斷模塊,所述判斷模塊接收所述剩余容量信號(hào),所述判斷模塊向所述指針設(shè)置模塊、所述寫(xiě)入模塊或所述等待模塊輸出啟動(dòng)信號(hào),所述判斷模塊用于判斷所述剩余容量是否大于等于目標(biāo)數(shù)據(jù)的長(zhǎng)度。
8.根據(jù)權(quán)利要求7所述的內(nèi)存管理裝置,其特征在于: 所述判斷模塊包括第一判斷模塊和第二判斷模塊; 所述第一判斷模塊用于判斷所述剩余容量是否大于或等于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,所述第一判斷模塊向所述等待模塊輸出所述啟動(dòng)信號(hào); 所述第二判斷模塊用于判斷所述數(shù)據(jù)結(jié)束指針與所述目標(biāo)數(shù)據(jù)的寫(xiě)入指針之間的容量是否大于或等于所述目標(biāo)數(shù)據(jù)的一幀數(shù)據(jù)的長(zhǎng)度,所述第二判斷模塊想所述指針設(shè)置模塊或所述寫(xiě)入模塊輸出所述啟動(dòng)信號(hào)。
9.根據(jù)權(quán)利要求7或8所述的內(nèi)存管理裝置,其特征在于: 所述內(nèi)存管理裝置還包括所述解碼器; 所述寫(xiě)入模塊用于將所述剩余空間的首地址發(fā)送至解碼器; 所述解碼器還用于數(shù)據(jù)解碼,所述解碼器可解碼出脈沖編碼調(diào)制格式的數(shù)據(jù),所述解碼器可將解碼后的脈沖編碼調(diào)制格式的數(shù)據(jù)寫(xiě)入到所述剩余空間。
【文檔編號(hào)】G06F12/08GK104461933SQ201410625561
【公開(kāi)日】2015年3月25日 申請(qǐng)日期:2014年11月7日 優(yōu)先權(quán)日:2014年11月7日
【發(fā)明者】張林山 申請(qǐng)人:珠海全志科技股份有限公司