基于Nand+Flash存儲管理在DSP系統中的實(shí)現
3.3磨損均衡與無(wú)效塊回收
如圖2所示,當系統上電后,如不存在壞塊管理表則應首先應建立相應的壞塊管理表,參照壞塊表根據每一塊的第517字節建立各個(gè)鏈表Free_List,Valid_List,Invalid_List, Reserved_List,初始化并按擦除次數非遞減序排列各鏈表。當無(wú)效塊因擦除成為新的空閑塊時(shí),根據塊擦除次數插入到空閑鏈表中相應位置,當需要寫(xiě)入數據到新的空閑塊時(shí)則取用空閑鏈表的鏈首所指空閑塊,寫(xiě)入數據有效后則標識該塊為有效塊,否則標識為無(wú)效塊,通過(guò) 這樣的管理方式保證每次都是使用空閑鏈表中擦除次數最小的塊,從而使磨損達到均衡。
圖2 Flash存儲管理流程示意圖
對于靜態(tài)數據塊(指的是Flash中存儲的不經(jīng)常被修改的數據)[3],在本文中采用的處 理方法是當空閑塊中的最大擦除次數與有效塊中的最小擦除次數之差大于某一設定閥值(該閥值不能過(guò)小,否則數據搬遷將過(guò)于頻繁),則遷移該有效塊中數據至空閑鏈表中擦除次數 最大的塊中,從而避免因某些數據塊被靜態(tài)數據長(cháng)時(shí)間占用而使得其它數據塊的磨損加劇,進(jìn)而可使得整個(gè)Flash的磨損趨于平衡。
對于無(wú)效塊的擦除回收本文的設計是在有足夠空閑塊的情況下一般是在系統空閑或上 電時(shí)進(jìn)行,這樣能節約更多寶貴的系統資源以進(jìn)行更重要的工作,當在系統運行過(guò)程中,如果空閑塊塊數與無(wú)效塊塊數的比值超出一個(gè)閥值(本系統取50),則啟動(dòng)程序回收所有無(wú)效 塊。這個(gè)閥值應取得適中,如太大則使得回收過(guò)于頻繁,太少的話(huà)一方面使空閑空間過(guò)少,另一方面一旦啟動(dòng)回收程序,因要回收塊數過(guò)多,從而使采集數據的實(shí)時(shí)輸入受到影響,本 系統中取空閑塊與無(wú)效塊的比值作為閥值,好處是只要空閑塊塊數足夠,無(wú)效塊回收基本在系統初始化是進(jìn)行,即使在采集過(guò)程中回收占用的時(shí)間也是十分微小,這樣的設計對實(shí)時(shí)性要求極高的嵌入式系統是很有好處的。
3.4 Flash存儲管理的程序實(shí)現
對于Nand Flash在DSP嵌入式系統中的使用,其接口方式與讀寫(xiě)方法與在其他單片機中的方法都是一樣的,參考[1]中提供的流程圖就可以完成,其難點(diǎn)在于如何管理,在其管理中,對鏈表數據結構的操作是最重要的,下面將給出本文系統中用DSP TMS320F28x如何實(shí)現Nand Flash存儲管理的鏈表操作的關(guān)鍵程序代碼,結合具體的要求只需要進(jìn)行簡(jiǎn)單的修改即可滿(mǎn)足在新系統中的應用。
在DSP系統工程中的CMD文件中,對于段的定義一定要為.systemmem分配一定的可用RAM空間[ 4 ],這個(gè)大小跟系統后面malloc函數要分配的動(dòng)態(tài)內存空間有關(guān),以便在產(chǎn)生一個(gè)新的結點(diǎn)時(shí)申請一個(gè)結點(diǎn)類(lèi)型大小的空間,在結點(diǎn)銷(xiāo)毀時(shí)可對空間進(jìn)行釋放,定義系統中鏈表結點(diǎn)的類(lèi)型為:
通過(guò)這樣的定義就可以得到四個(gè)帶頭結點(diǎn)的鏈表,頭結點(diǎn)的數庫域中是沒(méi)有信息的,每 一個(gè)鏈表的頭結點(diǎn)都指向該鏈表的首元素,如不存在則指向NULL,程序中必須初始化指針, 否則會(huì )造成致命的系統錯誤。下面給出鏈表的初始化程序,結點(diǎn)生成及銷(xiāo)毀程序,其他的函數就不一一列舉,只給出其相應函數名及功能介紹。
4 結論
本文創(chuàng )新點(diǎn)在于:從Nand Flash的特性出發(fā),深入討論了基于磨損均衡算法的Flash存儲 管理在DSP系統中采用鏈表結構的程序實(shí)現,改進(jìn)了無(wú)效塊的回收方式及動(dòng)靜態(tài)數據塊的磨損平衡。經(jīng)實(shí)踐證明,有效延長(cháng)了Flash的使用壽命,進(jìn)一步提高了其存儲效率和數據安全性, 從而更有利于在嵌入式系統中的應用。
電能表相關(guān)文章:電能表原理
評論