![基于uTenux的fatfs文件系統(tǒng)移植本科畢業(yè)論文設(shè)計_第1頁](http://file4.renrendoc.com/view/e07d16fbb425c0bad8a9ae95c0bedf2c/e07d16fbb425c0bad8a9ae95c0bedf2c1.gif)
![基于uTenux的fatfs文件系統(tǒng)移植本科畢業(yè)論文設(shè)計_第2頁](http://file4.renrendoc.com/view/e07d16fbb425c0bad8a9ae95c0bedf2c/e07d16fbb425c0bad8a9ae95c0bedf2c2.gif)
![基于uTenux的fatfs文件系統(tǒng)移植本科畢業(yè)論文設(shè)計_第3頁](http://file4.renrendoc.com/view/e07d16fbb425c0bad8a9ae95c0bedf2c/e07d16fbb425c0bad8a9ae95c0bedf2c3.gif)
![基于uTenux的fatfs文件系統(tǒng)移植本科畢業(yè)論文設(shè)計_第4頁](http://file4.renrendoc.com/view/e07d16fbb425c0bad8a9ae95c0bedf2c/e07d16fbb425c0bad8a9ae95c0bedf2c4.gif)
![基于uTenux的fatfs文件系統(tǒng)移植本科畢業(yè)論文設(shè)計_第5頁](http://file4.renrendoc.com/view/e07d16fbb425c0bad8a9ae95c0bedf2c/e07d16fbb425c0bad8a9ae95c0bedf2c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
緒論1.1實時操作系統(tǒng)簡介1.1.1實時操作系統(tǒng)的概念實時操作系統(tǒng)(Real-timeOperationSystem,RTOS):系統(tǒng)能夠及時響應(yīng)外部事件的請求,在規(guī)定的時間內(nèi)完成對該事件的處理,并控制所有實時任務(wù)協(xié)調(diào)一致的運(yùn)行的嵌入式操作系統(tǒng)。在工業(yè)控制、航空航天、實時檢測等流程控制要求非常精確的領(lǐng)域,必須要在指定的時間內(nèi)做出指定的響應(yīng),這時就需要實時操作系統(tǒng)來控制。我們常常說的嵌入式操作系統(tǒng)都是嵌入式實時操作系統(tǒng),比如uTenux、uC/OS-II。1.1.2常見的實時微控制器操作系統(tǒng)及其對比1.uTenux微控制器操作系統(tǒng)uTenux是一款優(yōu)秀的開源免費(fèi)的實時微控制器操作系統(tǒng),是由大連悠龍軟件科技有限公司開發(fā)與維護(hù)。Tenux是由T-EngineLinux的縮寫構(gòu)成,Tenux具有(a)T-Engine的開源高實時性內(nèi)核T-Kernel為內(nèi)核;(b)Linux上豐富的開源中間件為中間件;(c)Eclipse+GNU開源開發(fā)工具為基礎(chǔ)工具;(d)打造適合中國電子產(chǎn)品市場的開源嵌入式實時操作系統(tǒng)及方便的集成開發(fā)環(huán)境。uTenux適用于微控制器(CortexM/ARM7,ROM:大于64K),它的內(nèi)核是uT-Kernel,具有豐富緊湊的中間件,比如FATFS、LWIP、FLTK。適用產(chǎn)品:小型物聯(lián)網(wǎng)控制終端,比如機(jī)器人、智能儀表、小型數(shù)控機(jī)床、PLC、相機(jī)等。它的特點(diǎn)有:所有源碼公開、完全免費(fèi)占有日本60%市場的成熟實時微內(nèi)核支持函數(shù)和軟中斷兩種方式搶占式實時多任務(wù)操作系統(tǒng)不需要MMU,占用ROM/RAM少可以支持所有32位ARM7/9和CortexM系列的微控制器可配置任意多個任務(wù)、任務(wù)的優(yōu)先級最多255個2.uCOS微控制器操作系統(tǒng)uC/OSII(MicroControlOperationSystemTwo)是一個可以基于ROM運(yùn)行的、可裁減的、搶占式、實時多任務(wù)內(nèi)核,具有高度可移植性,特別適合于微處理器和控制器,是和很多商業(yè)操作系統(tǒng)性能相當(dāng)?shù)膶崟r操作系統(tǒng)(RTOS)。為了提供最好的移植性能,uC/OSII最大程度上使用ANSIC語言進(jìn)行開發(fā),并且已經(jīng)移植到近40多種處理器體系上,涵蓋了從8位到64位各種CPU(包括DSP)。uC/OSII可以簡單的視為一個多任務(wù)調(diào)度器,在這個任務(wù)調(diào)度器之上完善并添加了和多任務(wù)操作系統(tǒng)相關(guān)的系統(tǒng)服務(wù),如信號量、郵箱等。其主要特點(diǎn)有公開源代碼,代碼結(jié)構(gòu)清晰、明了,注釋詳盡,組織有條理,可移植性好,可裁剪,可固化。內(nèi)核屬于搶占式,最多可以管理60個任務(wù)。從1992年開始,由于高度可靠性、魯棒性和安全性,uC/OSII已經(jīng)廣泛使用在從照相機(jī)到航空電子產(chǎn)品的各種應(yīng)用中。3.uTenux和ucos的對比(1)uTenux有固定和可變尺寸內(nèi)存池管理;ucos只有固定尺寸內(nèi)存池。(2)uTenux的郵箱支持消息隊列和任務(wù)等待隊列,因此發(fā)送多個消息都可以;ucos的郵箱只能發(fā)送一條消息,很簡單。(3)uTenux中有專門定義中斷處理程序的系統(tǒng)調(diào)用-tk_def_int,很方便,而ucos中就沒有。(4)uTenux有Trace、Hook等調(diào)試功能,而ucosii沒有。(5)uTenux的任務(wù)堆棧等需要內(nèi)存的地方,可以由系統(tǒng)自動分配也可以開發(fā)人員手工分配;但ucos只能手工分配。(6)uTenux的任務(wù)、信號量等系統(tǒng)對象采用ID方式實現(xiàn),用戶看不到內(nèi)部的數(shù)據(jù)結(jié)構(gòu),對于安全性比較好,使用也方便;而ucos是用戶定義每個系統(tǒng)對象的變量。(7)uTenux的任務(wù)間通信機(jī)制比ucos多了好幾種,比如集合點(diǎn)端口等,而且每個通信機(jī)制都支持任務(wù)隊列和消息隊列。(8)uTenuxV1.5的易用性沒有ucos的強(qiáng),幸好uTenux已經(jīng)意識到自己的問題,向ucos的易用性學(xué)習(xí),在模仿中超越對手。(9)uTenux終身開源免費(fèi),無論是學(xué)習(xí)、商用、修改再發(fā)布,而ucos只有學(xué)習(xí)時是開源免費(fèi)的,商用必須付費(fèi)。綜上所述,學(xué)習(xí)uTenux的意義大于ucos。1.2嵌入式文件系統(tǒng)簡介1.2.1文件系統(tǒng)概述文件系統(tǒng)是操作系統(tǒng)的重要組成部分,用于控制對數(shù)據(jù)、文件及設(shè)備的存儲[2]。它提供對文件和目錄的分層組織形式、數(shù)據(jù)緩沖以及對文件的存儲權(quán)限的控制。文件系統(tǒng)必須提供必要的用來創(chuàng)建、刪除文件、讀文件和寫文件等相應(yīng)的系統(tǒng)調(diào)用。文件的存儲通過目錄完成,所以對目錄的操作是文件系統(tǒng)功能的一部分,,文件系統(tǒng)應(yīng)具有以下功能:=1\*GB2⑴提供對文件和目錄的分層組織形式;=2\*GB2⑵建立與刪除文件的能力;=3\*GB2⑶文件的動態(tài)增長和數(shù)據(jù)保護(hù)。硬盤的出現(xiàn)推動了針對桌面操作系統(tǒng)的文件系統(tǒng)的發(fā)展,同樣,嵌入式存儲設(shè)備特別是flash的出現(xiàn),也推動了嵌入式文件系統(tǒng)的發(fā)展。1.2.2嵌入式文件系統(tǒng)一般體系結(jié)構(gòu)在嵌入式文件系統(tǒng)中,嵌入式系統(tǒng)可以針對特殊的目的定制,特別是隨著ASOS(為應(yīng)用定制的嵌入式操作系統(tǒng))的發(fā)展,對嵌入式操作系統(tǒng)的系統(tǒng)功能完整性和可伸縮性提出了更高的要求。所以不得不采取一種靈活的系統(tǒng)體系結(jié)構(gòu),對于操作系統(tǒng)來說,文件系統(tǒng)是一個獨(dú)立的子包含的整體,可以靈活的加載和卸載,這一切操作對操作系統(tǒng)內(nèi)核的功能沒有任何影響。嵌入式文件系統(tǒng)系統(tǒng)體系結(jié)構(gòu)從上到下一般有3層,如圖1.1所示。圖1.1嵌入式操作系統(tǒng)體系結(jié)構(gòu)最上一層是文件系統(tǒng)的核心,使文件系統(tǒng)實現(xiàn)的核心算法,提供了用戶可見的所有API函數(shù),以供用戶操作數(shù)據(jù),這一層是文件系統(tǒng)功能的集合。第二層是高速緩沖管理,高速緩沖區(qū)的大小直接關(guān)系到文件系統(tǒng)的處理效率,高效的緩沖區(qū)處理算法能大幅提高數(shù)據(jù)的處理效率;同時它為文件系統(tǒng)提供了與硬件無關(guān)的接口,為文件系統(tǒng)的層次性提供了基礎(chǔ)。最下面一層是設(shè)備驅(qū)動程序,涉及到具體的硬件。設(shè)備驅(qū)動程序的另一個重要任務(wù)就是提供統(tǒng)一設(shè)備驅(qū)動接口。文件系統(tǒng)和操作系統(tǒng)內(nèi)核的關(guān)系主要體現(xiàn)在三方面:實時時鐘、信號量和中斷管理。用時鐘實現(xiàn)外設(shè)任務(wù)的等待延時;用信號量實現(xiàn)外設(shè)的同步和互斥;用中斷管理機(jī)制管理外設(shè)的中斷處理程序。1.2.3文件系統(tǒng)概述目前,嵌入式文件系統(tǒng)解決方案比較多,由于嵌入式設(shè)備的多樣性,相應(yīng)文件系統(tǒng)的實現(xiàn)也有針對各種設(shè)備的,如只讀存儲器、可讀存儲器、Flash存儲器等。嵌入式文件系統(tǒng)也是要針對嵌入式操作系統(tǒng)的。1.FatFSFatFS是一個開源免費(fèi)通用的文件系統(tǒng)模塊,用于在小型嵌入式系統(tǒng)中實現(xiàn)FAT文件系統(tǒng)。FatFs的編寫遵循ANSIC,因此不依賴于硬件平臺。它可以嵌入到便宜的微控制器中,如8051、PIC、AVR、SH、Z80、H8、ARM等等。它是window兼容的FAT文件系統(tǒng),平臺依賴性小,易于移植,代碼和工作區(qū)占用非常小,有多種配置選項。通過配置FatFS可以使得FatFS占用的RAM達(dá)到44字節(jié),代碼空間的占用可以小到2K-4K,在這樣小的空間中它還能支持FAT32,這是以文件的寫功能的限制為代價的。FatFS是標(biāo)準(zhǔn)FAT文件系統(tǒng)的小型嵌入式文件系統(tǒng),它是一個自由軟件,可以用于教育、研究、商業(yè)。在使用過程中不用擔(dān)心被限制。用戶可以修改,重新發(fā)布以個人的身份。但是必須在源代碼中包含這個版權(quán)申明。文件分配表FAT(FileAllocationTable)用來跟蹤硬盤上每個文件的數(shù)據(jù)庫,而FAT表存儲關(guān)于簇的信息。FAT表示microsoft在FAT文件系統(tǒng)中用于磁盤數(shù)據(jù)(文件)索引和定位引進(jìn)的一種鏈?zhǔn)浇Y(jié)構(gòu)。在FAT文件系統(tǒng)中,文件的存儲依照FAT表制定的簇鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)來進(jìn)行。同時,F(xiàn)AT文件系統(tǒng)將組織數(shù)據(jù)時使用的目錄也抽象為文件,以簡化對數(shù)據(jù)的管理。FAT分區(qū)格式是microsoft最早支持的分區(qū)格式,依據(jù)FAT表中的每個簇鏈的所占位數(shù)分為FAT12、FAT16、FAT32三種形式,但其基本存儲方式是相似的。如圖1.2所示。圖1.2FatFs模塊結(jié)構(gòu)2.uC/FSuC/FS是uCOS的文件系統(tǒng),它是由Micrium公司新開發(fā)的一個產(chǎn)品,主要應(yīng)用在使用uCOS內(nèi)核的嵌入式系統(tǒng)中。uC/FS是一個用于能提供基礎(chǔ)訪問功能的FAT格式的文件系統(tǒng),是一個高效率的庫,為高速、多功能及內(nèi)存使用進(jìn)行優(yōu)化。它用ANSIC編寫,由不同的層次結(jié)構(gòu)組成,包括API層、文件系統(tǒng)層、邏輯區(qū)塊層、設(shè)備驅(qū)動和硬件層??傊谏鲜龅那度胧轿募到y(tǒng)中,F(xiàn)atFS和uC/FS都用于小容量閃存設(shè)備,功能都比較齊全。但是uC/FS是屬于擁有知識產(chǎn)權(quán)的技術(shù),是商業(yè)產(chǎn)品,而FatFS則完全是開源免費(fèi)的,用戶可以隨時下載所有全代碼,更改和再發(fā)布。隨著NANDFAlsh作為嵌入式系統(tǒng)中大容量存儲介質(zhì)的普及應(yīng)用,F(xiàn)atFS文件系統(tǒng)作為開源代碼的項目,得到芯片產(chǎn)商,項目開發(fā)人員的一致好評。所以在本項目中選擇FatFS作為目標(biāo)文件系統(tǒng)。1.3嵌入式文件系統(tǒng)的必要性嵌入式系統(tǒng)過去主要用于工業(yè)控制領(lǐng)域,對效率的比較高,對于數(shù)據(jù)處理不夠重視,引入文件系統(tǒng)不但沒有必要而且會降低效率,所以很多嵌入式系統(tǒng)應(yīng)用都沒有加載操作系統(tǒng)。隨著嵌入式處理器性能的不斷升級,嵌入式系統(tǒng)的功能不斷加強(qiáng),用戶的需求也和功能復(fù)雜度的增加,許多嵌入式系統(tǒng)都面臨著處理大量數(shù)據(jù)的問題;另外對于應(yīng)用程序開發(fā)人員直接訪問內(nèi)存具有很大的風(fēng)險性,需要對內(nèi)存的訪問進(jìn)行封裝。綜上所述在嵌入式操作系統(tǒng)內(nèi)核和應(yīng)用程序之間加一個文件系統(tǒng)成為必然趨勢。2uTenux實時操作系統(tǒng)uTenux實時操作系統(tǒng)的體系結(jié)構(gòu)如圖2.1所示。圖2.1uTenux實時操作系統(tǒng)的體系結(jié)構(gòu)Board:為uTenux所支持的處理器有ARM7、ARM9、CortexMx(x為0-4),用到的外設(shè)環(huán)境有通用輸入輸出端口(GPIO)、同步串口(SPI)、異步串口(UART)、存儲設(shè)備(NandFlash/SD)、USB接口等。uT/Kernel:為uTenux的核心部分,主要包括了三個部分uT/OS是操作系統(tǒng)內(nèi)核,包含了系統(tǒng)調(diào)用的所有API函數(shù);uT/SM是終端函數(shù),設(shè)備管理函數(shù);uT/DS為調(diào)試所需要的函數(shù),主要包括內(nèi)核狀態(tài)查詢函數(shù);uT/Lib:為操作系統(tǒng)移植相關(guān)部分,uT/CPU指的是系統(tǒng)的啟動代碼,執(zhí)行CPU的初始化;uT/DEV這的是開發(fā)板上一系列外設(shè)的的初始化和配置文件;uT/TM指的是串口打印函數(shù),這是為了開發(fā)人員方便使用而設(shè)置的。StandCLib:標(biāo)準(zhǔn)的C語言庫,uTenux操作系統(tǒng)支持標(biāo)準(zhǔn)的C語言庫。目前支持C99標(biāo)準(zhǔn)庫。uT/Subass:是uTenux上的一系列中間件,介于應(yīng)用程序和操作系統(tǒng)之間。包括GUI圖形界面;FatFS文件系統(tǒng);LWIP網(wǎng)絡(luò)模塊等等;IDE/ICE:分別表示uTenux所支持的開發(fā)環(huán)境,燒寫工具等。3FatFS文件系統(tǒng)的移植3.1FAT協(xié)議介紹3.1.1FAT協(xié)議概述每個分區(qū)(卷)都是一個獨(dú)立的文件系統(tǒng);FAT文件系統(tǒng)將分區(qū)分為四個區(qū)域,保留區(qū)、FAT表區(qū)、目錄區(qū)、數(shù)據(jù)區(qū)。FAT表區(qū):FAT(FileAllocationTable)是文件分配表的簡稱,它是FAT文件系統(tǒng)最重要也是最根本的部分。文件分配表記錄了一個個鏈表,記錄了每個文件片段的直接后繼的地址,從而將一個個的文件片段連接起來,形成一個完整的文件。一個FAT鏈表記錄了一個完整的文件。為了便于對數(shù)據(jù)的管理,F(xiàn)AT文件系統(tǒng)將目錄也抽象為文件,這個目錄下的所有文件稱為這個目錄文件的內(nèi)容。FAT文件系統(tǒng)存儲文件的基本單位是簇,也就是說一個文件片段就是一個簇。簇是文件系統(tǒng)中數(shù)據(jù)區(qū)的概念,一個分區(qū)(卷)中簇的多少,決定了這個文件系統(tǒng)中文件分配表中每個一個簇鏈所占用的位數(shù),根據(jù)文件分配表每一個簇項所占用的位數(shù)將文件系統(tǒng)分為FAT12、FAT16、FAT32三種形式,但原理基本相同。一個簇包含2的n次冪個扇區(qū),每個扇區(qū)是512個字節(jié)或者是512的倍數(shù)。扇區(qū)是在文件系統(tǒng)中可以統(tǒng)一使用的邏輯地址。保留區(qū):保留區(qū)位于整個卷的最前面,記錄了這個文件系統(tǒng)的一些基本的參數(shù),比如扇區(qū)的大小,簇的大小,文件系統(tǒng)的類型,F(xiàn)AT表是否有備份,每張F(tuán)AT表的大小,目錄區(qū)的大小等。目錄區(qū):如果說FAT表區(qū)是記錄的每個簇的直接后繼的話,那么目錄區(qū)則記錄了這個鏈表的頭結(jié)點(diǎn),以及一些其他的文件屬性,每天記錄占用32個字節(jié)。數(shù)據(jù)區(qū):用來以簇為單位存放文件內(nèi)容。一個文件是以鏈表的形式存放在卷中,數(shù)據(jù)區(qū)的每個簇都是這個鏈表一個結(jié)點(diǎn)的上內(nèi)容。綜上,保留區(qū)記錄了整個文件系統(tǒng)基本參數(shù),以及剩余簇的數(shù)量。FAT表區(qū)充當(dāng)了一個鏈表的next結(jié)點(diǎn)。目錄區(qū)記錄了每一個文件和目錄的基本屬性,以及每個文件的開始簇號。數(shù)據(jù)區(qū)存放了每一個結(jié)點(diǎn)的內(nèi)容。每次的文件訪問,文件系統(tǒng)都會從目錄區(qū)的第一條(根目錄)開始讀取,查找鏈表進(jìn)入文件或選擇指定的文件。3.1.2FAT保留區(qū)保留區(qū)位于分區(qū)(卷)的第一個扇區(qū),同時也屬于FAT文件系統(tǒng)基本區(qū)域的保留區(qū)。這個扇區(qū)又叫做“啟動扇區(qū)”、“保留扇區(qū)”、“0扇區(qū)”。眾多的說法都是一個意思,該扇區(qū)是FAT卷的第一個扇區(qū)。這個區(qū)域最重要的就是BPB(BIOSParameterBlock),F(xiàn)AT32的BPB內(nèi)容和FAT12、FAT16的內(nèi)容在BPB_Toset32區(qū)域以前完全一致,而從偏移36開始它們的內(nèi)容才有所區(qū)別,這么做是為了啟動扇區(qū)中存放一個完整的FAT12、FAT16或FAT32的BPB內(nèi)容,以達(dá)到最好的兼容性。表3.1FAT保留區(qū)各字段含義名稱偏移byte大小byte描述BS_jmpBoot03跳轉(zhuǎn)指令,指向啟動代碼,有兩種形式BS_OEMName38標(biāo)志字符串,建議值為“MSWIN4.1”BPB_BytsPerSec112每個扇區(qū)的字節(jié)數(shù),512取得最好兼容性BPB_SecPerClus131每個簇的扇區(qū)數(shù),必須為2的n次冪,簇大小必須小于32kBPB_RsvdSecCnt142保留區(qū)中扇區(qū)的數(shù)目,F(xiàn)AT12/16為1,F(xiàn)AT32為32BPB_NumFATs161FAT表的份數(shù)。建議為2,這樣就會有一個備份FAT表BPB_RootEntCnt172在此卷中總共目錄的項數(shù),乘以32必須是512的倍數(shù)BPB_TotSec16192此卷中扇區(qū)總數(shù),若為0那么BPB_Tot32必須為非0BPB_Media211存儲介質(zhì)的類型,固定存儲介質(zhì)0xF8,移動的為0xF0BPB_FATSz16222一個FAT表所占用的扇區(qū)數(shù),對于FAT32為0BPB_SecPerTrk242每磁道的扇區(qū)數(shù),用于BIOS的0x13中斷BPB_NumHeads262磁頭數(shù),用于BIOS的0x13中斷BPB_HiddSec284在卷之前的扇區(qū)數(shù),用于BIOS的0x13中斷BPB_TotSec32324對于FAT32類型,為此卷的扇區(qū)總數(shù)結(jié)束標(biāo)志151010x55結(jié)束標(biāo)志251110xAA從偏移36開始FAT12/FAT16的內(nèi)容開始不同于FAT32,表3.2為FAT12/FAT16的內(nèi)容:表3.2FAT12/FAT16的內(nèi)容名稱偏移(byte)大小(byte)描述BS_DrvNum361用于BIOS中斷0x13得到磁盤驅(qū)動器參數(shù)BS_Reserved1371保留——供NT使用BS_BootSig381擴(kuò)展引導(dǎo)標(biāo)記,用于指明后期的3個域可用BS_VolID394卷標(biāo)序列號,此域往往由日期和時間組成,用于檢測磁盤BS_VolLab4311磁盤卷標(biāo),此域必須與根目錄中11字長的卷標(biāo)一致BS_FilSysType548文件系統(tǒng)類型標(biāo)記,此域為實際的字符串FAT32的內(nèi)容。如下表3.3所示。表3.3FAT32的內(nèi)容名稱偏移(byte)大小(byte)描述BPB_FATSz32364一個FAT表所占的扇區(qū)數(shù)BPB_ExtFlags402Bit0-3:不小于0的活動FAT數(shù)目BPB_FSVer422高位為主版本號,低位為此版本號BPB_RootClus444根目錄所在的第一個簇號,通常為2BPB_FSInfo482保留區(qū)中FAT32卷FSINFO結(jié)構(gòu)所占扇區(qū)數(shù),通常為1BPB_BkBootSec502保留區(qū)中引導(dǎo)記錄的備份數(shù)據(jù)所占的扇區(qū)數(shù),通常為1BPB_Reserved5212保留BS_DrvNum641同F(xiàn)AT12/16的定義BS_Reserved1651同F(xiàn)AT12/16的定義BS_BootSig661同F(xiàn)AT12/16的定義BS_VolID674同F(xiàn)AT12/16的定義BS_VolLab7111同F(xiàn)AT12/16的定義BS_FilSysType828同F(xiàn)AT12/16的定義,通常設(shè)為“FAT32”3.1.3FAT表區(qū)FAT表是文件系統(tǒng)一個重要的數(shù)據(jù)結(jié)構(gòu),每一個FAT表項綁定一個數(shù)據(jù)區(qū)的簇,即FAT表的表項數(shù)目與數(shù)據(jù)區(qū)的簇的數(shù)目相等,所以簇的數(shù)目決定了FAT表項所占的位數(shù),如占12位則文件系統(tǒng)為FAT12,占16位則為FAT16,占32位則為FAT32,其中不允許出現(xiàn)其他的數(shù)字。順序的第一個FAT表項對應(yīng)數(shù)據(jù)區(qū)的第一個簇,第二個表項對應(yīng)數(shù)據(jù)區(qū)的第二個簇……。就像每一袋鼠都有一個袋子一樣,都可以用來存放自己的后繼者。簇的袋子就是對應(yīng)的FAT表項。FAT表項相當(dāng)于鏈表的next結(jié)點(diǎn),那么文件片段簇4的直接后繼,就應(yīng)該讀取FAT表中的第4個表項,得到的值則為直接后繼的簇號。對于特殊的表項值進(jìn)行了如下定義。以FAT32為例,如表3.4所示。表3.4FAT表區(qū)各個字段的含義序號FAT表項值含義10x00000000表示本表項對應(yīng)的簇為空簇,為可用簇20x00000002~0xFFFFFFEF以用簇,表示本表項對應(yīng)的下一個簇的簇號30xFFFFFFF7表示本表項對應(yīng)的簇為壞簇40xFFFFFFF8置于FAT表的第一個表項,作為磁盤標(biāo)識符50xFFFFFFFF設(shè)置FAT表的第二個表項,表示第一個簇被占用60xFFFFFFF8~0xFFFFFFFF表示本表項對應(yīng)的簇為最后一個節(jié)點(diǎn)從表3.4可以看出,F(xiàn)AT表的第一和第二表項都有默認(rèn)值,作為識別使用,所以文件系統(tǒng)沒有簇0和簇1,簇的命名是直接從簇2開始的。3.1.4FAT目錄區(qū)所有鏈表的根源都來自于目錄區(qū),目錄區(qū)存放了一條條記錄,表示各個目錄和文件的基本屬性。每條記錄占32個字節(jié)。對于FAT32,目錄區(qū)和數(shù)據(jù)區(qū)沒有明顯的界線,數(shù)據(jù)和目錄是混合在一起的,每次寫數(shù)據(jù)時都是先用最小的空閑簇。每條記錄的各個字段的含義如表3.5所示。表3.5目錄區(qū)各個字段的含義名稱偏移(byte)大小(byte)描述DIR_Name011短文件名DIR_Attr111文件屬性:只讀(x01)、隱藏(0x02)、系統(tǒng)(0x04)、卷標(biāo)(0x08)、目錄(0x10)、歸檔(0x20)、長文件名(0x0F)DIR_NTRes121保留給WindowNT使用DIR_CrtTimeTenth131文件創(chuàng)建時間的毫秒戳,精度為2毫秒DIR_CrtTime142文件創(chuàng)建時間DIR_CrtDate162文件創(chuàng)建日期DIR_LstAccDate182最后訪問日期,只有日期DIR_FstClusHI202該目錄或文件的簇號的高位字DIR_WrtTime222最后寫的時間,文件被創(chuàng)建被認(rèn)做寫DIR_WrtDate242最后寫的日期,文件被創(chuàng)建被認(rèn)做寫DIR_FstClusLO262該目錄或文件簇號的低位字DIR_FileSize284文件大小,由32-byte雙字組成3.1.5FAT數(shù)據(jù)區(qū)文件是被分割成一個個的簇大小的片段,保存在數(shù)據(jù)區(qū)的不同地方。簇是文件存儲的基本單位,即使是一個只有一個字節(jié)的文件也要占用一個簇的空間。3.2FatFS文件系統(tǒng)的配置FatFS文件系統(tǒng)是高度可裁剪的,可以根據(jù)功能的需求,容量的需求,效率的需求,在ffconf.h中配置需要的功能。函數(shù)和緩沖區(qū)的配置選項有:_FS_TINY、_FS_READONLY、_FS_MINIMIZE、_USE_STRFUNC、_USE_MKFS、_USE_FORWARD、_USE_FASTSEEK。本地命名空間的配置選項有:_CODE_PAGE、_USE_LFN、_MAX_LFN、_LFN_UNICODE、_FS_RPATH。物理驅(qū)動的配置選項有:_VOLUMES、_MAX_SS、_MULTI_PARTITION、_USE_ERASE。系統(tǒng)配置的配置選項有:_WORD_ACCESS、_FS_REENTRANT、_FS_TIMEOUT、_SYNC_t、_FS_SHARE。_FS_TINY0:為正常模式(默認(rèn)),1:為微型模式。當(dāng)_FS_TINY被設(shè)置為1時,F(xiàn)atFs使用扇區(qū)緩沖來代替正常模式的下文件中的私有緩沖區(qū)。這樣可以為每一個文件結(jié)構(gòu)類型減少512個字節(jié)的空間開銷。并且還會移除一些功能函數(shù)。_FS_READONLY0:可讀可寫(默認(rèn)),1:只讀。設(shè)置_FS_READONLY為1時,將會移除關(guān)于寫的函數(shù),f_write,f_sync,f_unlink,f_mkdir,f_chmod,f_rename,f_truncateanduselessf_getfree_FS_MINIMIZE可設(shè)置為0~3。0為默認(rèn)值。_FS_MINIMIZE選項定義了文件系統(tǒng)的最小級別。通過移除一些函數(shù),將文件系統(tǒng)分為四個級別。0:支持所有功能1:f_stat,f_getfree,f_unlink,f_mkdir,f_chmod,f_truncateandf_renameareremoved。2:f_opendirandf_readdirareremovedinadditionto1。3:f_lseekisremovedinadditionto2。_USE_STRFUNC0:禁止(默認(rèn))1~2:使能。通過設(shè)置_USE_STRFUNC來使能和禁止字符串函數(shù)功能。_USE_MKFS0:禁止(默認(rèn))1:使能。通過_USE_MKFS來使能f_mkfs(格式化)函數(shù)。此時_USER_MKFS需要設(shè)置為1,并且_FS_READONLY需要設(shè)置為0。_USE_FORWARD0:禁止(默認(rèn))1:使能。通過設(shè)置_USER_FORWARD來使能f_forward函數(shù),需要設(shè)置_USER_FORWARD為1:,并且_FS_TINY設(shè)置為1_USE_FASTSEEK0:禁止(默認(rèn))1:使能。使能快速定位功能,需要設(shè)置_USE_FASTSEEK為1。_CODE_PAGE936:為簡體中文,0為ASCII。這個選項精確的規(guī)定了可以使用的OEM字符集,不正確的設(shè)置將會使文件打開失敗。_USE_LFN0~3可以用來設(shè)置,默認(rèn)為0。_USE_LFN用來選擇支持長文件名的方式。此處配置為1。0:禁止使用長文件名,_MAX_LFN和_LFN_UNICODE將不起作用。1:使能長文件名功能,使用BSS段的靜態(tài)緩沖區(qū)。重入功能將不能被使用。2:使能長文件名功能,使用動態(tài)的棧緩沖區(qū)。3:使能長文件名功能,使用動態(tài)的堆緩沖區(qū)。_MAX_LFN12~255可以被設(shè)置,用來表示最大長文件名的長度。長文件名的工作緩沖區(qū)占用(_MAX_LFN+1)*2字節(jié)。如果使能了長文件名,unicode操作函數(shù)ff_convert()和ff_wtoupper()必須被添加。如果使用了是堆緩沖區(qū),那么內(nèi)存控制函數(shù)ff_memalloc()和ff_memfree()必須被添加。_LFN_UNICODE0:ANSI/OEM(默認(rèn)),1:unicode。FatFsAPI要切換字符編碼形式為Union時,將LEN和LFN_UNICODE為1。_FS_RPATH0~2可以被設(shè)置,默認(rèn)為0。_FS_RPAH用來配置相對路徑的特性。0:禁止使用相對路徑,移除相關(guān)的函數(shù)。1:使能相對路徑特性,可以使用f_chdirve()和f_chdir()兩個函數(shù)。2:在1的基礎(chǔ)上增加了f_getcwd()函數(shù)。注意:讀取路徑函數(shù)f_readdir()將會受到這個選項的影響。_VOLUMES默認(rèn)為1。整個文件系統(tǒng)有幾個邏輯驅(qū)動器(分區(qū))。_MAX_SS512(默認(rèn))、1024、2048、4096。扇區(qū)被設(shè)置的最大字節(jié)數(shù)。在硬盤上將會一直被設(shè)置為512,但是一個大的分區(qū)可能會要求,比如在板上flash、軟盤、光盤。如果_MAX_SS大于512,那么disk_ioctl中的GET_SECTOR_SIZE必須生效。_MULTI_PARTITION0:單分區(qū),每個分區(qū)都會被綁定到一個屋里驅(qū)動號上。而且只能掛載第一個分區(qū)。1/2:使能多分區(qū)功能,每一個分區(qū)都會去試圖分開在VolToPart[]中。_USE_ERASE0:禁止(默認(rèn)),1:使能。使能扇區(qū)擦除功能,需要設(shè)置_USE_ERASE為1,且必須使disk_ioctl()函數(shù)中的CTRL_EARSE_SECTOR命令生效。_WORD_ACCESS0~1可以被設(shè)置,0為默認(rèn)值。_WORD_ACCESS選項定義了選擇哪一種存儲方式在FAT分區(qū)(卷)中來處理字操作。0為字節(jié)存儲,能夠兼容所有的平臺。1為字存儲。當(dāng)字節(jié)順序為大端或者沒有字對齊時,必須使用字節(jié)存儲。_FS_REENTRANT0:禁止(默認(rèn)),1:使能。_FS_REENTRANT選項用來配置FatFs的重入(線程安全訪問)功能模塊。0:禁止重入,_SYNC_t和_FS_TMEOUT失去作用。1:使能重入,用戶可以提供同步操作,ff_req_grant,ff_rel_grant,ff_del_syncobj函數(shù)必須被提供。_FS_TIMEOUT設(shè)置操作最大所允許的響應(yīng)時間,在_FS_TIMEOUT個滴答周期后,發(fā)送timeout信號。_SYNC_t操作系統(tǒng)依所依賴的關(guān)于同步操作的結(jié)構(gòu),比如有:HANDLE,OS_EVENT*,ID等等。_FS_SHARE0:禁止(默認(rèn)),大于0:一個文件所允許打開的次數(shù)。使能文件共享特性,需要設(shè)置_FS_SHARE為大于等于1的數(shù)。這個值將是所允許同時打開的文件數(shù)目。3.3FatFS文件系統(tǒng)結(jié)構(gòu)分析3.3.1FatFS模塊結(jié)構(gòu)FatFS文件系統(tǒng)由上下兩層組成,上層是文件系統(tǒng)的核心,通過實現(xiàn)文件系統(tǒng)的操作接口實現(xiàn)了文件系統(tǒng)的FAT原理。底層是文件系統(tǒng)的基礎(chǔ),主要定義了一些底層扇區(qū)的讀寫、及控制函數(shù)。如圖3.1所示。應(yīng)用程序文件系統(tǒng)層文件操作功能函數(shù)(ff.c)文件操作底層接口函數(shù)(diskio.c)文件操作功能函數(shù)(ff.c)文件操作底層接口函數(shù)(diskio.c)操作系統(tǒng)時間管理信號量操作時間管理信號量操作STDIOGPIO UART RTC 芯片、外設(shè)及其對應(yīng)的外設(shè)庫STDIOGPIO UART RTC 圖3.1FatFS模塊結(jié)構(gòu)3.3.2FatFS定義的結(jié)構(gòu)體FatFS文件系統(tǒng)用到了基本的四個結(jié)構(gòu)體類型,分別為FATFS、FIL、DIR、FILINFO。FATFS定義了文件系統(tǒng)的一些基本屬性,主要是文件系統(tǒng)保留區(qū)的的信息。fs_type0表示沒有掛載drv物理驅(qū)動器號csize每個簇的扇區(qū)數(shù)n_fats本文件系統(tǒng)共有幾個fat表wflag緩沖win[]寫滿標(biāo)識,如果為1的話必須回寫fsi_flagfsinfo結(jié)構(gòu)寫滿標(biāo)識,如果為1的話必須回寫id文件系統(tǒng)的掛載IDn_rootdir根目錄下的入口個數(shù)ssize每個扇區(qū)的字節(jié)數(shù),僅在_MAX_SS不等于512時有效_SYNC_t在多線程中實現(xiàn)同步操作的結(jié)構(gòu),只有在使能重入配置時才有效last_clust最后一個存儲的簇號,在只讀模式下無效free_clust空閑簇的數(shù)目,在文件系統(tǒng)中有專門的扇區(qū)來存放空閑的簇的數(shù)目,在只讀模式下無效fsi_sectorfsinfo結(jié)構(gòu)的扇區(qū),在只讀模式下無效cdir用來記錄當(dāng)前文件的起始簇號,在使能相對路徑時才有效n_fatnet最大的簇號fsize一張fat表所占用的扇區(qū)數(shù)fatbasefat表區(qū)的起始扇區(qū)號dirbase目錄區(qū)的起始扇區(qū)號database數(shù)據(jù)區(qū)的起始扇區(qū)號winsect當(dāng)前在win[]緩沖區(qū)中存放的扇區(qū)號win[]磁盤存儲窗口,微型文文件系統(tǒng)沒有這個緩沖區(qū)FIL定義了文件的讀寫信息,包括讀寫指針的位置,當(dāng)前所在簇,當(dāng)前扇區(qū),文件的大小等。fs指向自身所在的文件系統(tǒng)的指針id此文件系統(tǒng)掛載的IDflag文件狀態(tài)標(biāo)志padlfptr文件讀寫指針,0:表示文件剛打開fsize此文件的大小sclust文件的起始簇號,當(dāng)文件大小為0時,起始簇號也為0clust當(dāng)前所在的簇desct當(dāng)前的所在扇區(qū)號dir_sect扇區(qū)包含的目錄入口,只有在讀寫模式下才有效dir_ptr在win[]緩沖區(qū)中指向目錄入口的指針,只有在讀寫模式下才有效cltbl指向簇鏈接表的指針,當(dāng)文件打開時為null,只有在使能快速查找功能時才有效lockid文件鎖定號(在信號量表中的索引)buf[]文件的讀寫緩沖區(qū)DIR目錄結(jié)構(gòu)體定義了目錄的一些基本信息fs指向自身所在的文件系統(tǒng)的指針id此文件系統(tǒng)掛載的IDindex當(dāng)前讀寫索引號sclust起始簇號clust當(dāng)前所在簇的粗豪sect當(dāng)前扇區(qū)號dir在win[]緩沖區(qū)中指向短文件名得起始地址fn指向SFN的指針,指向短文件名lfn指向長文件名得工作緩沖區(qū),只有在使能長文件名的時候才可以使用lfn_idx最后一個匹配的長文件名索引號,0xFFFF:表示沒有長文件名,只有在使能長文件名得時候才能使用FILINFO文件的屬性結(jié)構(gòu)體,定義了文件的基本屬性,創(chuàng)建日期,修改日期,訪問日期等等fsize文件的大小fdate文件的修改日期ftime文件的修改時間fattrib文件的基本屬性fname[]短文件名lfname指向長文件名得指針lfsize記錄長文件名得長度3.4SD卡接口3.4.1SD協(xié)議SD卡是基于flash的存儲卡。SD卡和MMC卡的區(qū)別在于初始化的過程不同。SD卡的通信協(xié)議包括SD和SPI兩類。SD卡使用卡內(nèi)智能控制模塊進(jìn)行FALSH操作控制,包括協(xié)議、安全算法、數(shù)據(jù)存儲、ECC算法、缺陷處理和分析、電源管理、時鐘管理。SD卡結(jié)構(gòu)如圖3.2所示。SD卡Flash模塊SD卡控制芯片數(shù)據(jù)輸入/輸出Flash模塊SD卡控制芯片數(shù)據(jù)輸入/輸出SD總線/SPI總線接口 SD總線/SPI總線接口控制控制 圖3.2SD卡接口圖SD總線協(xié)議是基于命令和數(shù)據(jù)位流的方式的,有一個起始位開始,以一個停止位結(jié)束。命令——命令是開始操作的標(biāo)記。命令從主機(jī)發(fā)送一個卡(尋址命令)或所有連接的卡(廣播命令)。命令在CMD線上串行傳送。響應(yīng)——響應(yīng)是從尋址卡或所有連接的卡(同步)發(fā)送給主機(jī)用來響應(yīng)接受到的命令的標(biāo)記。命令在CMD線上串行傳送。響應(yīng)標(biāo)記(token)根據(jù)內(nèi)容不同具有四種格式,標(biāo)記長度。長度為48位或136位。數(shù)據(jù)塊的CRC算法采用16位的CCITT多項式。數(shù)據(jù)——數(shù)據(jù)可以通過數(shù)據(jù)線在卡和主機(jī)間雙向傳送。3.4.2SD命令SD卡的命令長度為48位,命令格式如下表3.6所示。表3.6命令結(jié)構(gòu)01bit5….bit0bit31…bit0bit6…bit01起始位Host命令編號參數(shù)CRC7結(jié)束位SD卡命令集分為基本命令、讀塊命令、寫塊命令、擦除命令、寫保護(hù)命令、鎖命令、應(yīng)用命令7類,每個類支持一個卡功能集合操作。用的命令如表3.7所示。表3.7常用的SD卡命令命令索引類型參數(shù)響應(yīng)縮寫描述CMD0bc--GO_IDLE_STATE重置所有卡到空閑狀態(tài)CMD8bcr[31:12]保留[11:8]電壓[7:0]模式R7SEND_IF_COND發(fā)送SD卡的接口環(huán)境ACMD41bcr[31:1]OCRR3SD_APP_OP_COND請求條件寄存器OCRCMD2bcr[31:0]數(shù)據(jù)位R2ALL_SEND_CID請求標(biāo)識寄存器CIDCMD3bcr[31:0]數(shù)據(jù)位R6SENG_ELATIVE_ADDR要求提供新的地址RCACMD7ac[31:16]RCA[15:0]數(shù)據(jù)位R1bSELEC/DESELECT_CARD選擇或者取消卡3.5FatFS文件系統(tǒng)的移植FatFS文件系統(tǒng)具有很好的移植性和層次性,能夠在所有的支持C標(biāo)準(zhǔn)系統(tǒng)下運(yùn)行。目前FatFS在微控制器領(lǐng)域廣泛應(yīng)用,相關(guān)的資源比較多。本節(jié)討論FatFS文件系統(tǒng)在uTenux上移植和一些注意事項。導(dǎo)體(ST)的STM32f407ZG,SD卡選擇的為MicroSD卡,容量為2G。把FatFS編譯進(jìn)uTenux內(nèi)核,然后通過J-Link燒寫到開發(fā)板SRAM中,復(fù)位加載內(nèi)核。本次移植工作采用的是宿主機(jī)+目標(biāo)板的開發(fā)模式。宿主機(jī)為PC+Win7,目標(biāo)板為意法半FatFs具備清晰的層次結(jié)構(gòu),這種層次結(jié)構(gòu)使得文件系統(tǒng)與硬件相關(guān)的部分都包含在diskio.c中,即只需要按照disk.h編寫出對應(yīng)的disk.c即可使文件系統(tǒng)運(yùn)行起來。3.5.1開發(fā)環(huán)境uT/Stdio本次移植工作是在uT/Studio[1]V3.1上進(jìn)行開發(fā)編譯的。在微控制器的開發(fā)過程中,大學(xué)生和小企業(yè)因為成本原因,不能購買商業(yè)軟件,這時可以使用悠龍軟件的開源免費(fèi)的開發(fā)環(huán)境工具-uT/Studio工具鏈,其中包含了Eclipse集成開發(fā)環(huán)境、ARM公司針對微控制器優(yōu)化的GNU編譯器及其二進(jìn)制工具集、MSYS最小POSIX系統(tǒng)工具集。推薦使用的仿真器是J-LinkICEV8,其中包括了FlashROM的燒寫工具和在線調(diào)試工具等。下載相關(guān)代碼:(1)從http://www.uloong.cc/cn/develop/tenux.htm下載uT/StudioV3.1安裝包,并參照軟件包中的uT-Studio_V3.0.00_C\uT-Studio_Edition\manual手冊進(jìn)行uT/Studio安裝。(2)從http://www.uloong.cc/cn/index.htm下載uTenuxV1.500R160源代碼。(3)從/fsw/ff/00index_e.html下載FatFsR0.09源代碼。(4)從意法半導(dǎo)體(ST)官網(wǎng)下載SD卡庫。3.5.2構(gòu)建移植環(huán)境將uTenuxV1.5工程導(dǎo)入uT/Studio中,建立相關(guān)目錄,如表3.8所示。表3.8新建目錄和文件序號目錄子目錄子目錄子目錄說明1include2sbs3midfatfsFatfs、sd卡頭文件4subass5midfatfs6build7app_stm32f4makefile8src源文件9diskio.c新建文件1.將FatFs源代碼和SD卡庫中的.h文件復(fù)制到include/sbs/midfatfs目錄下。將FatFs源代碼和SD卡庫中的.c文件復(fù)制到include/sbs/midfatfs目錄下。2.修改數(shù)據(jù)類型:為了使整個工程都遵循C99標(biāo)準(zhǔn),需要修改添加進(jìn)來的程序文件,并將之前的類型定義文件integer.h刪除,修改規(guī)則如表3.9所示。注意:(1)將所有源數(shù)據(jù)類型替換為對應(yīng)的目標(biāo)數(shù)據(jù)類型,注意不要將注釋或字符串替換。(2)將#include”integer.h”替換為#include”ts_basic.h”;將#include<stdio.h>替換為#include”ts_basic.h”;將option\*.c中#incliude“../ff.h”替換為#include“ff.h”。(3)將sdcard.c中bool類型的聲明刪除。(4)將integer.h文件刪除。需要修改的文件有\(zhòng)include\sbs\midfatfs\*.h,\subass\midfatfs\src\*.c,\subass\midfatfs\src\option\*.c。表3.9數(shù)據(jù)類型轉(zhuǎn)換標(biāo)準(zhǔn)序號類型1(源)類型2(源)類型3(源)C99類型(目標(biāo))1intINT-int32_t2unsignedintUINT-uint32_t3charCHAR-int8_t4unsignedcharUCHARBYTEuint8_t5shortSHORT-int16_t6unsignedshortUSHORT-uint16_t7unsignedshortWORDWCHARuint16_t8longLONG-int32_t9unsignedlongULLONGDWORDuint32_t10BOOL--Bool11FALSE--false12TRUE--true修改宏和條件編修改編譯條件使得能將FatFs編譯到內(nèi)核中,用到了makefile的語法的基本知識,由于冗長此處略寫,可以參照FatFs移植文檔。3.5.3初始化diskio_initialize函數(shù)用來初始化/識別指定的存儲設(shè)備,識別成功才能執(zhí)行后續(xù)操作,假如識別失敗,則報錯自動退出。通過傳進(jìn)來的參數(shù)判斷此時要初始化的磁盤物理驅(qū)動號,此參數(shù)用于多分區(qū),或者存儲設(shè)備比較多時,假如為單分區(qū),這個參數(shù)默認(rèn)為0,多分區(qū)時多見于用switch語句進(jìn)行選擇,此處用if語句進(jìn)行判斷。選擇了指定的驅(qū)動器號0,然后就是執(zhí)行對SD卡的識別和初始化操作,讀取相關(guān)的信息。代碼如下:/**FunctionName:disk_initialize*CreateDate:2013/05/08*Author:Houlw*Description:diskinitialize*Param :uint8_tdrv:Physicaldrivenmuber(0..)*ReturnCode:DRESULT*/DSTATUSdisk_initialize(uint8_tdrv){/*Physicaldrivenmuber(0..)*/SD_ErrorStatus;if(drv==0){Status=SD_Init();if(Status!=SD_OK){returnSTA_NOINIT;}else{Status=SD_GetCardInfo(&SDCardInfo);if(Status!=SD_OK){returnSTA_NOINIT;//RES_NOTRDY;}Status=SD_SelectDeselect((u32)(SDCardInfo.RCA<<16));if(Status!=SD_OK){returnSTA_NOINIT;}switch(SD_Mode){case0:/*dmamode*/Status=SD_EnableWideBusOperation(SDIO_BusWide_1b);if(Status!=SD_OK){returnRES_NOTRDY;}Status=SD_SetDeviceMode(SD_DMA_MODE);if(Status!=SD_OK){returnRES_NOTRDY;}break;case1:Status=SD_EnableWideBusOperation(SDIO_BusWide_1b);if(Status!=SD_OK){returnRES_NOTRDY;}Status=SD_SetDeviceMode(SD_INTERRUPT_MODE);if(Status!=SD_OK){returnRES_NOTRDY;}break;default:returnRES_NOTRDY;}return0;}}else{returnSTA_NOINIT;}}3.5.4讀寫函數(shù)讀寫函數(shù)向磁盤中讀出或?qū)懭霐?shù)據(jù),供上層函數(shù)調(diào)用。讀寫通過SD卡命令,來操作SD卡。有四個參數(shù),依次為磁盤驅(qū)動號、讀寫緩沖區(qū)、起始扇區(qū)號、讀寫的扇區(qū)個數(shù)。讀一個扇區(qū),則:Status=SD_ReadBlock(sector<<9,(u32*)(&buff[0]),BlockSize);讀多個代碼則:Status=SD_ReadMultiBlocks(sector<<9,(u32*)(&buff[0]),BlockSize,count);寫一個扇區(qū),則:Status=SD_WriteBlock(sector<<9,(u32*)(&buff[0]),BlockSize);寫多個扇區(qū),則:Status=SD_WriteMultiBlocks(sector<<9,(u32*)(&buff[0]),BlockSize,count);4移植結(jié)果的測試可以通過單元測試來檢測與文件系統(tǒng)相關(guān)的各個外設(shè)模塊、寄存器、變量值的正確性。通過集成測試來測試文件系統(tǒng)的各個功能函數(shù)使用的正確性,由于篇幅所限這里只列出部分測試代碼。本次測試主要針對的是文件系統(tǒng)的可用性,主要證明移植的正確性。測試的功能為輸出SD卡中根目錄下存在的文件,并輸出每個文件的前一部分內(nèi)容。SD卡中有3個文件:文件名為filename1,filename2,filename3。文件內(nèi)容依次為1.2.3…..,a.b.c.d…..,A.B.C.D….主要代碼如下:ercd=disk_initialize(0);if(ercd!=RES_OK){tm_putstring((UB*)"diskinitializeerror.\n");return;}else{tm_putstring((UB*)"diskinitializesuccess.\n");}ercd=f_mount(0,&fs);if(ercd!=RES_OK){tm_putstring((UB*)"FileMountreturn;}else{tm_putstring((UB*)"FileMount}if(f_opendir(&dirs,path)==FR_OK){while(f_readdir(&dirs,&finfo)==FR_OK){if(finfo.fattrib&AM_ARC){if(!finfo.fname[0]){break;}tm_putstring((UB*)"filename:");tm_putstring((UB*)finfo.fname);tm_putstring((UB*)"\n");#if_USE_LFNtm_putstring((UB*)"Longfilename:");tm_putstring((UB*)finfo.lfname);tm_putstring((UB*)"\n");#endifres=f_open(&fsrc,finfo.fname,FA_OPEN_EXISTING|FA_READ);br=1;a=0;tm_putstring((UB*)"Filetext:");for(a=0;a<512;a++){buffer[a]=0;}res=f_read(&fsrc,buffer,sizeof(buffer),&br);tm_putstring((UB*)buffer);tm_putstring((UB*)"\n");if(res||br==0){/*errororeof*/break;}f_close(&fsrc);}}}串口信息輸出如下圖4.1:圖4.1串口輸出信息5總結(jié)與展望文件系統(tǒng)作為操作系統(tǒng)的重要組成部分,決定了操作系統(tǒng)本身信息和用戶數(shù)據(jù)在存儲設(shè)備上的組織形式。隨著嵌入式系統(tǒng)的發(fā)展,越來越多的嵌入式系統(tǒng)需要處理大量的數(shù)據(jù),所以文件系統(tǒng)將是嵌入式系統(tǒng)應(yīng)用的一個必然趨勢。由于嵌入式存儲設(shè)備的特殊性、電源供給的不穩(wěn)定性和移動存儲的安全性等要求,嵌入式系統(tǒng)的重要性在嵌入式系統(tǒng)中愈加明顯。本論文基于SD卡實現(xiàn)了文件系統(tǒng)的基本操作,比如文件和目錄的基本操作,以及格式化等基本的SD卡操作,對系統(tǒng)的性能的提高有很大的作用。第一次實現(xiàn)FatFs在uTenux上的移植。本論文在研究FAT文件系統(tǒng)規(guī)范的基礎(chǔ)上,在嵌入式uTenux上移植了FatFs文件系統(tǒng),具有可讀寫,占用資源少,啟動速度快等優(yōu)良特點(diǎn)。實際應(yīng)用中還需要注意一些地方,增加文件系統(tǒng)多線程訪問和互斥訪問機(jī)制,增加時間管理等功能,以適應(yīng)嵌入式操作系統(tǒng)對文件系統(tǒng)功能要求的增強(qiáng)。
參考文獻(xiàn)[1]劉波文.ARMCortex–M3應(yīng)用開發(fā)實例詳解[M].北京:電子工業(yè)出版社,2011[6]孟博宇.STM32自學(xué)筆記[M].北京:北京航空航天大學(xué)出版社,2012[2]魏忠,蔡勇,雷紅衛(wèi).嵌入式開發(fā)詳解[M].北京:電子工業(yè)出版社,2003[3]王田苗.嵌入式系統(tǒng)設(shè)計與實例分析[M].北京:清華大學(xué)出版社,2003[4]張繼柯,谷青范.基于Flash的嵌入式文件系統(tǒng)設(shè)計與實現(xiàn)[J].工業(yè)控制計算機(jī),2011,24(4):84-86.[5]李世奇,董浩斌.基于FatFs文件系統(tǒng)的SD卡存儲器設(shè)計[J].測控技術(shù).2011,30(12):70-81.[6]林建民.嵌入式操作系統(tǒng)發(fā)展趨勢[J].計算機(jī)工程.2001,7(10):1-4[7]WolfW.Cybel-physicalsystems[J].IEEEComputer.2009,42(3):88-89[8]RosenblumM.TheDesignandImplementationofaLogStructuredFileSystem[J].TransactionsonComputerSystems.1992,10(8):25-30[9]毛永強(qiáng).基于日志結(jié)構(gòu)的嵌入式文件系統(tǒng)研究與應(yīng)用[D].華中師范大學(xué),2006[10]高永占,周洪利.基于SD卡的嵌入式文件系統(tǒng)的設(shè)計與實現(xiàn)[D].北京交通大學(xué),2010[11]ChaN.ELM-FATFileSyatemModule[EB/OL]./fsw/ff/ooindex_e.html[12]uTenux源代碼.http://www.uloong.cc/cn/index.htm[13]uT/Stdio安裝包.http://www.uloong.cc/cn/develop/tenux.htm[14]SD卡接口規(guī)范[S].V2.0[15]FAT規(guī)范[S].MicrosoftExtensibleFirmwareInitiativeFAT32FileSystemSpecificationVersion1.03MicrosoftCorporation
致謝在攻讀學(xué)士學(xué)位,特別是完成論文期間,很多人在多方面為我提供幫助和支持,值此論文結(jié)束之際,一并向他們表示真誠的感謝。首先,我衷心的感謝我的導(dǎo)師劉春貴,是他為我提供了學(xué)習(xí),研究的機(jī)會和工作平臺。在整個學(xué)習(xí)過程中,劉老師不僅從學(xué)術(shù)上、還是為人處世、個人發(fā)展及生活等方面給予我極大的關(guān)懷和支持。他淵博的知識、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、精益求精的工作作風(fēng)給我留下了深刻的印象,是我終生尊敬的師長、學(xué)習(xí)的榜樣。其次,我要深深的感謝大連悠龍公司的王紹斌,王曉東等老師,他們無私的知道也使我終生受益,與他們的探討和交流,給了我很多啟發(fā),使我受益非淺,感悟頗深。最后,衷心地感謝為我評閱論文而付出辛勤勞動的老師和學(xué)者們。
FatFsFileSystemMigrationBasedonuTenuxOperatingSystem Abstract:Withthedevelopmentofembeddedtechnology,especiallytheARMtechnologyconstantlyupdated,launchedthecortexserieschip,makingthegrowingcapabilitiesofembeddeddevices,andgraduallytransitiontotheeraofthesingle-chipmicrocontrollerera,haveaccesstothedatavolumeasignificantincrease,whichrequiresdatamanipulationlevelofclarity,improvedtransparency,maintainability,standardizationofinterfaces,portable,flexibleoperationanddatastoragereliabilityandsoputforwardhigherrequirements,soitisnecessarytointroducefilesystemtocompletethedatastorageandmanagementcapabilities,providinguserswithaccesstodatabyname,theinterface,thusavoidingtheapplicationdevelopersdirectaccessmemorybroughtinsecurity.ThisthesisisbasedonuTenuxoperatingsystemmigrationFatFSfilesystems,filesystemsarediscussedindetailtheimplementationoftheprinciple,bytransplantingsoFatFSinuTenuxoperatingsystems.Implementationfilesanddirectoriestocreate,open,read,write,close,etc.Keywords:microcontrollers;uTenux;FatFS;ARM基于C8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實現(xiàn)基于單片機(jī)的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測試儀的研制基于單片機(jī)的自動找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗臺控制器的研制基于單片機(jī)的軟起動器的研究和設(shè)計基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實時內(nèi)核設(shè)計及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計與研究基于單片機(jī)的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動檢測儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機(jī)的電能采集終端的設(shè)計和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號檢測儀基于單片機(jī)的電機(jī)運(yùn)動控制系統(tǒng)設(shè)計Pico專用單片機(jī)核的可測性設(shè)計研究基于MCS-51單片機(jī)的熱量計基于雙單片機(jī)的智能遙測微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實踐研究基于單片機(jī)的輪軌力檢測基于單片機(jī)的GPS定位儀的研究與實現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時控和計數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面污染測量儀的研制基于單片機(jī)的紅外測油儀的研究96系列單片機(jī)仿真器研究與設(shè)計基于單片機(jī)的單晶金剛石刀具刃磨設(shè)備的數(shù)控改造基于單片機(jī)的溫度智能控制系統(tǒng)的設(shè)計與實現(xiàn)基于MSP430單片機(jī)的電梯門機(jī)控制器的研制基于單片機(jī)的氣體測漏儀的研究基于三菱M16C/6N系列單片機(jī)的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機(jī)和DSP的變壓器油色譜在線監(jiān)測技術(shù)研究基于單片機(jī)的膛壁溫度報警系統(tǒng)設(shè)計基于AVR單片機(jī)的低壓無功補(bǔ)償控制器的設(shè)計基于單片機(jī)船舶電力推進(jìn)電機(jī)監(jiān)測系統(tǒng)基于單片機(jī)網(wǎng)絡(luò)的振動信號的采集系統(tǒng)基于單片機(jī)的大容量數(shù)據(jù)存儲技術(shù)的應(yīng)用研究基于單片機(jī)的疊圖機(jī)研究與教學(xué)方法實踐基于單片機(jī)嵌入式Web服務(wù)器技術(shù)的研究及實現(xiàn)基于AT89S
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 訪問學(xué)者申請書范文
- 2025年中國電熱電器實驗設(shè)備行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年中國彈性密封管件行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 2025年機(jī)車箱項目投資可行性研究分析報告
- 2025-2030年中國電磁式手用工具行業(yè)深度研究分析報告
- 2025-2030年中國羊毛拉鏈衫項目投資可行性研究分析報告
- 2025年度互聯(lián)網(wǎng)金融服務(wù)借款合同還款協(xié)議范本
- 2025年度合作社股權(quán)激勵方案合同
- 2025年度高科技企業(yè)股權(quán)質(zhì)押融資合同
- 2025年度文化產(chǎn)品交易會會展服務(wù)合同二零二五
- 二年級看圖寫話看圖寫話素材
- 政務(wù)服務(wù)一網(wǎng)通辦平臺解決方案
- 2022年全球及中國肥胖人口數(shù)量及肥胖帶來的危害分析:預(yù)計2025年中國超重及肥胖人數(shù)將突破2.65億人圖
- 2022年垃圾焚燒發(fā)電項目可行性研究報告
- 無菌技術(shù)操作-PPT課件
- 人教版小學(xué)五年級數(shù)學(xué)下冊教材解讀
- JTT888-2020公共汽車類型劃分及等級評定_(高清-最新)
- 某天然氣公司場站設(shè)備管理制度
- 臨時碼頭施工方案
- 汶川地震災(zāi)后恢復(fù)重建生產(chǎn)力布局和產(chǎn)業(yè)調(diào)整專項規(guī)劃
- 教師專業(yè)發(fā)展與職業(yè)生涯規(guī)劃優(yōu)秀課件
評論
0/150
提交評論