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

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