一、引出
fatfs檔案系統中存在短檔名和長檔名的概念。當檔名的字元長度短於13個字元時,稱為短檔名。當長於13個字元則稱為長檔名。
如果不配置fatfs檔案系統的長檔名功能,當遇到短於13個字元檔名的檔案時可以正常顯示,ke是當遇到檔名比13字元長時,fatfs就會自動做截斷處理,效果如下:
當配置了長檔名功能,當然就可以全部顯示了:
二、說明
接觸到fatfs檔案系統的長檔名,一般是在使用f_readdir()
這個函式時,這個函式的功能就是獲取上一步使用f_opendir()
開啟的資料夾中的內容,包含檔名和資料夾,並將檔案資訊儲存到定義的結構體中,包含檔案資訊的結構體內容如下:
typedef struct filinfo;
從這個結構體我們就可以知道,短檔名是儲存到fname[13]中的,它本身就是乙個陣列,可以存放13個字元,因此當不開啟支援長檔名的功能或者所有檔案的名字長度短於13個字元,我們都不需要去操心,因為檔案系統會把名字自動儲存到fname[13]中。而長檔名是儲存在lfname所指向位址的,它是乙個指標,並沒有實際的記憶體空間,因此當我們使用它之前,需要先開闢乙個空間,然後讓lfname指向它才行,不然會發生記憶體錯誤。
如果要支援中文長檔名,還需要新增乙個gbk和unicode編碼的互轉檔案,因為短檔名本來就是gbk編碼的,所以不用轉。可是長檔名使用的utf-16編碼,這是unicode的一種編碼方式,所以要先轉換為gbk才可以使用。(詳細連線)fatfs提供了這個轉換檔案,名字為cc936.c。
三、配置方法
第一步:
開啟ffconf.**件,把_use_lfn修改為1。
解釋:0是不開啟長檔名功能。
1是使用乙個靜態記憶體區來儲存長檔名
2是動態分配微控制器的stack中的記憶體來儲存長檔名。
3是動態分配微控制器的heap的記憶體來儲存長檔名。
第二步:(不需要支援中文,可以跳過)
修改巨集定義_code_page為936,並新增cc936.c檔案。
第三步:
為長檔名開闢記憶體空間,直接定義乙個全域性變數即可。
#if _use_lfn
char lfn[50];
#else
於是配置就完成了。
四、使用
if(f_opendir(&dir,dirname) == fr_ok) //開啟路徑目錄
}
fatfs檔案系統
使用stm32cubemx新增fatfs下的user defined,開啟工程,檢視 可以發現 中先呼叫了mx fatfs init 函式,而此函式又呼叫了 fatfs linkdriver 函式,繼續查詢fatfs linkdriver 函式,發現此函式第乙個變數為diskio drvtypede...
FATFS檔案系統
二 修改fatfs 主要修改底層裝置驅動函式 diskio.c 目的 就是把 diskio.c 中的函式介面與spi flash 晶元驅動連線起來。總共有五個函式,分別為裝置狀態獲取 disk status 裝置初始化 disk initialize 扇區讀取 disk read 扇區寫入 disk...
linux系統支援中文
由於某些原因系統安裝時未安裝中文支援,導致後續應用出現中文方塊亂碼現象,解決方法很簡單,當然不是重灌,只需以下三步即可搞定。1 安裝中文包 base name base baseurl file mnt server enabled 1 gpgcheck 0 gpgkey file etc pki ...