Fatfs文件系統長文件名設置_第1頁
Fatfs文件系統長文件名設置_第2頁
Fatfs文件系統長文件名設置_第3頁
Fatfs文件系統長文件名設置_第4頁
Fatfs文件系統長文件名設置_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、“長文件名”“短文件名”的詳細概念請自行去百度谷歌搜狗搜索。我們現在只需要知道一個文件名稱長了,就是長文件名,例如sdjflasdjfas.txt;一個文件的名稱短了,就是短文件名,例如a.txt。有人會問,文件名干嘛要分長短?這個問題屬于計算機歷史問題了。想深究,去百度吧。咱們先看看用“不支持長文件名”的文件系統和“支持長文件名”的文件系統分別讀一個比較長的文件名顯示的效果吧。 下面是“不支持長文件名”的文件系統讀出來的:下面是“支持長文件名”的文件系統讀出來的:很顯然,文件系統如果不支持長文件名,豈能用哉?以FatFs為例,剛剛移植好的文件系統,默認是不支持長文件名的,要想支持長

2、文件名,需要打開ffconf.h文件進行配置,找到_USE_LFN,把值從0改到1。如下圖所示:改成1以后,任務還沒有完成。為了能夠支持中文,還需要把_CODE_PAGE的值改為936,如下圖所示:這時候,你編譯一下,系統會有如下錯誤產生:.RationEB_Proj.axf: Error: L6218E: Undefined symbol ff_convert (referred from ff.o).RationEB_Proj.axf: Error: L6218E: Undefined symbol ff_wtoupper (referred from ff.o).Not enough i

3、nformation to list image symbols.Finished: 1 information, 0 warning and 2 error messages.".RationEB_Proj.axf" - 2 Error(s), 0 Warning(s).提示,找不到ff_convert()和ff_wtoupper()這兩個函數。 ff_convert()函數用來把Unicode和GBK之間進行轉換。因為文件系統的文件名默認存儲方式為Unicode編碼,而我們編譯器甚至是電腦,用的中文碼為GBK。比如說,現在我要把一個文件名讀出來顯示到TFT上,

4、當我們讀完文件名以后,文件名實際上是由Unicode編碼的,這時候,我們就需要找到這些Unicode碼對應的GBK碼,因為我們的字庫是按照GBK編碼的,所以需要用到ff_convert()函數里面的Unicode轉GBK轉換表來轉換。由于中文有2萬多個漢字,這張轉換表實在是太大了,編譯不通過,因為單片機容量太小了。所以我們把這張表格放到外部的FLASH吧。再比如說,我們要在SD卡上新建文件,我們給它的名字是由GBK編碼的,而文件名存儲,必須是Unicode才行,這時候就需要用到GBK轉Unicode的表格。這張表同樣很大,所以我們把這張表也放到外部的FLASH里面。 ff_wtoup

5、per()函數是用來英文大小寫轉換的,比如說,我們把文件名寫為ABC.TXT,我們讀abc.txt同樣會讀到這個文件。就是這個文件起的作用。 這兩個函數,位于cc936.c文件中,所以我們要把這個文件添加到工程中,cc936.c文件位了FatFs源碼的option文件夾當中。添加好后的工程如下所示:打開cc936.c文件,ff_wtoupper()文件不用修改。把ff_convert()函數里面的U2G和G2U兩張表格數據刪除,把函數修改為讀取外部的FLASH,來進行U2G和G2U的轉換。修改后的函數為:WCHAR ff_convert ( /* Converted code, 0

6、means conversion error */WCHAR src, /* Character code to be converted */UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */) WCHAR c; uint32_t offset; / W25X16地址便宜 uint8_t GBKH,GBKL; / GBK碼高位與低位 uint8_t unigbk2; / uint8_t gbkuni2; / if (src < 0x80) /* ASCII */ c = src; else if(dir = 0) /* Uni

7、code to GBK */ if( (src > 0x4DFF) && (src < 0x9FA6) ) offset = (uint32_t)src - 0x4E00) * 2) + 0x0C0000); W25Q16_Read(unigbk,offset,2); c = (uint16_t)unigbk0)<<8)+(uint16_t)unigbk1; else c = 0xA1A1; /如果是其它符號,都用NULL代替 else if(dir = 1) /* GBK to Unicode */ GBKH=(uint8_t)(src>>

8、8); GBKL=(uint8_t)(src); GBKH-=0x81; GBKL-=0x40; offset=(uint32_t)192*GBKH+GBKL)*2; W25Q16_Read(gbkuni,offset+0x0D0000,2); c = (uint16_t)gbkuni1)<<8)+(uint16_t)gbkuni0; return c;兩張大表放到外部flash,這里就精簡很多了吧。不過,這時候,還是有一些中文符號無法顯示,例如常用的書名號,中文頓號、,中文雙引號 單引號,中文括號【】等都不能顯示。這時候,我們可以手動添加進去讓其顯示,如下:WCHAR ff_co

9、nvert ( /* Converted code, 0 means conversion error */WCHAR src, /* Character code to be converted */UINT dir /* 0: Unicode to OEMCP, 1: OEMCP to Unicode */) WCHAR c; uint32_t offset; / W25X16地址便宜 uint8_t GBKH,GBKL; / GBK碼高位與低位 uint8_t unigbk2; / uint8_t gbkuni2; / if (src < 0x80) /* ASCII */ c =

10、 src; else if(dir = 0) /* Unicode to GBK */ switch(src) case 0x3001: c = 0xA1A2;break; / 支持符號: 、 中文頓號 case 0x300A: c = 0xA1B6;break; / 支持符號: case 0x300B: c = 0xA1B7;break; / 支持符號: case 0x201C: c = 0xA1B0;break; / 支持符號: “中文左雙引號 case 0x201D: c = 0xA1B1;break; / 支持符號:” 中文右雙引號 case 0x2606: c = 0xA1EE;br

11、eak; / 支持符號: case 0x2605: c = 0xA1EF;break; / 支持符號: case 0x2018: c = 0xA1AE;break; / 支持符號: 中文左單引號 case 0x2019: c = 0xA1AF;break; / 支持符號:中文右單引號 case 0x3010: c = 0xA1BE;break; / 支持符號: 【 case 0x3011: c = 0xA1BF;break; / 支持符號: 】 case 0x3016: c = 0xA1BC;break; / 支持符號: case 0x3017: c = 0xA1BD;break; / 支持符

12、號: case 0x2299: c = 0xA1D1;break; / 支持符號: case 0x2116: c = 0xA1ED;break; / 支持符號: case 0x2236: c = 0xA1C3;break; / 支持符號: case 0x203B: c = 0xA1F9;break; / 支持符號: case 0x221E: c = 0xA1DE;break; / 支持符號: default: if( (src > 0x4DFF) && (src < 0x9FA6) ) offset = (uint32_t)src - 0x4E00) * 2) +

13、0x0C0000); W25Q16_Read(unigbk,offset,2); c = (uint16_t)unigbk0)<<8)+(uint16_t)unigbk1; else c = 0xA1A1; /如果是其它符號,都用NULL代替 break; else if(dir = 1) /* GBK to Unicode */ GBKH=(uint8_t)(src>>8); GBKL=(uint8_t)(src); GBKH-=0x81; GBKL-=0x40; offset=(uint32_t)192*GBKH+GBKL)*2; W25Q16_Read(gbkuni,offset+0x0D0000,2); c = (ui

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論