一種多分組定長(zhǎng)數(shù)據(jù)循環(huán)存取方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)字信號(hào)處理技術(shù),特別是一種多分組定長(zhǎng)數(shù)據(jù)循環(huán)存取方法。
【背景技術(shù)】
[0002] 隨著數(shù)字信號(hào)處理技術(shù)、電子測(cè)量技術(shù)、半導(dǎo)體制造技術(shù)的不斷發(fā)展和進(jìn)步,多信 號(hào)融合處理方法逐步被推廣應(yīng)用。這導(dǎo)致了在多信號(hào)融合應(yīng)用系統(tǒng)中,數(shù)字存儲(chǔ)量越來越 大,存儲(chǔ)的數(shù)據(jù)類型越來越多,在數(shù)據(jù)處理過程中這些數(shù)據(jù)需要頻繁存取,因此需要對(duì)其進(jìn) 行多分組數(shù)據(jù)存儲(chǔ)管理。本發(fā)明針對(duì)這一問題,提出了一種多分組定長(zhǎng)數(shù)據(jù)循環(huán)存取方法, 既實(shí)現(xiàn)了數(shù)據(jù)存儲(chǔ)空間的自動(dòng)管理,又方便了多分組數(shù)據(jù)的存取。本發(fā)明設(shè)計(jì)的方法尤其 對(duì)于微處理器,算法更容易實(shí)現(xiàn),易于應(yīng)用。
[0003] 現(xiàn)有的數(shù)據(jù)循環(huán)存儲(chǔ)技術(shù)僅解決數(shù)據(jù)存儲(chǔ)空間自動(dòng)管理問題?!队糜诎踩珜懎h(huán)形 存儲(chǔ)器指針》[【申請(qǐng)?zhí)枴?0809715. 1]發(fā)明提供一種在環(huán)形存儲(chǔ)起中能夠安全寫指針的方 法。該發(fā)明是通過雙指針操作存儲(chǔ)器,主要應(yīng)用在環(huán)形存儲(chǔ)器中?!队糜谑褂脠D像條和循 環(huán)尋址排列進(jìn)行圖像數(shù)據(jù)處理的方法和裝置》[【申請(qǐng)?zhí)枴?3816690. 9]發(fā)明提供了一種存 儲(chǔ)器管理,提高了圖形處理系統(tǒng)內(nèi)的存儲(chǔ)器效率。該發(fā)明存儲(chǔ)空間的劃分和數(shù)據(jù)存儲(chǔ)處理 方式均針對(duì)圖像數(shù)據(jù)作出優(yōu)化?!禢ANDFLASH存儲(chǔ)器自動(dòng)循環(huán)存儲(chǔ)的實(shí)現(xiàn)方法》[【申請(qǐng)?zhí)枴?201310353286. 7]發(fā)明使用NANDFLASH作為大容量存儲(chǔ)器,使用FPGA作為控制與處理系統(tǒng), 實(shí)現(xiàn)數(shù)據(jù)的循環(huán)寫入、循環(huán)讀取、循環(huán)擦除和壞道檢測(cè)等功能?!兑环N通用高效高可靠的Nor Flash數(shù)據(jù)存儲(chǔ)管理方法》[【申請(qǐng)?zhí)枴?01310352734. 1]將NorFlash分為兩個(gè)區(qū):存儲(chǔ)管理 區(qū)和用戶數(shù)據(jù)區(qū)將用戶數(shù)據(jù)以文件的形式存儲(chǔ)于用戶數(shù)據(jù)區(qū);將文件相關(guān)的管理信息存儲(chǔ) 于存儲(chǔ)管理區(qū)。存儲(chǔ)
[0004] 現(xiàn)有的數(shù)據(jù)存取方法,并沒有對(duì)多分組數(shù)據(jù)存儲(chǔ)進(jìn)行處理。存儲(chǔ)器空間劃分也未 針對(duì)多分組數(shù)據(jù)存儲(chǔ)進(jìn)行優(yōu)化。
【發(fā)明內(nèi)容】
[0005] 1.要解決的技術(shù)問題
[0006] 針對(duì)現(xiàn)有技術(shù)中存在的問題,本發(fā)明提供了一種可以實(shí)現(xiàn)了存儲(chǔ)空間自動(dòng)管理, 同時(shí)實(shí)現(xiàn)了分組數(shù)據(jù)的快速存取的多分組定長(zhǎng)數(shù)據(jù)循環(huán)存取方法。
[0007] 2?技術(shù)方案
[0008] 本發(fā)明的目的通過以下技術(shù)方案實(shí)現(xiàn)。
[0009] 一種多分組定長(zhǎng)數(shù)據(jù)循環(huán)存取方法,步驟包括:
[0010] 1)將存儲(chǔ)空間分成三個(gè)部分:數(shù)據(jù)檢索區(qū),保留數(shù)據(jù)檢區(qū)和數(shù)據(jù)存儲(chǔ)區(qū),所述的 數(shù)據(jù)檢索區(qū)和保留數(shù)據(jù)檢索區(qū)存儲(chǔ)分組記錄信息:分組序號(hào)i、存儲(chǔ)塊序號(hào)j、數(shù)據(jù)長(zhǎng)度i_ Dep、起始地址i_SAddr和記錄數(shù)i_Records,所述的數(shù)據(jù)存儲(chǔ)區(qū)由存儲(chǔ)塊組成,所述的存 儲(chǔ)塊由所有分組存儲(chǔ)單元按照分組序號(hào)排列而成,所述的分組存儲(chǔ)單元占用一個(gè)扇區(qū)的空 間,當(dāng)前的分組序號(hào)為i,存儲(chǔ)塊序號(hào)為j。
[0011] 2)在確定總分組數(shù)Gall、存儲(chǔ)器扇區(qū)總數(shù)量Sall、數(shù)據(jù)檢索區(qū)和預(yù)留數(shù)據(jù)檢區(qū)數(shù)量 DFall后,則存儲(chǔ)塊數(shù)量SubMem可以由表達(dá)式SubMem=(Sall-DFall)/Gall取整后確定;
[0012] 3)對(duì)于存儲(chǔ)介質(zhì)的一個(gè)扇區(qū)存儲(chǔ)空間數(shù)量為Sect_Num,一個(gè)存儲(chǔ)塊內(nèi)的存儲(chǔ)空 間數(shù)量為Mem_Num,為扇區(qū)存儲(chǔ)空間數(shù)量與分組數(shù)之積,即Mem_Num=Sect_Num*Gall;
[0013] 4)在存儲(chǔ)數(shù)據(jù)時(shí)使用循環(huán)尋址計(jì)算,當(dāng)存儲(chǔ)地址跳到最后一個(gè)存儲(chǔ)塊仍未存儲(chǔ)結(jié) 束時(shí),將自動(dòng)跳到第一個(gè)存儲(chǔ)塊相對(duì)應(yīng)的分組存儲(chǔ)單元,擦除歷史數(shù)據(jù)后,存入數(shù)據(jù),同時(shí) 將正在使用的數(shù)據(jù)檢索區(qū)的數(shù)據(jù)讀出到緩存中,將緩存中對(duì)應(yīng)分組記錄信息中將開始地址 變?yōu)樾碌牡刂?,將記錄?shù)增加1,數(shù)據(jù)檢索區(qū)狀態(tài)值增加1,然后存入正在使用的數(shù)據(jù)檢索 區(qū);
[0014] 5)在讀取數(shù)據(jù)時(shí),先讀取正在使用的數(shù)據(jù)檢索區(qū)分組記錄信息,獲取分組的開始 地址和數(shù)據(jù)長(zhǎng)度,從開始地址讀取相應(yīng)的長(zhǎng)度的數(shù)據(jù),當(dāng)讀取歷史數(shù)據(jù)時(shí),使用循環(huán)尋址計(jì) 算歷史數(shù)據(jù)的開始地址,再讀取數(shù)據(jù)。
[0015] 對(duì)于存儲(chǔ)塊j內(nèi)分組i存儲(chǔ)單元內(nèi)的任一地址PMemAddr[j,i,X]可以通過該單元 的首地址PMemUnit_Addr[j,i]和該地址相對(duì)于首地址的地址偏移量為PMU_i_Offset相加 計(jì)算獲得,即PMemAddr[j,i,x] =PMemUnit_Addr[j,i]+PMU_i_Offset〇
[0016] 對(duì)于存儲(chǔ)塊i分組i在數(shù)據(jù)檢索區(qū)內(nèi)對(duì)應(yīng)分組記錄的起始地址可由存儲(chǔ)塊j中分 組i單元的首地址PMemUnit_Addr[j,i]和相對(duì)于首地址的偏移量PMU_i_Offset二者相加 獲取,單元的首地址PMemUnit_Addr[j,i]可以通過先計(jì)算存儲(chǔ)塊內(nèi)的存儲(chǔ)空間數(shù)量Mem_ Num與(j-1)的乘積,然后加上扇區(qū)存儲(chǔ)空間偏移量Sect_Num與分組序號(hào)的乘積,最后加上 存儲(chǔ)塊0中分組0單元的首地址PMemUnit_Addr[0,i],即:
[0017] PMemUnit_Addr[j,i] =PMemUnit_Addr[0,0]+Sect_Num*(i)+Mem_Num*(j)。
[0018] 存儲(chǔ)塊0中分組i單元的首地址PMemUnit_Addr[0,i]存在表達(dá)式:PMemUnit_ 八(1(11'[0,;[]=?]^1111111;[1:_八(1(11'[0,0]+36。1:_池111*(;〇。即?]^1111111;[1:_八(1(11'[」,;[]=?]^1111111;[1:_ Addr[0,0]+Sect_Num*(i)+Mem_Num*(j)。
[0019] 若分組i的數(shù)據(jù)長(zhǎng)度為i_D印,若該分組存儲(chǔ)數(shù)據(jù)一次,存儲(chǔ)地址相當(dāng)于向后移動(dòng) i_D印,起始地址偏移量加上i_D??;若讀取前一組歷史數(shù)據(jù),存儲(chǔ)地址相當(dāng)于向前移動(dòng)i_ D印,起始地址偏移量減去i_D印。
[0020] 若地址偏移量非負(fù),把地址偏移量與扇區(qū)單元容量相除取其余數(shù);若對(duì)其商取整 之后結(jié)果大于0,則存儲(chǔ)塊序號(hào)j加1后對(duì)存儲(chǔ)塊數(shù)量取模運(yùn)算后,保存為j;若地址偏移 量小于0,則地址偏移量加上扇區(qū)單元容量,存儲(chǔ)塊序號(hào)j減1,若j小于0則加上存儲(chǔ)塊數(shù) 量SubMem,保存為j,則存儲(chǔ)塊j分組i的起始地址i_SAddr可由式i_SAddr=PMemUnit_ Addr[j,i]+PMU_i_Offset計(jì)算。
[0021] 任一個(gè)分組存取的數(shù)據(jù)長(zhǎng)度固定,任意兩個(gè)分組的數(shù)據(jù)長(zhǎng)度沒有關(guān)聯(lián)。
[0022] 3.有益效果
[0023] 相比于現(xiàn)有技術(shù),本發(fā)明的優(yōu)點(diǎn)在于:實(shí)現(xiàn)了存儲(chǔ)空間自動(dòng)管理,同時(shí)實(shí)現(xiàn)了分組 數(shù)據(jù)的快速存取。
【附圖說明】
[0024] 圖1為存儲(chǔ)空間劃分示意圖。
[0025] 圖2為循環(huán)存取示意圖。
[0026] 圖3為循環(huán)尋址計(jì)算流程圖。
[0027] 圖4為存取數(shù)據(jù)算法流程圖。
【具體實(shí)施方式】
[0028] 下面結(jié)合說明書附圖和具體的實(shí)施例,對(duì)本發(fā)明作詳細(xì)描述。
[0029] 一種多分組定長(zhǎng)數(shù)據(jù)循環(huán)存取方法,步驟包括:
[0030] 1)將存儲(chǔ)空間分成三個(gè)部分:數(shù)據(jù)檢索區(qū),保留數(shù)據(jù)檢區(qū)和數(shù)據(jù)存儲(chǔ)區(qū),所述的 數(shù)據(jù)檢索區(qū)和保留數(shù)據(jù)檢索區(qū)存儲(chǔ)分組記錄信息:分組序號(hào)i、存儲(chǔ)塊序號(hào)j、數(shù)據(jù)長(zhǎng)度i_ Dep、起始地址i_SAddr和記錄數(shù)i_Records,所述的數(shù)據(jù)存儲(chǔ)區(qū)由存儲(chǔ)塊組成,所述的存 儲(chǔ)塊由所有分組存儲(chǔ)單元按照分組序號(hào)排列而成,所述的分組存儲(chǔ)單元占用一個(gè)扇區(qū)的空 間,當(dāng)前的分組序號(hào)為i,存儲(chǔ)塊序號(hào)為j。
[0031] 2)在確定總分組數(shù)Gall、存儲(chǔ)器扇區(qū)總數(shù)量Sall、數(shù)據(jù)檢索區(qū)和預(yù)留數(shù)據(jù)檢區(qū)數(shù)量 DFall后,則存儲(chǔ)塊數(shù)量SubMem可以由表達(dá)式SubMem=(Sall-DFall)/Gall取整后確定;
[0032] 3)對(duì)于存儲(chǔ)介質(zhì)的一個(gè)扇區(qū)存儲(chǔ)空間數(shù)量為Sect_Num,一個(gè)存儲(chǔ)塊內(nèi)的存儲(chǔ)空 間數(shù)量為Mem_Num,為扇區(qū)存儲(chǔ)空間數(shù)量與分組數(shù)之積,即Mem_Num=Sect_Num*Gall;
[0033] 4)在存儲(chǔ)數(shù)據(jù)時(shí)使用循環(huán)尋址計(jì)算,當(dāng)存儲(chǔ)地址跳到最后一個(gè)存儲(chǔ)塊仍未存儲(chǔ)結(jié) 束時(shí),將自動(dòng)跳到第一個(gè)存儲(chǔ)塊相對(duì)應(yīng)的分組存儲(chǔ)單元,擦除歷史數(shù)據(jù)后,存入數(shù)據(jù),同時(shí) 將正在使用的數(shù)據(jù)檢索區(qū)的數(shù)據(jù)讀出到緩存中,將緩存中對(duì)應(yīng)分組記錄信息中將開始地址 變?yōu)樾碌牡刂罚瑢⒂涗洈?shù)增加1,數(shù)據(jù)檢索區(qū)狀態(tài)值增加1,然后存入正在使用的數(shù)據(jù)檢索 區(qū);
[0034] 5)在讀取數(shù)據(jù)時(shí),先讀取正在使用的數(shù)據(jù)檢索區(qū)分組記錄信息,獲取分組的開始 地址和數(shù)據(jù)長(zhǎng)度,從開始地址讀取相應(yīng)的長(zhǎng)度的數(shù)據(jù),當(dāng)讀取歷史數(shù)據(jù)時(shí),使用循環(huán)尋址計(jì) 算歷史數(shù)據(jù)的開始地址,再讀取數(shù)據(jù)。
[0035] 對(duì)于存儲(chǔ)塊j內(nèi)分組i存儲(chǔ)單元內(nèi)的任一地址PMemAddr[j,i,X]可以通過該單元 的首地址PMemUnit_Addr[j,i]和該地址相對(duì)于首地址的地址偏移量為PMU_i_Offset相加 計(jì)算獲得,即PMemAddr[j,i,x] =PMemUnit_Addr[j,i]+PMU_i_Offset〇
[0036] 對(duì)于存儲(chǔ)塊i分組i在數(shù)據(jù)檢索區(qū)內(nèi)對(duì)應(yīng)分組記錄的起始地址可由存儲(chǔ)塊j中分 組i單元的首地址PMemUnit_Addr[j,i]和相對(duì)于首地址的偏移量PMU_i_Offset二者相加 獲取,單元的首地址PMemUnit_Addr[j,i]可以通過先計(jì)算存儲(chǔ)塊內(nèi)的存儲(chǔ)空間數(shù)量Mem_ Num與(j-1)的乘積,然后加上扇區(qū)存儲(chǔ)空間偏移量Sect_Num與分組序號(hào)的乘積,最后加上 存儲(chǔ)塊0中分組0單元的首地址PMemUnit_Addr[0,i],即:
[0037] PMemUnit_Addr[j,i] =PMemUnit_Addr[0,0]+Sect_Num*(i)+Mem_Num*(j)。
[0038] 存儲(chǔ)塊0中分組i單元的首地址PMemUnit_Addr[0,i]存在表達(dá)式:PMemUnit_ 八(1(11'[0,;[]=?]^1111111;[1: