新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式文件系統(tǒng)在工程機械監(jiān)控器上的移植

嵌入式文件系統(tǒng)在工程機械監(jiān)控器上的移植

作者: 時間:2016-10-10 來源:網(wǎng)絡 收藏

2.6 文件管理的程序
這部分是關于文件系統(tǒng)的文件基本操作程序,主要包括:初始化文件指針系統(tǒng),查找已打開的指定文件的文件句柄,刪除文件,查找以讀寫方式打開的指定文件的文件句柄,只讀方式打開文件,讀寫方式打開文件,移動文件讀/寫位置,以指定方式打開文件,關閉指定文件,從文件讀一個字節(jié),讀取文件,寫一個字節(jié)到文件,寫文件,關閉所有打開的文件,判斷文件是否讀/寫到文件尾,從文件指針當前位置讀取一頁,從文件指針當前位置寫入一頁。在這部分函數(shù)里,著重修改的是兩個函數(shù):讀取文件FileRead()和寫文件FileWrite()。第一個函數(shù)的原型是這樣的:
a.JPG
不難看出,這個函數(shù)讀取文件的時候是一個一個字符讀的,而且每讀一個字符都要從盤里讀而不是從緩存里讀,這樣不僅速度慢,而且對磁盤的操作太頻繁,容易減少磁盤的壽命。為了解決這個問題,對上述函數(shù)進行了修改。首先創(chuàng)建了一個新函數(shù):從文件指針當前位置讀取一頁FileGetPage(),這個函數(shù)一次性最大能夠讀取一個Page大小的文件。然后,在FileRead函數(shù)里判斷,如果要讀取的文件大小不足一個Page,就用memcpy()這個庫函數(shù)將文件里要讀取的內(nèi)容直接拷貝到緩沖區(qū);如果要讀取的文件超過一個Page,就計算出有N個Page,然后循環(huán)N次調(diào)用FileGetPage(),最后將不足一個Page的部分用memcpy()這個庫函數(shù)去拷貝。
根據(jù)相同的思路,又創(chuàng)建了一個新函數(shù):從文件指針當前位置寫入一頁FileWritePage(),并對ZLG—FS原來的FileWrite()函數(shù)進行了修改。通過實驗發(fā)現(xiàn),這樣修改以后,大大提高了文件系統(tǒng)的讀寫速度。原來讀取一個幾兆的文件需要半個多小時,現(xiàn)在不到一分鐘就可以完成了。
2.7 目錄管理的程序
Dir.c文件是關于FAT文件系統(tǒng)的目錄基本操作程序,主要包括:用戶文件/目錄名轉(zhuǎn)換為系統(tǒng)名,獲取FDT所在目錄的開始簇號及系統(tǒng)內(nèi)名稱,獲取指定目錄的驅(qū)動器(驅(qū)動器號為0、1、2等),改變當前邏輯盤,獲取指定目錄開始簇號,建立目錄,刪除目錄,改變當前目錄。這里面有幾個函數(shù)作過微小的修改,在此不細述。
2.8 文件系統(tǒng)在嵌入式系統(tǒng)上面的
在智能中,使用的嵌入式系統(tǒng)是μC/OS—II。正好ZLG—FS提供了其文件系統(tǒng)在μC/OS—II上面的移植程序,就是文件OSFile. c,該文件里面的函數(shù)和File.c里面的函數(shù)功能類似,只不過都打上了μC/OS—II系統(tǒng)的烙印,這些函數(shù)都通過調(diào)用Together(a,b,c)來完成對文件的一些操作。Together(a,b,c)是為簡化接口函數(shù)編寫的一個宏。最后一個函數(shù)是OSFileTask(),該函數(shù)是在系統(tǒng)主程序里調(diào)用的,作用是創(chuàng)建一個文件系統(tǒng)服務任務,對文件的所有操作都可以在該任務里以命令的形式被執(zhí)行。這一模塊的程序基本不需要修改。

結(jié)語
在整個文件系統(tǒng)的移植過程中,首先要將文件系統(tǒng)里的程序全部吃透、消化,然后再根據(jù)自己的需要進行修改,邊修改邊做實驗,通過這個過程還可以學習他人好的編程方法。移植完后,通過實驗驗證了的移植效果良好、系統(tǒng)穩(wěn)定。

本文引用地址:http://m.butianyuan.cn/article/201610/306067.htm

上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉