基于CC/CCS的Flash文件系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
來源:單片機(jī)及嵌入式系統(tǒng)應(yīng)用; 作者:華中科技大學(xué) 金明亮 游大海
摘要:在深入分析TI為開發(fā)DSP提供的RTS.LIB(RTS.SRC為源泉代碼)的基礎(chǔ)上,介紹對自定義的文件和設(shè)備的操作方法;設(shè)計(jì)一個(gè)簡易的Flash文件系統(tǒng),極大地方便了應(yīng)用編程。
關(guān)鍵詞:DSP CC/CCS Flash 文件系統(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)都提供了ANSI C標(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)品中。
2 CC/CCS文件操作機(jī)制TI公司為其TMS320C3X系列DSP提供了一個(gè)開發(fā)環(huán)境Code Composer,配套的C語言編譯器提供了文件的標(biāo)準(zhǔn)操作。在調(diào)試(debug)環(huán)境下,對主機(jī)(host)硬盤文件的操作是通過標(biāo)準(zhǔn)的ANSI文件操作格式與主機(jī)的通信來完成的。ANSI C I/O操作分為三個(gè)等級—high level、low level和Device level。在High level中,標(biāo)準(zhǔn)接口是Fopen和Fwrite等函數(shù);而Low level中是Open和Write等函數(shù)。這三個(gè)等級功能用三個(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ū)動函數(shù)來完成。主機(jī)的target任何外設(shè)都可被加入進(jìn)去成為設(shè)備表的成員之一。
Code Composer對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ī)。Code Composer再與主機(jī)進(jìn)行交互,利用主機(jī)文件系統(tǒng)的支持,屏蔽了具體的物理地址讀寫問題。在調(diào)試階段,當(dāng)要在主機(jī)上建立文件、讀取文件和存儲數(shù)據(jù)時(shí),只需用標(biāo)準(zhǔn)的ANSI C函數(shù)操作就可以,從而極大方便了編程調(diào)試。
3 Flash文件系統(tǒng)的實(shí)現(xiàn)嵌入式文件系統(tǒng)一般有集中管理文件系統(tǒng),存儲空間的使用信息集中存在存儲器的某個(gè)地方,如DOS的FAT,Unix的inode表。線性文件系統(tǒng),又稱為連續(xù)文件系統(tǒng),每個(gè)文件相關(guān)的所有信息都連續(xù)存放在存儲器中。與集中式文件系統(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存儲器的。
3.1 Flash特點(diǎn)及其相應(yīng)處理
Flash的讀操作與普通RAM時(shí)序一樣,但是寫和擦除操作則具有自身的特點(diǎn)。同一地址不能同時(shí)寫入兩次,必須進(jìn)行費(fèi)時(shí)的擦除操作。執(zhí)行擦除的方式有三種:一是片擦除,即一次性全部擦除所有內(nèi)容(這個(gè)相當(dāng)于格式化功能,在第一次使用時(shí)可以執(zhí)行這種操作);二是塊擦除;三是扇區(qū)擦除。以SST39VF400