<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM7系統中實(shí)現CF卡存儲文件系統設計

ARM7系統中實(shí)現CF卡存儲文件系統設計

作者: 時(shí)間:2016-10-15 來(lái)源:網(wǎng)絡(luò ) 收藏

隨著(zhù)性能的不斷提高,越來(lái)越廣泛。但是目前市場(chǎng)上的大型商用嵌入式實(shí)時(shí)系統,價(jià)格昂貴,而且都針對特定的硬件平臺。對于中小型系統開(kāi)發(fā),購買(mǎi)商用實(shí)時(shí)系統并不劃算。 目前我們正著(zhù)手將嵌入式系統軟件應用于汽車(chē)衛星導航儀系統的一步開(kāi)發(fā)。傳統的并不包括文件系統,而我們要實(shí)現的文件系統需要在車(chē)輛導航系統中實(shí)現地圖數據文件的讀寫(xiě)。因此它既要支持與MS-DOS兼容的文件系統也要支持其它類(lèi)型的文件系統。

本文引用地址:http://dyxdggzs.com/article/201610/307294.htm

另一方面,從數碼相機到MP3播放機,從掌上電腦到數碼攝像機,CF(CompactFlash)卡由于具有體積小、兼容性強、價(jià)格相對低廉等諸多優(yōu)點(diǎn),在數碼設備上的應用越來(lái)越廣泛。但若想在CF卡與PC之間傳遞數據,通常不得不借助于專(zhuān)門(mén)的讀卡器,這給PC的用戶(hù)帶來(lái)了不小的麻煩。 CompactFlash卡全稱(chēng)為“標準閃存卡”,簡(jiǎn)稱(chēng)“CF卡”。CF卡的應用空間比較廣,最常見(jiàn)的是在數碼照相機中用于照片的存儲。由于CF卡內部采用模擬硬盤(pán)的設計,使得CF卡可以比較容易地通過(guò)IDE接口實(shí)現與電腦的連接,一定程度上可以起到移動(dòng)存儲的作用。 一般的嵌入式系統不會(huì )提供讀寫(xiě)CF卡的接口,所以需要在文件系統中專(zhuān)門(mén)設計一個(gè)。

1 基本原理

CF卡的存取方式有三種:Memory方式、I/O方式以及True IDE方式。我們選擇的是True IDE方式。需要注意的是,當主機電源一直接通時(shí),拔插CF卡將會(huì )使其從原來(lái)的True IDE方式重新配置成PC Card ATA方式。所以要讓CF卡一直工作在True IDE,需要在電源加電啟動(dòng)時(shí)將OE輸入信號接地。此方式也支持8位存取,但我們選擇了16位存取。一次最多存取的扇區數可由命令碼Ech中的第47參數字決定。

CF卡跟硬盤(pán)的結構相同。在引導區中裝有用于啟動(dòng)系統的代碼,以及有關(guān)文件系統的重要信息,隨后是記錄所有磁盤(pán)空間的表,再下來(lái)就是根目錄,然后是所有其它的東西。引導扇區在其末尾處包含有分區表。此表包含了用以標示每個(gè)分區開(kāi)始和結束的表項,最多可以有四個(gè)分區,每個(gè)分區可包含不同的文件系統。緊隨引導區之后的是FAT(文件分配表),用來(lái)記錄設備中所有的磁盤(pán)空間的信息(此表與UNIX中的I-node表和空閑表具有相同的功能)。

設計軟件時(shí),同時(shí)考慮了通用性及可擴展性,目的在于使該文件系統無(wú)需分別修改便能夠對CF卡、IDE硬盤(pán)、RAM Disk、電子盤(pán)、SD等不同的存儲介質(zhì)進(jìn)行操作;讀出這些存儲介質(zhì)中的數據,并且可以將數據輸送到不同存儲設備上。

為了達到這些目的,我們針對不同CPU的不同處理方法,對硬件操作程序進(jìn)行分離,將設備有關(guān)的底層程序變成與設備無(wú)關(guān)的上層操作。這樣,當系統新增功能之后,不必更改每個(gè)子程序,只需要在某些接口文件的數據結構中添加或者更改數據項即可;又考慮到用戶(hù)對上層操作的透明性,我們采用面向對象的方法,上層結構中存取操作的driver結構(含read、write數據項)是虛擬的,在底層才將它具體化為CF卡的讀寫(xiě)扇區命令(操作碼為:20h、30h)。

2 系統設計實(shí)現

根據上述原理,可完成軟件設計,分為六個(gè)主要部分。

其中,CF卡設計的關(guān)鍵是CF卡的存取操作函數所采用的命令碼有些不同。另外,我們使用對象來(lái)代表CF卡設備驅動(dòng)程序。該驅動(dòng)程序對象對于用戶(hù)是部分不透明的,數據項包括讀寫(xiě)函數的指針,這些函數由文件系統程序輸出(包括兩部分函數,用戶(hù)可見(jiàn)API函數調用和用戶(hù)不見(jiàn)驅動(dòng)存取函數)。此對象的數據結構聲明如下:

typedef struct CF_XFILE_DRIVER{

BYTE driver_name; /*介質(zhì)標示;CF卡、IDE硬盤(pán)、Flash卡、RAMDISK等,刪除驅動(dòng)的話(huà),需要重新記錄DRIVER號*/

...... /*IRP處理函數*/

}CF_XFILE_DRIVER;

如果有多個(gè)CF卡,需要用另外一個(gè)特定的數據結構Next_Driver來(lái)把它們水平連接在一起。然后,用鏈表來(lái)管理這些數據結構,管理方式類(lèi)似于 WDM(Windows Driver Model)。

3 測試分析

經(jīng)過(guò)調試運行,該文件系統性能良好。與我們之前已經(jīng)移植過(guò)的Nucleus、μC/OS-II、UNIX的操作系統的文件系統相比,本文介紹的文件系統可移植性更強;除了文中著(zhù)重介紹的CF卡,經(jīng)過(guò)對底層驅動(dòng)的簡(jiǎn)單修改就可以應用于其它存儲介質(zhì)如RAMdisk、IDE硬盤(pán)、Flash等(其中IDE硬盤(pán)和Flash也已經(jīng)調試成功)。另外,本文介紹的文件系統對硬件平臺的配置要求降低,并且對于文件操作的運行速度并未減慢。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>