版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于CCCCS的Flash文件系統(tǒng)設(shè)計(jì)
摘要:在深入分析TI為開發(fā)DSP提供的RTS.LIB(RTS.SRC為源泉代碼)的基礎(chǔ)上,介紹對自定義的文件和設(shè)備的操作方法;設(shè)計(jì)一個(gè)簡易的Flash文件系統(tǒng),極大地方便了應(yīng)用編程。關(guān)鍵詞:DSPCC/CCSFlash文件系統(tǒng)1概述在開發(fā)DSP的應(yīng)用程序過程中,經(jīng)常需要處理一些數(shù)據(jù)文件。這些數(shù)據(jù)文件可以是實(shí)際采集到的數(shù)據(jù)集合,也可以是用模擬仿真軟件產(chǎn)生的數(shù)據(jù)集合,一般是以文件的形式存放在主機(jī)磁盤上的。一般的開發(fā)環(huán)境(如TI的CCS和CC)都提供了ANSIC標(biāo)準(zhǔn)操作文件格式,如打開一個(gè)文件fopen("盤符:\路徑\文件名",“打開模式”)。嵌入式系統(tǒng)一般都外掛Flash。我們希望能夠和讀寫主機(jī)磁盤文件一樣操作Flash讀寫時(shí)序等問題,使應(yīng)用編程人員可以把精力用在解決實(shí)際應(yīng)用問題上,從而提供一個(gè)良好的編程接口。同時(shí),在需要鍵盤、串口等設(shè)備的系統(tǒng)中,也希望提供一個(gè)簡易的API接口,如從鍵盤得到一個(gè)鍵,只需作如下操作,在執(zhí)行fopen("keyboard","讀")后,就可以用fread函數(shù)讀入一個(gè)字符。結(jié)合TI公司提供的DSP開發(fā)環(huán)境CC/CCS(CC針對3X系列,CCS針對5X和6X系列)和實(shí)際開發(fā)經(jīng)驗(yàn),提供上述問題的解決方案,并成功應(yīng)用到我們的產(chǎn)品中。2CC/CCS文件操作機(jī)制TI公司為其TMS320C3X系列DSP提供了一個(gè)開發(fā)環(huán)境CodeComposer,配套的C語言編譯器提供了文件的標(biāo)準(zhǔn)操作。在調(diào)試(debug)環(huán)境下,對主機(jī)(host)硬盤文件的操作是通過標(biāo)準(zhǔn)的ANSI文件操作格式與主機(jī)的通信來完成的。ANSICI/O操作分為三個(gè)等級(jí)—highlevel、lowlevel和Devicelevel。在Highlevel中,標(biāo)準(zhǔn)接口是Fopen和Fwrite等函數(shù);而Lowlevel中是Open和Write等函數(shù)。這三個(gè)等級(jí)功能用三個(gè)表來實(shí)現(xiàn)—文件表、流表(實(shí)質(zhì)就是內(nèi)存緩沖區(qū)索引)和設(shè)備表。文件的打開和關(guān)閉等基本屬性在文件表中反應(yīng)。當(dāng)打開一個(gè)文件時(shí),文件表中便相應(yīng)增加一個(gè)描述該文件的信息單元;同樣,關(guān)閉一個(gè)文件時(shí),該文件的信息單元從文件表中被刪除。流表提供了對文件的緩沖操作處理,緩沖區(qū)位置和大小等均在流表中記錄。一個(gè)文件對應(yīng)一個(gè)流,即緩沖區(qū)。對文件的讀寫就是對緩沖區(qū)的讀寫。當(dāng)緩沖區(qū)填滿時(shí),再一次性寫入Flash等設(shè)備中,避免了對Flash的頻繁操作,延長了Flash的使用壽命。設(shè)備包括Flash、硬盤、鍵盤等在設(shè)備表中體現(xiàn)。多個(gè)流可以對應(yīng)一個(gè)設(shè)備,例如在Flash中可以打開多個(gè)文件,但是一個(gè)設(shè)備不能對應(yīng)多個(gè)流。流操作和設(shè)備操作是緊密聯(lián)系在一起的。當(dāng)打開一個(gè)文件時(shí),同時(shí)給出了該文件在什么設(shè)備上操作,再分配一個(gè)流。以后對該文件的操作通過流對應(yīng)的具體設(shè)備的驅(qū)動(dòng)函數(shù)來完成。主機(jī)的target任何外設(shè)都可被加入進(jìn)去成為設(shè)備表的成員之一。CodeComposer對HOST磁盤文件的操作最終是通過與HOST集成開發(fā)環(huán)境通信的方式來進(jìn)行。TI提供的RTS.LIB提供兩個(gè)函數(shù)與主機(jī)通信,writemsg()函數(shù)發(fā)送數(shù)據(jù)和參數(shù)到主機(jī)。Readmsg()函數(shù)從主機(jī)讀取數(shù)據(jù)到目標(biāo)機(jī)。CodeComposer再與主機(jī)進(jìn)行交互,利用主機(jī)文件系統(tǒng)的支持,屏蔽了具體的物理地址讀寫問題。在調(diào)試階段,當(dāng)要在主機(jī)上建立文件、讀取文件和存儲(chǔ)數(shù)據(jù)時(shí),只需用標(biāo)準(zhǔn)的ANSIC函數(shù)操作就可以,從而極大方便了編程調(diào)試。3Flash文件系統(tǒng)的實(shí)現(xiàn)嵌入式文件系統(tǒng)一般有集中管理文件系統(tǒng),存儲(chǔ)空間的使用信息集中存在存儲(chǔ)器的某個(gè)地方,如DOS的FAT,Unix的inode表。線性文件系統(tǒng),又稱為連續(xù)文件系統(tǒng),每個(gè)文件相關(guān)的所有信息都連續(xù)存放在存儲(chǔ)器中。與集中式文件系統(tǒng)相比,實(shí)現(xiàn)更簡單,讀寫更快,特別是將文件的關(guān)鍵系統(tǒng)分布存放。日志文件系統(tǒng)順序?qū)懭胛募到y(tǒng)的修改,如同日志記錄一樣,可加速文件寫入和崩潰修復(fù)。采用Log唯一結(jié)構(gòu),Log包含索引信息、名稱和數(shù)據(jù)。嵌入式系統(tǒng)不可能帶硬盤,一般都是基于Flash存儲(chǔ)器的。3.1Flash特點(diǎn)及其相應(yīng)處理Flash的讀操作與普通RAM時(shí)序一樣,但是寫和擦除操作則具有自身的特點(diǎn)。同一地址不能同時(shí)寫入兩次,必須進(jìn)行費(fèi)時(shí)的擦除操作。執(zhí)行擦除的方式有三種:一是片擦除,即一次性全部擦除所有內(nèi)容(這個(gè)相當(dāng)于格式化功能,在第一次使用時(shí)可以執(zhí)行這種操作);二是塊擦除;三是扇區(qū)擦除。以SST39VF400A為例,塊Block的大小是32KB,扇區(qū)的大小是2KB,塊擦除一次擦除一個(gè)塊內(nèi)容;扇區(qū)類似。如果一個(gè)文件內(nèi)容被改動(dòng),且改動(dòng)的內(nèi)容不足一個(gè)扇區(qū)的話,則更新文件時(shí)必須重寫這個(gè)扇區(qū)的所有內(nèi)容;在重寫前必須擦除該扇區(qū)的所有內(nèi)容。因此基于Flash的文件系統(tǒng)不能完全套用已有的文件系統(tǒng),但可以在其基礎(chǔ)上進(jìn)行改動(dòng)。Flash能夠擦除的范圍越小,對文件的改動(dòng)就越小,所執(zhí)行的I/O操作就越小,從而減少I/O時(shí)間,提供文件系統(tǒng)的實(shí)時(shí)性能。我們使用的SST39VF400A的扇區(qū)大小是2KB,也就是2048B(1K=1024)。用常數(shù)定義,#defineFileUnit2048。3.2Flash文件系統(tǒng)的層次性與ANSIC標(biāo)準(zhǔn)相對應(yīng),我們將Flash文件系統(tǒng)分為3個(gè)層次。第一層次,API層。API層是文件系統(tǒng)與用戶應(yīng)用程序之間的接口,包含一個(gè)與文件函數(shù)相關(guān)的函數(shù)庫,如FS_FOpen、FS_Fwrite等,也相當(dāng)于HighLevel層。第二層次,文件系統(tǒng)層,即LowLevel層。該層處理文件是否存在,打開,關(guān)閉和為文件分配相應(yīng)的緩存等。該層調(diào)用底層驅(qū)動(dòng)。第三層是DeviceLevel層,就是設(shè)備驅(qū)動(dòng)層。Flash的實(shí)際讀寫操作就是在該層進(jìn)行的,特定的Flash存儲(chǔ)器對應(yīng)特定的讀寫程序。3.3Flash文件信息表的設(shè)計(jì)該表保存Flash中已有文件的屬性,F(xiàn)lash大小和文件的屬性等都在該表中反映出來。該表與Flash中的內(nèi)容保持同步更新,即一個(gè)文件最小塊更新完畢時(shí),寫入Flash中。Flash的空間分配:①Flash空間,以簇為單位,讀和寫都是一簇,即一個(gè)扇區(qū)單位;②0簇給文件分配表,不被應(yīng)用文件占用;③每次文件系統(tǒng)初始化時(shí),把Flash內(nèi)0簇的內(nèi)容讀取到內(nèi)存中,保存在數(shù)組FAT16[]中。常量定義#defineCLUSTER_BLOCK_SIZE2048//每一簇的字節(jié)數(shù)#defineNUMBER_OF_CLUSTER_IN_FAT1625//在文件分配表中,一共有多少個(gè)簇#defineNUMBER_OF_FILE_BUF10//一共有幾個(gè)文件緩沖區(qū)#defineMODE_OPEN_FILE_READ0x01//讀取(文件打開模式)#defineMODE_OPEN_FILE_WRITE0x02//寫入(文件打開模式)#defineMAX_SIZE_OF_FIEL2048//文件的最大尺寸文件結(jié)構(gòu)體:typedefstruct{unsignedintIsLock:1;//文件是否被上鎖,=0沒打開;=1已被打開。此標(biāo)志只在文件的第一簇使用unsignedintstatus:7;//簇的狀態(tài),=0,此簇為色,沒使用;=1,此簇是第一簇;=2,此簇不是第一簇charFileName[8];//文件名,在第一簇有效charFileExName[3];//文件擴(kuò)展名,在第一簇有效unsignedintSizeOfFile;//文件的字節(jié)數(shù),在第一簇有效unsignedintNextCluster;//下一簇的簇號(hào)。當(dāng)為0xffffffff時(shí),說明這是當(dāng)前文件的最后一簇}FlashFAT;文件句柄結(jié)構(gòu)體:typedefstruct{unsignedintBuffer[CLUSTER_BLOCK_SIZE];//文件緩沖區(qū)unsignedintfileblock;//文件當(dāng)前簇的位置unsignedintfilemode;//打開支持的模式unsignedintfilebufnum;//文件緩沖區(qū)中已被/寫的字節(jié)數(shù)unsignedintfileCurpos;//文件讀寫的當(dāng)前位置unsignedintfilesize;//文件的大小}FlashFILE;3.4DeviceLevel驅(qū)動(dòng)函數(shù)SST39VF400A標(biāo)準(zhǔn)設(shè)備級(jí)驅(qū)動(dòng)函數(shù)如下:voidProgram_One_Word(WORDSrcWord,WORDfarDst){/*寫入一個(gè)字*/WORDfar*Temp;WORDfar*SourceBuf;WORDfar*DestBuf;IntIndex;DestBuf=Dst;Temp=(WORDfar*)0xC0005555;/*設(shè)置地址為C000:555h*/*Temp=0xAAAA;/*寫數(shù)據(jù)0xAAAA到此地址*/Temp=(WORDfar*)0xC0002AAA;/*設(shè)置地址為C000:2AAAh*/*Temp=0x5555;/*寫數(shù)據(jù)0x5555到此地址*/Temp=(WORDfar*)0xC0005555;/*設(shè)置地址為C000:5555h*/*Temp=0xA0A0;/*寫數(shù)據(jù)0xA0A0到此地址*/*DestBuf=SrcWord;/*傳送字節(jié)到目的地址*/Check_Toggle_Ready(DestBuf);/*等待TOGGLF位準(zhǔn)備好*/}源代碼見網(wǎng)站。3.5Flash文件系統(tǒng)的工作流程在使用Flash文件系統(tǒng)前,先將FlashROM設(shè)備加入設(shè)備表中(最開始假設(shè)Flash中沒有任何文件),讀入Flash文件表。下面簡述系統(tǒng)工作流程。(1)加入FlashROM設(shè)備add_device("FlashROM",_MSA,flash_open,flash_close,flash_read,flash_write,flash_lseek,flash_unlink,flash_rename);其中flash_open、flash_close、flash_read、flsh_write、flash_lseek、flash_unlink、flash_rename是最底層的flash驅(qū)動(dòng)函數(shù)名稱。針對不同的Flash,需要不同的驅(qū)動(dòng)函數(shù)。intflash_open(char*path,unsignedflags,intfno);intflash_close(intfno);intflash_read(intfno,char*buffer,unsignedcount);intflash_write(intfno,char*buffer,unsignedcount);(2)初始化文件系統(tǒng)在使用Flash前,必須初始化。初始化臨時(shí)文件緩沖區(qū),將Flash的各種信息讀入到系統(tǒng)中,如Flash的大小,存在的文件的名稱、大小、建立日期等,這樣系統(tǒng)才能正確使用Flash.Init_eFS();/*初始化文件系統(tǒng)函數(shù)*/(3)執(zhí)行各種文件操作如果要在Flash上打開一個(gè)文件,執(zhí)行fopen("FlashROM:\路徑\文件名",“打開模式”)就可以了。當(dāng)打開文件時(shí),先檢查文件表中是否存在該文件。如果沒有,則在Flash文件表中查找是否存在該文件。如果存在,則打開;如果沒有,則新建這樣一個(gè)文件,同時(shí)打開該文件。隨后就可以進(jìn)行文件的讀寫、追加、屬性修改等操作。該Flash文件系統(tǒng)的幾個(gè)技術(shù)關(guān)鍵點(diǎn):①利用RTS.LIB(TI附帶有源代碼RTS.SRC)的高級(jí)層文件操作功能。該庫已經(jīng)按照ANSIC標(biāo)準(zhǔn)處理了高層文件應(yīng)用問題。我們可以如同在上位機(jī)上編程一樣使用各種文件操作函數(shù),不同的是將盤符改為FlashROM盤符。例如,將fopen("C:\read.txt","r")改為fopen("FlashROM:\read.txt","r")。用這種模式操作Flash,的繁瑣時(shí)序處理和扇區(qū)擦除等重復(fù)性問題,可以將精力集中到應(yīng)用編程上來。②用自設(shè)計(jì)的LowLevel級(jí)代碼接管了RTS.LIB的低層處理。前述的Flash文件信息表是核心,只有通過該表才能知道Flash中究竟有什么,在哪里操作。當(dāng)在API層操作文件時(shí),高層函數(shù)將調(diào)用相應(yīng)的底層處理屬數(shù),在LowLevel判斷文件是否打開,是否可讀寫等屬性。同時(shí)為該文件分配一個(gè)內(nèi)緩沖區(qū),所有對該文件的操作先操作緩沖區(qū),即流操作。當(dāng)緩沖區(qū)滿時(shí),調(diào)用的操作先操作緩沖區(qū),即流操作。當(dāng)緩沖區(qū)滿時(shí),調(diào)用DeviceLevel級(jí)函數(shù),將數(shù)據(jù)寫入Flash中。同樣,讀取的時(shí)候,是先讀取一個(gè)扇區(qū)內(nèi)容,處理完畢后再讀取下一扇區(qū)內(nèi)容。操作鍵盤等其它外設(shè)相對Flash要簡單得多,不用設(shè)計(jì)文件信息表。執(zhí)行兩個(gè)步驟就可以使用。一是加入設(shè)備,調(diào)用add_device(……)函數(shù),填入設(shè)備名;二是編寫設(shè)備
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服務(wù)效率保障及技術(shù)支持承諾書(8篇)
- 科研成果轉(zhuǎn)化知識(shí)產(chǎn)權(quán)保護(hù)承諾書3篇
- 安徽大學(xué)《有機(jī)化學(xué)》2024 - 2025 學(xué)年第一學(xué)期期末試卷
- 2026四川成都都江堰首嘉醫(yī)院2月招聘12人備考題庫附參考答案詳解(能力提升)
- 2026上海第二工業(yè)大學(xué)管理崗等工作人員招聘10人備考題庫及參考答案詳解1套
- 安徽大學(xué)《材料物理》2024 - 2025 學(xué)年第一學(xué)期期末試卷
- 安徽建筑大學(xué)《材料物理》2024 - 2025 學(xué)年第一學(xué)期期末試卷
- 2026上半年重慶事業(yè)單位聯(lián)考重慶市屬單位招聘高層次和緊缺人才310人備考題庫及答案詳解(有一套)
- 2026內(nèi)蒙古呼和浩特航天經(jīng)濟(jì)開發(fā)區(qū)管理委員會(huì)招聘所屬國有企業(yè)管理人員2人備考題庫帶答案詳解(綜合題)
- 2026新疆博州賽里木湖信息科技服務(wù)有限責(zé)任公司招聘4人備考題庫帶答案詳解(典型題)
- 2026中國電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘備考題庫及參考答案詳解1套
- 2024年國企行測題庫
- 煙囪技術(shù)在血管腔內(nèi)修復(fù)術(shù)中的應(yīng)用
- 崗位聘用登記表
- 2023年全國統(tǒng)一高考政治試卷(新課標(biāo)ⅰ)(含解析版)
- 2023年北京高考語文答題卡(北京卷)word版可編輯kh
- 2023年高鐵信號(hào)車間副主任述職報(bào)告
- GB/T 5762-2012建材用石灰石、生石灰和熟石灰化學(xué)分析方法
- 第3章 圓錐曲線的方程【精簡思維導(dǎo)圖梳理】高考數(shù)學(xué)高效備考 人教A版2019選擇性必修第一冊
- 劉一秒演說智慧經(jīng)典(內(nèi)部筆記)
- 管道TOFD檢測記錄及續(xù)表
評(píng)論
0/150
提交評(píng)論