MC9S12UF32的嵌入式文件系統數據存儲模塊
具體移植過程如下:
(1)存儲媒介初始化函數
DSTATUS disk_initialize(BYTE drv)
由于采用的存儲媒介是SD卡,所以該函數的實際功能是對SD卡進行初始化。drv是存儲介質號碼,由于Tiny-FatFS只支持一個存儲介質,所以此處drv始終取O值。執行無誤,則返回值=O;執行中出現錯誤,則返回非O值。
(2)狀態檢測函數
DSTATUS disk_status(BYTE drv)
該函數用于檢測是否支持當前的存儲介質。此處的drv仍然恒為O。對Tiny-FatFS而言,只要drv為O,就認為支持當前介質,函數直接返回O值即可。
(3)讀扇區函數
DRESULT disk read(BYTE drv,BYTE*buff,DWORD seetor,BYTE.count)
該函數是在“單片機從SD卡讀取一個扇區”的函數基礎上編寫而成的,其功能是從SD卡讀取一個或多個扇區的數據。*buff用于存儲已經讀取的數據,sector是待讀取扇區的起始扇區數,count是需要讀取的扇區數。如果執行無誤則返回O值,否則返回非O值。
(4)寫扇區函數
DRESULT disk_write(BYTE drv,const BYTE*buff。DWORD sector,BYTE count)
與disk_read相似,該函數是在“單片機向SD卡寫入一個扇區”的函數基礎上編寫而成的,其功能是向SD卡導入一個或多個扇區的數據。*buff用于保存將要寫入的數據,sector是待寫入扇區的起始扇區數,count是需要寫入的扇區數。如果執行無誤,則返回0值;否則,返回非0值。
(5)存儲介質控制函數
DRESULT disk_ioctl(BYTE drv,BYTE ctrl,VoiI*buff)
ctrl是控制代碼,*buff用于保存或接收需要控制的數據數據。使用者可以在此函數里添加自己需要的功能代碼,例如獲得存儲介質的容量、扇區數等。如果是簡單的應用,也可以不執行任何功能,直接返回0值。本文采用的就是這一方法。
(6)實時鐘函數
DWORD disk_fattime(Void)
該函數將讀取的實時鐘信息保存在一個32位無符號整數中,并將其作為函數的返回值。時鐘信息在這32位中的具體分布如表1所列。本文引用地址:http://www.j9360.com/article/151973.htm
3.3 FatFS的裁減與配置Tiny-FatFS
FatFs提供了豐富的庫函數,可以實現創建、讀取文件夾,創建、讀寫文件,移動文件指針,向文件中寫入或讀取字符串,甚至是類似與C語言fprintf()的格式化輸入等各種功能。使用者可以根據自己的需求設置相應的宏,對FatFs進行裁減,僅保留需要的功能函數,從而精簡文件系統的內存開銷。FatFS提供的函數與宏的對應關系如圖3所示。
FatFS的裁減,不僅僅是函數層面的。更重要的是,在內部機制上形成一個精簡版本,稱為Tiny-FatFS。它與標準版FatFS相比,主要的區別在于Tiny-FatFS僅支持一個物理存儲介質,而且不再針對每個開啟的文件建立512字節的緩存,整個文件系統和物理介質使用同一個緩存。顯然,Tiny-FatFs需要的內存開銷比標準版FatFS更低,只要1 KB左右的RAM。可以說,Tinyr-FatFS是專門為小型嵌入式系統而設計的文件系統模塊。本文介紹的數據存儲系統使用的正是Tiny-FatFS版本。
評論