<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Blackfin輕量級內核VDK及其文件系統設計

Blackfin輕量級內核VDK及其文件系統設計

作者: 時(shí)間:2012-04-09 來(lái)源:網(wǎng)絡(luò ) 收藏


為提高存儲效率和方便管理,地址緩沖區的內容會(huì )被記錄在數據Nor Flash中,作為一個(gè)地址映射表.地址映射表體積不大,燒寫(xiě)到Nor Flash時(shí),可將燒寫(xiě)代碼推入到的關(guān)鍵域中,因為燒寫(xiě)時(shí)間小于兩次中斷間隔,這樣既不會(huì )照成中斷延時(shí),又能保證燒寫(xiě)工作一次完成。

硬件平臺上電后,啟動(dòng)線(xiàn)程首先讀取Nor Flash中的地址映射表到地址緩沖區,隨后基于地址緩沖區進(jìn)行管理;如需更新壞塊信息,首先更新地址緩沖區,然后將地址緩沖區內容記錄到Nor Flash中。故而名為映射,實(shí)質(zhì)是一種標記的方法。地址映射機制如圖2所示。

圖2 地址映射機表的設置與使用

3.3 壞塊回收

Nand Flash芯片在出廠(chǎng)時(shí)就存在隨機壞塊,同時(shí)隨著(zhù)使用時(shí)間的推移,一些有效塊也會(huì )因為編程的原因成為新的壞塊,故而存儲陣列在使用一段時(shí)間后,應當更新壞塊信息??紤]到陣列中的安全性和完整性,設置為存儲陣列為空時(shí)方能更新壞塊信息。

格式化整個(gè)陣列后,存儲陣列中的FPGA芯片依次讀取每個(gè)數據塊的第一頁(yè)數據,如果發(fā)現非0xFF數據的個(gè)數超過(guò)設定閾值,就認為此數據塊為壞塊。之所以設定閾值而不是一有非0xFF數據就視為壞塊,是為了克服數據讀取的不穩定性。

BF537讀取存儲陣列傳送來(lái)最新壞塊信息后,按照圖2中地址映射表設置的辦法,首先更新地址映射緩沖區,隨即將地址映射緩沖區的內容實(shí)時(shí)更新到數據Nor Flash中,保持兩者的同步。

由于壞塊信息更新的時(shí)間可能較長(cháng),更新工作放在主線(xiàn)程中可能造成較大時(shí)延,影響主線(xiàn)程對用戶(hù)命令的響應,所以壞塊回收與標記可放在子線(xiàn)程中。

3.4 磨損均衡

Nand Flash芯片的編程次數有限,如果對某個(gè)數據塊操作過(guò)于頻繁,將迅速縮短其使用壽命,最終成為壞塊,乃至影響整個(gè)芯片的使用。如果均衡地使用Flash芯片的每個(gè)數據塊,對其操作的概率在較長(cháng)時(shí)間內大體相當,這樣不僅能減少芯片壞塊的比例,也能延長(cháng)存儲陣列的使用壽命。

開(kāi)源和商業(yè)的,都有較為完備的臟塊回收和磨損均衡的機制,但是其算法往往較復雜,同時(shí)需要將運行信息實(shí)時(shí)更新到Flash芯片中。在存儲速率要求很高的情況下,復雜的機制對存儲速率將不可避免地造成影響。

文件系統關(guān)于磨損均衡的解決方案主要是順序存儲和陣列整理。文件存儲時(shí),并不使用鏈式存儲,填充文件刪除所留下的空洞,而采用連續存儲的方式,將最新的文件存儲到當前所有文件的末尾。這樣不僅編程簡(jiǎn)單,而且存儲陣列在一段時(shí)間后可能會(huì )被耗盡,此時(shí)如果刪除尾部的某些文件,那么下個(gè)的文件可以存儲在這些空余出來(lái)的位置;如果利用陣列整理功能將當前文件壓縮為連續緊湊的文件序列,去除文件刪除時(shí)留下的空洞,這樣整理出來(lái)的空間也可以繼續用于下次存儲。

3.5 掉電保護

嵌入式系統硬件平臺的工作環(huán)境一般較為惡劣,電源模塊隨時(shí)會(huì )有停止供電的可能。故而掉電保護是嵌入式文件系統的重點(diǎn)和難點(diǎn)。

微軟的FNT文件系統的掉電保護主要針對FAT表,本文件系統也是基于這個(gè)理念。開(kāi)始文件存儲時(shí),子線(xiàn)程對發(fā)送的塊地址數目做一個(gè)計數,當計數量達到設定的閾值N后,將新文件的信息更新到文件目錄表緩沖區中,并立即將文件目錄表更新到Nor Flash中,兩個(gè)更新的操作不能被中斷,故而將這段代碼推入到關(guān)鍵域中。隨后將計數值清零,重新開(kāi)始前一過(guò)程。如果在存儲過(guò)程中掉電,重新上電啟動(dòng)后,開(kāi)始新的存儲,系統會(huì )自動(dòng)查詢(xún)存儲陣列最后一個(gè)文件的狀態(tài)標記,如果標記為暫存,則判定最后一個(gè)文件在存儲時(shí)遇到了掉電的情況,那么系統自動(dòng)擦除該文件接下來(lái)N個(gè)數據塊的信息,然后最后一個(gè)文件開(kāi)始新的存儲。

文件刪除操作是在刪除動(dòng)作完成后才更新文件目錄表,如果在刪除過(guò)程中掉電,那么上電后,用戶(hù)可以對該文件重新刪除。文件的拷貝和剪切是在操作前更新文件目錄表,如果在操作過(guò)程中出現斷電,重新上電后,用戶(hù)可先刪除拷貝后的新的文件,去除殘塊,然后開(kāi)始新的操作。

4 結束語(yǔ)

介紹的嵌入式文件系統已在項目中成功投入使用,當然仍有許多方面需要改進(jìn)。例如文件目錄表如果較長(cháng),線(xiàn)性遍歷耗時(shí)也會(huì )相對較長(cháng);文件目錄表沒(méi)有備份,如果更新文件列表時(shí)存儲系統出現掉電,該如何應對等。是ADI公司為自己的集成開(kāi)發(fā)環(huán)境量身打造的,相對于Linux等開(kāi)源系統來(lái)說(shuō),使用范圍可能較窄,但基于A(yíng)DI的DSP使用自然有其得天獨厚的優(yōu)勢。

本文引用地址:http://dyxdggzs.com/article/149266.htm

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>