0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)工控主板FAT文件系統(tǒng)的穩(wěn)健讀寫(xiě)方法介紹

英創(chuàng)信息技術(shù) ? 來(lái)源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-01-16 09:33 ? 次閱讀

在基于WinCE的嵌入式系統(tǒng)中,通常NandFlash + FAT文件系統(tǒng)是最為常用的數(shù)據(jù)存儲(chǔ)方式。對(duì)這類(lèi)設(shè)備長(zhǎng)期運(yùn)行情況的跟蹤,我們發(fā)現(xiàn)在一定的應(yīng)用情況下,F(xiàn)AT文件系統(tǒng)存在失效的可能,而文件系統(tǒng)的失效導(dǎo)致系統(tǒng)在重啟中不能讀取系統(tǒng)注冊(cè)表或應(yīng)用程序文件,宏觀的現(xiàn)象就是設(shè)備不能正常運(yùn)行。

經(jīng)過(guò)對(duì)FAT文件失效情況的分析,我們發(fā)現(xiàn)出現(xiàn)失效的系統(tǒng)往往有以下兩種文件操作:

1、需要保存運(yùn)行日志文件,每條日志記錄大約兩百字節(jié)水平,整個(gè)日志文件可包含上萬(wàn)條記錄,即日志文件大小在2MB水平。應(yīng)用程序?qū)θ罩镜牟僮魇请S機(jī)的。

2、系統(tǒng)有一個(gè)容量上兆的配置文件,應(yīng)用程序可能根據(jù)運(yùn)行的情況,動(dòng)態(tài)修改配置的內(nèi)容。

以上這兩種文件操作,對(duì)NandFlash + FAT的存儲(chǔ)單位,由于文件都比較大,都可能導(dǎo)致大規(guī)模的NandFlash塊擦除及數(shù)據(jù)搬動(dòng)。當(dāng)此時(shí)CPU負(fù)載還比較重時(shí),F(xiàn)AT文件系統(tǒng)內(nèi)部的某種缺陷就可能暴露出來(lái),從而危害設(shè)備的穩(wěn)定運(yùn)行。

針對(duì)上述兩種應(yīng)用的特點(diǎn),以規(guī)避FAT文件系統(tǒng)出現(xiàn)致命缺陷為目的,我們?cè)O(shè)計(jì)了一層新的文件操作API函數(shù),來(lái)替代常規(guī)的文件API函數(shù)。新的API包括以下6個(gè)函數(shù):

? HANDLE CreateFileEm(……);
? BOOL ReadFileEm(……);
? BOOL WriteFileEm(……);
? DWORD SetFilePointerEm(……);
? DWORD GetFileSizeEm(……);
? BOOL CloseHandleEm(……);

這6個(gè)API函數(shù)的名稱(chēng)與對(duì)應(yīng)的常規(guī)函數(shù)名稱(chēng)基本一致,只是在末尾增加了“Em”兩個(gè)字母以示區(qū)別,函數(shù)的參數(shù)與常規(guī)函數(shù)的參數(shù)則完全一致。應(yīng)用程序只需做簡(jiǎn)單的修改,就可使用我們所提供的新方法。

新的文件操作的要點(diǎn),是把一個(gè)日志文件或配置文件,映射為NandFlash下的子目錄,文件的內(nèi)容則分成若干個(gè)子文件(以下稱(chēng)為量子文件,以表示它的不可分割性),量子文件按序號(hào)0000依次遞增9999,每個(gè)量子文件的大小為NandFlash的扇區(qū)大小,在英創(chuàng)工控主板中NandFlash的扇區(qū)Size為2KB,當(dāng)前量子文件寫(xiě)滿(mǎn)2KB后,會(huì)自動(dòng)生成當(dāng)前序號(hào)+1的新量子文件。API內(nèi)部建有當(dāng)前量子文件的數(shù)據(jù)緩沖區(qū),當(dāng)讀寫(xiě)僅限于當(dāng)前量子文件大小(即2KB)時(shí),不會(huì)產(chǎn)生實(shí)質(zhì)性的NandFlash讀寫(xiě),從而降低NandFlash的讀寫(xiě)負(fù)擔(dān)。即使進(jìn)行實(shí)質(zhì)性的寫(xiě)操作,因?yàn)榭偸?KB,F(xiàn)AT文件系統(tǒng)的工作量也被降到最低。

新的API函數(shù)盡管可支持不同線程操作同一文件,但若出現(xiàn)不同線程對(duì)同一個(gè)量子文件進(jìn)行讀寫(xiě)操作,則可能存在數(shù)據(jù)丟失的情況、讀取的數(shù)據(jù)不是最新數(shù)據(jù)的情況。因此應(yīng)用程序應(yīng)盡量避免不同線程對(duì)同一個(gè)量子文件進(jìn)行讀寫(xiě)操作。

在200MHz主頻的CE5.0系統(tǒng)中(如 EM9160、EM9360等),新API函數(shù)的文件寫(xiě)操作的平均速度在90KB/s – 95KB/s范圍,文件讀操作的平均速度在600KB/s – 700KB/s范圍。

一般情況下若寫(xiě)入的數(shù)據(jù)處在一個(gè)量子文件大小區(qū)域內(nèi),為了提高NandFlash的操作效率,不會(huì)立即觸發(fā)實(shí)質(zhì)性的NandFlash寫(xiě)。但之后一定時(shí)間內(nèi)(設(shè)置為2秒),沒(méi)有進(jìn)一步的寫(xiě)操作,新API的后備線程會(huì)自動(dòng)把應(yīng)用程序?qū)懭氲臄?shù)據(jù)實(shí)質(zhì)性寫(xiě)入NandFlash的對(duì)應(yīng)量子文件中。因此這里存在,在實(shí)質(zhì)性寫(xiě)入發(fā)生之前,系統(tǒng)由于某種情況出現(xiàn)重啟(Power Cycling),應(yīng)用程序?qū)懭氲臄?shù)據(jù)就會(huì)丟失的情況。這是為避免致命性錯(cuò)誤,應(yīng)用程序需付出的代價(jià)。

更極端的情況,當(dāng)正在實(shí)質(zhì)性寫(xiě)某一量子文件時(shí),系統(tǒng)出現(xiàn)Power Cycling,還可能存在該量子文件被破壞的情況。但這種情況在常規(guī)寫(xiě)中同樣存在,且被破壞的還是整個(gè)文件。因此新API是Power Cycling對(duì)整個(gè)數(shù)據(jù)的損壞度是降低了的。

更重要的是,在系統(tǒng)進(jìn)入穩(wěn)定運(yùn)行后,量子文件的數(shù)目瞬間不會(huì)有大的變化,甚至完全沒(méi)有變化(配置文件情形,或日志文件達(dá)到應(yīng)用程序設(shè)置的上限),這樣新的API對(duì)FAT文件系統(tǒng)的FAT表、目錄區(qū)的負(fù)載會(huì)降到最低,從而大大避免FAT文件系統(tǒng)的關(guān)鍵區(qū)域被Power Cycling破壞的可能性。這是新API規(guī)避FAT文件系統(tǒng)缺陷的關(guān)鍵所在。

新API的定義包含在“LogFile.h”頭文件中,具體實(shí)現(xiàn)代碼則在“LogFile.cpp”中,對(duì)客戶(hù)應(yīng)用程序,只需簡(jiǎn)單的把LogFile.cpp加入到應(yīng)用程序中,并在相關(guān)的cpp文件中include頭文件LogFile.h,就可方便的測(cè)試評(píng)估該方法了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何修改buildroot和debian文件系統(tǒng)

    本文檔主要介紹在沒(méi)有編譯環(huán)境的情況下,如何修改buildroot和debian文件系統(tǒng)方法,如在buildroot文件系統(tǒng)中添加文件、修改目
    的頭像 發(fā)表于 07-22 17:46 ?283次閱讀
    如何修改buildroot和debian<b class='flag-5'>文件系統(tǒng)</b>

    linux--sysfs文件系統(tǒng)

    sysfs文件系統(tǒng) sysfs,全稱(chēng)為System Filesystem,是一個(gè)由Linux內(nèi)核實(shí)現(xiàn)的虛擬文件系統(tǒng)。它扮演著一個(gè)橋梁的角色,將內(nèi)核中的設(shè)備和驅(qū)動(dòng)程序信息文件的形式呈現(xiàn)
    的頭像 發(fā)表于 07-08 11:37 ?447次閱讀
    linux--sysfs<b class='flag-5'>文件系統(tǒng)</b>

    使用wear_level api來(lái)安裝fat文件系統(tǒng),如何格式化FAT文件系統(tǒng)

    我使用wear_level api來(lái)安裝fat文件系統(tǒng)。 在使用過(guò)程中發(fā)現(xiàn),在向該地址中寫(xiě)入文件的時(shí)候斷電,將導(dǎo)致這份文件之后無(wú)法操作,還會(huì)占用一個(gè)
    發(fā)表于 06-26 06:51

    通用FAT文件系統(tǒng)模塊

     FatFs 是用于小型嵌入式系統(tǒng)的通用 FAT/exFAT 文件系統(tǒng)模塊。FatFs模塊按照ANSI C(C89)編寫(xiě),與磁盤(pán)I/O層完全分離。因此它獨(dú)立于平臺(tái)。它可以集成到資源有限的小型微控制器中,例如 8051、PIC、A
    發(fā)表于 05-03 10:28 ?143次閱讀
    通用<b class='flag-5'>FAT</b><b class='flag-5'>文件系統(tǒng)</b>模塊

    CubeMx可以生成FAT32的文件系統(tǒng)嗎?

    大家好!MCU型號(hào):STM32L476R 我測(cè)試發(fā)現(xiàn) CubeMX 生成的文件系統(tǒng)FAT16 的。請(qǐng)教一下,CubeMx 可以生成 FAT32 的文件系統(tǒng)嗎?
    發(fā)表于 04-19 07:11

    服務(wù)器數(shù)據(jù)恢復(fù)—ocfs2文件系統(tǒng)被誤格式化為Ext4文件系統(tǒng)的數(shù)據(jù)恢復(fù)案例

    由于工作人員的誤操作,將Ext4文件系統(tǒng)誤裝入到存儲(chǔ)中Ocfs2文件系統(tǒng)數(shù)據(jù)卷上,導(dǎo)致原Ocfs2文件系統(tǒng)被格式化為Ext4文件系統(tǒng)。 由于Ext4
    的頭像 發(fā)表于 12-04 10:49 ?352次閱讀
    服務(wù)器數(shù)據(jù)恢復(fù)—ocfs2<b class='flag-5'>文件系統(tǒng)</b>被誤格式化為Ext4<b class='flag-5'>文件系統(tǒng)</b>的數(shù)據(jù)恢復(fù)案例

    Linux的文件系統(tǒng)特點(diǎn)

    Linux的文件系統(tǒng)特點(diǎn) 文件系統(tǒng)要有嚴(yán)格的組織形式,使得文件能夠以塊為單位進(jìn)行存儲(chǔ)。 文件系統(tǒng)中也要有索引區(qū),用來(lái)方便查找一個(gè)文件分成的多
    的頭像 發(fā)表于 11-09 14:48 ?977次閱讀
    Linux的<b class='flag-5'>文件系統(tǒng)</b>特點(diǎn)

    FAT32文件系統(tǒng)詳細(xì)分析 (格式化SD nand/SD卡)

    在上一篇文章,我們已經(jīng)對(duì)FAT文件系統(tǒng)有了一個(gè)詳細(xì)的介紹,但由于FAT文件系統(tǒng)由歷史發(fā)展,存在FAT
    發(fā)表于 11-03 17:55

    如何把文件系統(tǒng)燒到EMMC并從EMMC加載

    如何下載并從SD卡加載文件系統(tǒng),提到過(guò)可以從EMMC引導(dǎo)系統(tǒng),本篇將為您介紹如何把文件系統(tǒng)燒到EMMC,并從EMMC加載。
    的頭像 發(fā)表于 10-30 16:06 ?2432次閱讀
    如何把<b class='flag-5'>文件系統(tǒng)</b>燒到EMMC并從EMMC加載

    射頻識(shí)別技術(shù)漫談(26)——Felica的文件系統(tǒng)

    射頻識(shí)別技術(shù)漫談(26)——Felica的文件系統(tǒng)
    的頭像 發(fā)表于 10-24 16:11 ?536次閱讀
    射頻識(shí)別<b class='flag-5'>技術(shù)</b>漫談(26)——Felica的<b class='flag-5'>文件系統(tǒng)</b>

    FAT32文件系統(tǒng)詳細(xì)分析 (格式化SD nand/SD卡)

    文章目錄FAT32文件系統(tǒng)詳細(xì)分析(續(xù)FAT文件系統(tǒng)詳解)1.前言2.格式化SDnand/SD卡3.FAT32
    的頭像 發(fā)表于 10-18 17:12 ?1086次閱讀
    <b class='flag-5'>FAT</b>32<b class='flag-5'>文件系統(tǒng)</b>詳細(xì)分析 (格式化SD nand/SD卡)

    FAT32文件系統(tǒng)詳細(xì)分析 (格式化SD nand/SD卡)

    在上一篇文章,我們已經(jīng)對(duì)FAT文件系統(tǒng)有了一個(gè)詳細(xì)的介紹,但由于FAT文件系統(tǒng)由歷史發(fā)展,存在FAT
    發(fā)表于 10-18 16:58

    分布式文件系統(tǒng)的設(shè)計(jì)原理是什么?

    什么是分布式文件系統(tǒng)?分布式文件系統(tǒng)(DFS)是一種計(jì)算機(jī)文件系統(tǒng),使用戶(hù)能夠從多個(gè)分布式位置存儲(chǔ)和訪問(wèn)數(shù)據(jù)。它是在分布式環(huán)境中的不同計(jì)算機(jī)之間共享信息的一種方式。通過(guò)使用分布式
    的頭像 發(fā)表于 10-17 17:35 ?680次閱讀

    FATFS文件系統(tǒng)有讀取文件日期信息的函數(shù)嗎?

    FATFS文件系統(tǒng),有讀取文件日期信息的函數(shù)嗎?
    發(fā)表于 10-16 06:01

    FAT16文件系統(tǒng)有什么缺點(diǎn)?

    FAT16文件系統(tǒng)有什么缺點(diǎn)
    發(fā)表于 10-09 07:27