嵌入式文件系統在工程機械監控器上的移植
2.6 文件管理的程序移植
這部分是關于文件系統的文件基本操作程序,主要包括:初始化文件指針系統,查找已打開的指定文件的文件句柄,刪除文件,查找以讀寫方式打開的指定文件的文件句柄,只讀方式打開文件,讀寫方式打開文件,移動文件讀/寫位置,以指定方式打開文件,關閉指定文件,從文件讀一個字節,讀取文件,寫一個字節到文件,寫文件,關閉所有打開的文件,判斷文件是否讀/寫到文件尾,從文件指針當前位置讀取一頁,從文件指針當前位置寫入一頁。在這部分函數里,著重修改的是兩個函數:讀取文件FileRead()和寫文件FileWrite()。第一個函數的原型是這樣的:

不難看出,這個函數讀取文件的時候是一個一個字符讀的,而且每讀一個字符都要從盤里讀而不是從緩存里讀,這樣不僅速度慢,而且對磁盤的操作太頻繁,容易減少磁盤的壽命。為了解決這個問題,對上述函數進行了修改。首先創建了一個新函數:從文件指針當前位置讀取一頁FileGetPage(),這個函數一次性最大能夠讀取一個Page大小的文件。然后,在FileRead函數里判斷,如果要讀取的文件大小不足一個Page,就用memcpy()這個庫函數將文件里要讀取的內容直接拷貝到緩沖區;如果要讀取的文件超過一個Page,就計算出有N個Page,然后循環N次調用FileGetPage(),最后將不足一個Page的部分用memcpy()這個庫函數去拷貝。
根據相同的思路,又創建了一個新函數:從文件指針當前位置寫入一頁FileWritePage(),并對ZLG—FS原來的FileWrite()函數進行了修改。通過實驗發現,這樣修改以后,大大提高了文件系統的讀寫速度。原來讀取一個幾兆的文件需要半個多小時,現在不到一分鐘就可以完成了。
2.7 目錄管理的程序移植
Dir.c文件是關于FAT文件系統的目錄基本操作程序,主要包括:用戶文件/目錄名轉換為系統名,獲取FDT所在目錄的開始簇號及系統內名稱,獲取指定目錄的驅動器(驅動器號為0、1、2等),改變當前邏輯盤,獲取指定目錄開始簇號,建立目錄,刪除目錄,改變當前目錄。這里面有幾個函數作過微小的修改,在此不細述。
2.8 文件系統在嵌入式系統上面的移植
在智能監控器中,使用的嵌入式系統是μC/OS—II。正好ZLG—FS提供了其文件系統在μC/OS—II上面的移植程序,就是文件OSFile. c,該文件里面的函數和File.c里面的函數功能類似,只不過都打上了μC/OS—II系統的烙印,這些函數都通過調用Together(a,b,c)來完成對文件的一些操作。Together(a,b,c)是為簡化接口函數編寫的一個宏。最后一個函數是OSFileTask(),該函數是在系統主程序里調用的,作用是創建一個文件系統服務任務,對文件的所有操作都可以在該任務里以命令的形式被執行。這一模塊的程序基本不需要修改。
結語
在整個文件系統的移植過程中,首先要將文件系統里的程序全部吃透、消化,然后再根據自己的需要進行修改,邊修改邊做實驗,通過這個過程還可以學習他人好的編程方法。移植完后,通過實驗驗證了嵌入式文件系統的移植效果良好、系統穩定。本文引用地址:http://www.104case.com/article/201610/306067.htm
評論