電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 2729|回復(fù): 0
收起左側(cè)

嵌入式工程師證書培訓(xùn)_基于Flash存儲(chǔ)器的嵌入式文件系統(tǒng)設(shè)計(jì)

[復(fù)制鏈接]

2607

主題

2607

帖子

7472

積分

高級(jí)會(huì)員

Rank: 5Rank: 5

積分
7472
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-8-14 16:50:25 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
嵌入式工程師證書培訓(xùn)_基于Flash存儲(chǔ)器的嵌入式文件系統(tǒng)設(shè)計(jì),   

引 言

Flash 存儲(chǔ)器( Flash Memory) 是一種高可靠性、高密度的固態(tài)存儲(chǔ)器件。其存儲(chǔ)方式是完全非易失性的,掉電后可以保存數(shù)據(jù);可以在線寫入,并可按頁(yè)連續(xù)字節(jié)寫入,存取速度快,所以嵌入式系統(tǒng)通常使用Flash 存儲(chǔ)器作為存儲(chǔ)設(shè)備。 但Flash存儲(chǔ)器也存在著兩個(gè)主要缺陷:一是在重寫之前必須進(jìn)行擦除,因?yàn)镕lash 存儲(chǔ)器劃分成很多擦除塊(SectorOErase) ,對(duì)任何一位數(shù)據(jù)進(jìn)行修改必須先擦除整個(gè)塊(Sector) ;二是擦除塊的擦除次數(shù)有限,當(dāng)一個(gè)塊提前達(dá)到擦除次數(shù)上限時(shí), 將導(dǎo)致整個(gè)Flash 存儲(chǔ)器無(wú)法使用。 所以,目前PC 機(jī)上很多成熟的基于磁盤的文件系統(tǒng)在Flash 存儲(chǔ)器上使用都存在著不足。

嵌入式系統(tǒng)應(yīng)具有的特點(diǎn): 一是高可靠性,在惡劣環(huán)境下系統(tǒng)仍能正常工作;二是低消耗,受成本限制系統(tǒng)設(shè)計(jì)必須量體裁衣,去除冗余;三是高效率,在占用較少資源情況下保證功能需求,這樣就要求算法簡(jiǎn)單,效率高。 而日志文件系統(tǒng)(Log-St ruct ured File System) 在數(shù)據(jù)更新時(shí)無(wú)需將數(shù)據(jù)寫入原存儲(chǔ)區(qū)域,適應(yīng)Flash 存儲(chǔ)器無(wú)法進(jìn)行重寫這一特點(diǎn)。 目前,針對(duì)Flash 存儲(chǔ)器的缺陷而設(shè)計(jì)的Linux 下的J FFS 文件系統(tǒng),就是采用簡(jiǎn)化的日志文件系統(tǒng)。 J FFS 文件系統(tǒng)將磨損均衡集成于清除機(jī)制之中,在帶來(lái)掉電可恢復(fù)功能的同時(shí),大大減少了塊擦除的次數(shù),提高了文件系統(tǒng)的存取速度和效率。 但是,J FFS 文件系統(tǒng)無(wú)法單獨(dú)使用,或者使用于其它實(shí)時(shí)操作系統(tǒng)中。 對(duì)由于受成本和實(shí)時(shí)性限制而無(wú)法使用Linux 的一些嵌入式系統(tǒng),也就無(wú)法使用J FFS 文件系統(tǒng)。基于上述分析,該嵌入式文件系統(tǒng)適合在開(kāi)源實(shí)時(shí)操作系統(tǒng)(如μC/OS-II) 和無(wú)操作系統(tǒng)的情況下使用。

嵌入式文件系統(tǒng)原理

在日志文件系統(tǒng)中,一個(gè)文件被修改后不是被寫入到原來(lái)的存儲(chǔ)空間,而是被加到所有內(nèi)容的后面,象日志一樣被更新,這就是日志文件系統(tǒng)的基本原理。由于同一個(gè)文件在文件系統(tǒng)中會(huì)留下不同的版本,所以系統(tǒng)需要設(shè)置一張表標(biāo)注文件的最新與以前的版本。在內(nèi)容不斷添加時(shí)為不將存儲(chǔ)空間占滿,系統(tǒng)設(shè)計(jì)了一種回收機(jī)制,回收無(wú)效內(nèi)容占用的空間。

日志文件系統(tǒng)在文件更新時(shí)不用將文件寫回原來(lái)的地址,這對(duì)Flash 存儲(chǔ)器這種存儲(chǔ)介質(zhì)最為適合。 文中所設(shè)計(jì)的嵌入式文件系統(tǒng)采用了日志文件系統(tǒng)的設(shè)計(jì)原理,以及J FFS 文件系統(tǒng)將磨損均衡集成于清除機(jī)制之中的方法。 該系統(tǒng)將一個(gè)可擦寫塊平分為多個(gè)簇,文件的讀寫以簇為單位進(jìn)行。簇的狀態(tài)有3 種:臟、干凈和空。臟表示所存內(nèi)容已被置為無(wú)效;干凈表示所存數(shù)據(jù)有效;空表示可以寫入數(shù)據(jù)。文件和目錄在該系統(tǒng)中被作為節(jié)點(diǎn),一個(gè)節(jié)點(diǎn)占用若干個(gè)簇,節(jié)點(diǎn)中的內(nèi)容連續(xù)存儲(chǔ),但不能越過(guò)塊邊界存儲(chǔ)。該系統(tǒng)設(shè)置一個(gè)索引節(jié)點(diǎn),保存整個(gè)系統(tǒng)的信息,其中包含保存有各簇狀態(tài)的簇狀態(tài)表。

每一次文件更新后內(nèi)容都將被添加至末尾處,索引節(jié)點(diǎn)也被更新,總是占用最末尾的干凈簇。 回收臟簇時(shí),將所要擦除塊中的干凈簇重寫到空簇中,再進(jìn)行塊擦除。 當(dāng)內(nèi)容寫至存儲(chǔ)體末端,則從頭部重新開(kāi)始循環(huán)存儲(chǔ)。 所設(shè)計(jì)的文件系統(tǒng)的操作過(guò)程見(jiàn)圖1。

  
  




嵌入式文件系統(tǒng)設(shè)計(jì)

Flash 存儲(chǔ)器中的存儲(chǔ)結(jié)構(gòu)

Flash 存儲(chǔ)器中的存儲(chǔ)結(jié)構(gòu)見(jiàn)圖2。 該存儲(chǔ)器中每個(gè)簇的第一個(gè)字作為簇的狀態(tài)字,表示此簇是否為一個(gè)節(jié)點(diǎn)的首簇或空簇。 每個(gè)節(jié)點(diǎn)的首部存放此節(jié)點(diǎn)屬性(文件/目錄/索引節(jié)點(diǎn)) 和節(jié)點(diǎn)標(biāo)識(shí)號(hào)。

  
  




索引節(jié)點(diǎn)

索引節(jié)點(diǎn)存放該文件系統(tǒng)的大部分信息。 包括32 位的索引節(jié)點(diǎn)更新號(hào)、一張簇狀態(tài)表、下一個(gè)要被擦除塊的塊號(hào)、給下一個(gè)新建節(jié)點(diǎn)(文件或目錄) 的節(jié)點(diǎn)編號(hào)、系統(tǒng)根目錄信息表。系統(tǒng)每一次更新都會(huì)產(chǎn)生新的索引節(jié)點(diǎn),索引節(jié)點(diǎn)更新號(hào)加1。 按照Flash 存儲(chǔ)器的使用壽命10 年計(jì)算,需要每秒更新136 次以上,才能達(dá)到索引節(jié)點(diǎn)更新號(hào)的上限,所以認(rèn)為擁有最大更新號(hào)的索引節(jié)點(diǎn)為最新的索引節(jié)點(diǎn)。簇狀態(tài)表中對(duì)應(yīng)每一個(gè)簇有兩個(gè)Bit 位,表示各個(gè)簇的狀態(tài)(干凈01 ,臟11 ,空00) 。根目錄信息表存放根目錄下的各個(gè)目錄項(xiàng),每個(gè)目錄項(xiàng)包括:屬性(文件0x1/目錄0x0) 、文件名或目錄名、節(jié)點(diǎn)編號(hào)、此文件(或目錄) 對(duì)應(yīng)節(jié)點(diǎn)的起始簇地址、根目錄表的大小可變。

目錄節(jié)點(diǎn)

目錄節(jié)點(diǎn)存放的內(nèi)容有目錄名,目錄項(xiàng)個(gè)數(shù),及所有目錄項(xiàng)信息。 文件節(jié)點(diǎn)存放文件名,文件大小,文件屬性及文件內(nèi)容,內(nèi)存中的目錄結(jié)構(gòu)見(jiàn)圖3。

  
  




內(nèi)存數(shù)據(jù)結(jié)構(gòu)及基本操作

該文件系統(tǒng)載入(Mount ) 后,會(huì)在內(nèi)存中建立一個(gè)系統(tǒng)的映象。該映象包括:索引節(jié)點(diǎn)中的信息、目錄及文件信息、每個(gè)可擦寫塊中包含的節(jié)點(diǎn)信息、未存盤的節(jié)點(diǎn)信息。簇狀態(tài)表、索引節(jié)點(diǎn)更新號(hào)、新節(jié)點(diǎn)編號(hào)、下一擦除塊號(hào)等索引節(jié)點(diǎn)中的內(nèi)容,在內(nèi)存中均作為不同的變量。內(nèi)存中為每個(gè)文件和目錄都建立了映象,數(shù)據(jù)結(jié)構(gòu)見(jiàn)圖4 和圖5。
  




  

內(nèi)存中的文件節(jié)點(diǎn)不包含文件真正的數(shù)據(jù),而使用指針。文件被打開(kāi)時(shí),在內(nèi)存中創(chuàng)建一塊新存儲(chǔ)區(qū)域存放數(shù)據(jù),數(shù)據(jù)指針便指向此存儲(chǔ)區(qū),未被打開(kāi)時(shí),此指針指向空。 對(duì)于每個(gè)目錄有1 個(gè)目錄層數(shù),表示此目錄的深度,如根目錄的目錄層數(shù)為0 ,根目錄的下一級(jí)目錄則為1 ,依此類推。 存儲(chǔ)地址保存文件或目錄在Flash 中的地址。文件和目錄都被存在上一級(jí)目錄下,所屬目錄指針即指向上一級(jí)目錄在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),根目錄的所屬目錄指針即為空。對(duì)于同目錄下的不同節(jié)點(diǎn),在內(nèi)存中使用鏈表將其串聯(lián),同目錄文件指針即聯(lián)成鏈表。 鏈表的首指針保存在上一級(jí)目錄中,首目錄項(xiàng)指針即指向鏈表的首項(xiàng)。為提高塊擦寫的效率,存儲(chǔ)在同一個(gè)可擦寫塊中的各個(gè)節(jié)點(diǎn)在內(nèi)存中也建立一個(gè)鏈表,塊隊(duì)列指針即用于連成此鏈表。為標(biāo)識(shí)被修改的節(jié)點(diǎn),利用一個(gè)未保存隊(duì)列,未保存隊(duì)列指針即用來(lái)建立此隊(duì)列。[!--empirenews.page--]嵌入式圖形識(shí)別器, 嵌入式工程師的瓶頸, 意大利rcf嵌入式, 南昌嵌入式公司排名, 嵌入式shaolu, 服務(wù)器運(yùn)維和嵌入式, 嵌入式如果加載地圖, 嵌入式lzma, 嵌入式顯卡更換, 嵌入式計(jì)算技術(shù), 非嵌入式圖形指, 在嵌入式框架中打開(kāi), 嵌入式系統(tǒng)看法, 嵌入式設(shè)備管理平臺(tái), 嵌入式可以考什么證, 嵌入式系統(tǒng)電梯, 嵌入式教學(xué)學(xué)前兒童, 嵌入式有必要讀研, 學(xué)校嵌入式管理, 單片機(jī)是不是嵌入式, 嵌入式韋東山難學(xué), 嵌入式方向是啥意思,

該文件系統(tǒng)載入(mount ) 時(shí),首先順序掃描Flash 中的每個(gè)索引節(jié)點(diǎn),查找出最大的索引節(jié)點(diǎn)更新號(hào),此更新號(hào)對(duì)應(yīng)的索引節(jié)點(diǎn)即為最新的索引節(jié)點(diǎn)。查找到最新索引節(jié)點(diǎn)后,將簇狀態(tài)表等信息映射到內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中。依據(jù)索引節(jié)點(diǎn)中的根目錄信息,遍歷所有節(jié)點(diǎn),建立內(nèi)存中的目錄文件結(jié)構(gòu),并將節(jié)點(diǎn)添加到對(duì)應(yīng)的擦寫塊隊(duì)列中。 對(duì)一個(gè)文件編輯并保存的過(guò)程見(jiàn)圖6。

  
  




文件打開(kāi)時(shí),先在內(nèi)存中分配一塊空間作為數(shù)據(jù)區(qū),將內(nèi)容寫入,并定位文件節(jié)點(diǎn)的數(shù)據(jù)指針指向該內(nèi)存中的數(shù)據(jù)區(qū)。如果文件內(nèi)容被修改,就將文件節(jié)點(diǎn)添加到未存盤隊(duì)列,依次寫入Flash 存儲(chǔ)器中,并修改簇狀態(tài)表。 保存時(shí)將內(nèi)存中數(shù)據(jù)區(qū)內(nèi)容寫入Flash 中,釋放申請(qǐng)的內(nèi)存空間,修改節(jié)點(diǎn)中的數(shù)據(jù)指針和簇狀態(tài)表,再將文件的所有上級(jí)目錄重新寫入Flash ,最后將更新后的索引節(jié)點(diǎn)內(nèi)容寫入Flash。如果文件未被修改,則只需修改數(shù)據(jù)指針即可。

節(jié)點(diǎn)加入未存盤隊(duì)列的順序按照目錄層數(shù)的大小排列,文件節(jié)點(diǎn)排在隊(duì)列首,目錄層數(shù)最大的排在其后,目錄層數(shù)為1 的排在隊(duì)列末尾,根目錄不加入未存盤隊(duì)列。

嵌入式文件系統(tǒng)特殊處理機(jī)制

均衡擦寫機(jī)制

為了避免任意一個(gè)可擦除塊因擦寫次數(shù)過(guò)多而過(guò)早報(bào)廢,文件系統(tǒng)對(duì)Flash擦寫時(shí)采用了均衡擦寫機(jī)制。 考慮到系統(tǒng)的精簡(jiǎn)性,擦寫在整片F(xiàn)lash 的各塊中依次進(jìn)行,一塊擦寫完后,下一個(gè)被擦寫的塊即為后一個(gè)塊,在系統(tǒng)的索引節(jié)點(diǎn)中保存了下一個(gè)要擦除的塊號(hào)。當(dāng)文件系統(tǒng)中的剩余空間減少到設(shè)定值時(shí),系統(tǒng)會(huì)擦除此塊,以回收臟簇占用的空間。對(duì)應(yīng)每個(gè)可擦寫塊都有一個(gè)節(jié)點(diǎn)隊(duì)列,此塊中包含的節(jié)點(diǎn)都加入其中。塊擦除的流程見(jiàn)圖7。
  




首先,將未保存于隊(duì)列中的節(jié)點(diǎn)保存,清未保存隊(duì)列。 然后將塊隊(duì)列中的所有文件節(jié)點(diǎn)轉(zhuǎn)移到空簇中,同時(shí)將文件路徑上的各級(jí)目錄加入到未存盤隊(duì)列中。對(duì)于塊隊(duì)列中的目錄節(jié)點(diǎn),則將它和其路徑上的各級(jí)目錄加入未存盤隊(duì)列中,按照未保存隊(duì)列的順序,依次將各個(gè)目錄寫入Flash 中,最后寫入最新的索引節(jié)點(diǎn)。因?yàn)槟夸浌?jié)點(diǎn)加入未存盤隊(duì)列時(shí),按照目錄層數(shù)的大小排列,所以按照未保存隊(duì)列的順序?qū)懭霑r(shí),可以保證當(dāng)一個(gè)目錄要被寫入 Flash 時(shí),它的所有下級(jí)目錄已被寫入Flash 中。 所有下級(jí)目錄在Flash 中的存儲(chǔ)地址都已確定。當(dāng)該文件系統(tǒng)的空間將達(dá)到存儲(chǔ)上限時(shí),可能會(huì)出現(xiàn)特殊情況,即廢簇回收時(shí),空簇的空間不足,無(wú)法將所有干凈簇重寫。文件系統(tǒng)為此建立了應(yīng)急機(jī)制,先將文件節(jié)點(diǎn)內(nèi)容存在內(nèi)存中,這時(shí)新建一個(gè)臨時(shí)未保存隊(duì)列,專門保存文件節(jié)點(diǎn),在塊擦寫完成后,將剩余的文件節(jié)點(diǎn)寫入新的空簇中,其算法與圖7 所示流程大致相同。 但是,一旦在擦寫時(shí)斷電,會(huì)導(dǎo)致該塊上的所有數(shù)據(jù)丟失。

斷電錯(cuò)誤處理機(jī)制

當(dāng)系統(tǒng)遭遇斷電重新啟動(dòng)后,索引節(jié)點(diǎn)中的信息會(huì)與系統(tǒng)中的狀態(tài)不符,這時(shí)便需要錯(cuò)誤處理機(jī)制。 錯(cuò)誤一般是索引節(jié)點(diǎn)中標(biāo)注的空簇已被寫入了數(shù)據(jù),錯(cuò)誤處理就是將此簇標(biāo)志為臟簇,并查找下一個(gè)空簇重新寫入。

多任務(wù)處理機(jī)制

該文件系統(tǒng)允許同時(shí)打開(kāi)多個(gè)文件,在多任務(wù)操作系統(tǒng)下,為了避免沖突建立了多任務(wù)處理機(jī)制。系統(tǒng)允許打開(kāi)的多個(gè)文件在內(nèi)存中同時(shí)被編輯修改,但是對(duì) Flash 寫入操作有限制。 處理方法是設(shè)立Flash 寫入保護(hù)區(qū),在此區(qū)中只允許當(dāng)前正在執(zhí)行的任務(wù)執(zhí)行Flash 寫入操作。 實(shí)現(xiàn)Flash 寫入保護(hù)區(qū)的方法是建立一個(gè)初始值為1 的信號(hào)量,當(dāng)一個(gè)節(jié)點(diǎn)需要Flash 寫入時(shí),首先申請(qǐng)信號(hào)量,完成后再釋放信號(hào)量。 Flash 寫入保護(hù)區(qū)見(jiàn)圖6 、圖7。在圖6 中,空操作語(yǔ)句是用來(lái)對(duì)多個(gè)文件的保存進(jìn)行同步。 例如,有文件1 和文件2 需要保存,先將文件1 的內(nèi)容寫入Flash 中,文件1 路徑下的目錄節(jié)點(diǎn)被添加到未保存隊(duì)列中,再將文件2 的內(nèi)容寫入Flash 中,文件2 路徑下的目錄節(jié)點(diǎn)也被添加到未保存隊(duì)列中,最后將未保存隊(duì)列中的所有節(jié)點(diǎn)都寫入Flash 中。這樣,如果同一路徑下的兩個(gè)文件同時(shí)存盤,可避免路徑下的相同目錄節(jié)點(diǎn)被寫入兩次,從而提高了效率。不足之處在于,如果很多文件同時(shí)存盤,會(huì)導(dǎo)致索引節(jié)點(diǎn)在一段時(shí)間內(nèi)都無(wú)法寫入Flash 存儲(chǔ)器,有斷電丟失的危險(xiǎn)。但對(duì)于一般嵌入式系統(tǒng)來(lái)說(shuō),很少會(huì)碰到這種情況。當(dāng)進(jìn)行Flash存儲(chǔ)器擦寫時(shí),在取塊隊(duì)列首節(jié)點(diǎn)至索引節(jié)點(diǎn)寫入完成這段時(shí)間內(nèi)都不允許進(jìn)行其他Flash 存儲(chǔ)器的寫入操作,這是為了保證數(shù)據(jù)的完整性,同時(shí)也提高了文件系統(tǒng)的穩(wěn)定性。

無(wú)目錄文件系統(tǒng)的優(yōu)化

許多嵌入式系統(tǒng)設(shè)計(jì)中雖沒(méi)有目錄管理的要求,但是對(duì)執(zhí)行效率和資源消耗的要求較高。 對(duì)于不要求有目錄管理的精簡(jiǎn)文件系統(tǒng),在設(shè)計(jì)時(shí)也進(jìn)行了優(yōu)化。精簡(jiǎn)文件系統(tǒng)在Flash 中的存儲(chǔ)格式與上述設(shè)計(jì)相同,文件系統(tǒng)中的所有文件信息都保存在索引節(jié)點(diǎn)的根目錄信息表中。精簡(jiǎn)文件系統(tǒng)在內(nèi)存中的映象則要簡(jiǎn)單很多,只包含索引節(jié)點(diǎn)中的信息,包括簇狀態(tài)表、下一個(gè)擦除塊、下一個(gè)新節(jié)點(diǎn)的標(biāo)號(hào)和根目錄信息,而不用為每個(gè)文件都建立內(nèi)存中的映象,節(jié)省大量的內(nèi)存空間。 文件的編輯存盤過(guò)程簡(jiǎn)化為:打開(kāi)文件、編輯、將文件寫入Flash 存儲(chǔ)器、將修改后的索引節(jié)點(diǎn)寫入Flash 存儲(chǔ)器。擦寫則只需通過(guò)查詢根目錄信息表中的各個(gè)目錄項(xiàng),將塊中的所有文件節(jié)點(diǎn)寫入空簇即可。在無(wú)目錄管理的情況下,精簡(jiǎn)文件系統(tǒng)占用的內(nèi)存資源可以減少,操作也可便捷,提高了效率。 對(duì)于大量只需要按名存取的簡(jiǎn)單文件管理的小型嵌入式系統(tǒng)而言,針對(duì)Flash 存儲(chǔ)器的簡(jiǎn)單文件系統(tǒng)將占用資源少,執(zhí)行效率高,有很大的應(yīng)用價(jià)值。

嵌入式文件系統(tǒng)實(shí)現(xiàn)及性能分析

該文件系統(tǒng)的實(shí)現(xiàn)采用了分層方法,分為3 層4 個(gè)部分:應(yīng)用程序接口、文件系統(tǒng)核心、操作系統(tǒng)調(diào)用接口、Flash 存儲(chǔ)器驅(qū)動(dòng),實(shí)現(xiàn)結(jié)構(gòu)見(jiàn)圖8。

  
[!--empirenews.page--]


實(shí)現(xiàn)平臺(tái)中RTOS 為μC/OSOII 實(shí)時(shí)操作系統(tǒng),CPU 使用三星S4510B作為處理器,F(xiàn)lash 存儲(chǔ)器芯片為FUJ ITSU 的29LV160 TE。 針對(duì)不同的實(shí)時(shí)操作系統(tǒng)和Flash 存儲(chǔ)器芯片需要實(shí)現(xiàn)不同的操作系統(tǒng)接口和Flash 存儲(chǔ)器驅(qū)動(dòng)。

針對(duì)μC/ OSOII 編寫操作系統(tǒng)調(diào)用接口,包括5個(gè)函數(shù): ①系統(tǒng)調(diào)用接口初始化FS_Sys_Interface_Init ( ) ,創(chuàng)建互斥信號(hào)量和內(nèi)存分區(qū); ② Flash 寫入關(guān)閉FS_Sys_Write_Lock ( ) ,禁止Flash 寫入操作,調(diào)用μC/OS-II 中OSMutePend ( ) ; ③ Flash寫入打開(kāi)FS_Sys_Write_Unlock ( ) ,重新允許Flash 寫入操作,調(diào)用μC/OS-II 中OSMutePost() ; ④內(nèi)存空間申請(qǐng)F(tuán)S_Sys_Mem_Alloc( ) 和內(nèi)存空間添加FS_Sys_Mem_Add ( ) , 都調(diào)用OSMemGet ( ) 來(lái)完成; ⑤內(nèi)存空間釋放FS_Sys_Mem_Free ( ) ,調(diào)用OSMemPut ( ) 完成,將申請(qǐng)的內(nèi)存塊全部釋放。針對(duì)29LV160 TE 這款Flash 存儲(chǔ)器芯片,定義一個(gè)FlashDef 結(jié)構(gòu)體的全局變量, 用于存儲(chǔ)Flash 器件信息,并且編寫針對(duì)此款Flash 的塊擦寫函數(shù)FS_Device_Sector_Erase ( ) 和數(shù)據(jù)寫入函數(shù)FJ FS_Device_Write ( ) 。

完成這兩部分的實(shí)現(xiàn)后,該系統(tǒng)就可運(yùn)行調(diào)試。 測(cè)試應(yīng)用程序接口(API) 。應(yīng)該提供的各部分功能,并在突然斷電情況下,測(cè)試文件系統(tǒng)的恢復(fù)情況。無(wú)目錄管理的精簡(jiǎn)文件系統(tǒng)的載入,可在2μs內(nèi)完成,文件寫入耗時(shí)主要為閃存的等待時(shí)間,系統(tǒng)本身只占用不到200 個(gè)字節(jié)的內(nèi)存,產(chǎn)生的代碼段大小為7 K。完整的文件系統(tǒng)載入時(shí),需要建立內(nèi)存中映象,耗時(shí)根據(jù)文件數(shù)量的多少而不同,一般為10μs ,產(chǎn)生的代碼段大小為11 K。系統(tǒng)寫入效率較高,在無(wú)目錄管理的配置下尤其明顯。試驗(yàn)中系統(tǒng)在多次斷電的情況下,系統(tǒng)仍能恢復(fù)至上次存盤的狀態(tài),雖會(huì)導(dǎo)致個(gè)別文件未更新,但不會(huì)導(dǎo)致文件系統(tǒng)崩潰。

結(jié) 語(yǔ)

針對(duì)Flash 存儲(chǔ)器的固有缺陷設(shè)計(jì)了一種基于Flash 存儲(chǔ)器的嵌入式文件系統(tǒng)。 在文件讀寫時(shí),極大減少了Flash 存儲(chǔ)器擦寫的次數(shù),提高了效率。 此系統(tǒng)代碼精簡(jiǎn),運(yùn)行時(shí)占用內(nèi)存資源少,運(yùn)行效率高,而且有斷電保護(hù),有較高的安全性。

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表