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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

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

1、需要保存運行日志文件,每條日志記錄大約兩百字節(jié)水平,整個日志文件可包含上萬條記錄,即日志文件大小在2MB水平。應用程序對日志的操作是隨機的。

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

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

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

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

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

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

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

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

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

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

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

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

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

    評論

    相關推薦

    工控機重裝系統(tǒng)方法介紹

    ? 工控機怎么重裝系統(tǒng),工控機重裝系統(tǒng)方法介紹攻略 ? 首先看下自己購買的什么
    的頭像 發(fā)表于 10-23 17:11 ?89次閱讀

    Linux根文件系統(tǒng)的掛載過程

    Linux根文件系統(tǒng)(rootfs)是Linux系統(tǒng)中所有其他文件系統(tǒng)和目錄的起點,它是內核啟動時掛載的第一個文件系統(tǒng)
    的頭像 發(fā)表于 10-05 16:50 ?161次閱讀

    創(chuàng)國產(chǎn)化背景下的工控主板發(fā)展現(xiàn)狀

    創(chuàng),是信息技術應用創(chuàng)新產(chǎn)業(yè)的簡稱,于2016年“信創(chuàng)工委會”(信息技術應用創(chuàng)新工作委員會)提出,目的就是要推動我們國內軟硬件關鍵技術的研發(fā)
    的頭像 發(fā)表于 09-21 16:15 ?224次閱讀

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

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

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

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

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

    我使用wear_level api來安裝fat文件系統(tǒng)。 在使用過程中發(fā)現(xiàn),在向該地址中寫入文件的時候斷電,將導致這份文件之后無法操作,還會占用一個
    發(fā)表于 06-26 06:51

    工控主板的性能指標有哪些?

    工控主板是工業(yè)控制領域中的關鍵組成部分,它承載著工控系統(tǒng)的核心功能。因此,工控主板的性能指標是評
    的頭像 發(fā)表于 05-10 16:27 ?819次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>的性能指標有哪些?

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

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

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

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

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

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

    i.MX6ULL——ElfBoard ELF1板卡 之文件系統(tǒng)目錄的介紹

    ,也可以從頭開始構建。 我們可以根據(jù)不同的應用場景,對嵌入式文件系統(tǒng)目錄結構進行裁剪。下面本精靈對比較經(jīng)典的幾個文件目錄做一下介紹。運行cd/進入文件系統(tǒng)根目錄,運行l(wèi)s -l可以看到
    發(fā)表于 11-24 09:59

    Linux文件系統(tǒng)層的主要結構

    Linux 文件系統(tǒng)體系結構是一個對復雜系統(tǒng)進行抽象化的有趣例子。通過使用一組通用的 API 函數(shù),Linux 可以在許多種存儲設備上支持許多種文件系統(tǒng)。例如,read 函數(shù)調用可以從指定的
    的頭像 發(fā)表于 11-10 10:37 ?510次閱讀
    Linux<b class='flag-5'>文件系統(tǒng)</b>層的主要結構

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

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

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

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

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

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