




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精品文档“长文件名”“短文件名”的详细概念请自行去百度谷歌搜狗搜索。我们现在只需要知道一个文件名称长了,就是长文件名,例如sdjflasdjfas.txt;一个文件的名称短了,就是短文件名,例如a.txt。有人会问,文件名干嘛要分长短?这个问题属于计算机历史问题了。想深究,去百度吧。咱们先看看用“不支持长文件名”的文件系统和“支持长文件名”的文件系统分别读一个比较长的文件名显示的效果吧。下面是“不支持长文件名”的文件系统读出来的:下面是“支持长文件名”的文件系统读出来的:很显然,文件系统如果不支持长文件名,岂能用哉?以FatFs为例,刚刚移植好的文件系统,默认是不支持长文件名的,要想支持长文件名,需要打开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 information 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上,当我们读完文件名以后,文件名实际上是由Unicode编码的,这时候,我们就需要找到这些Unicode码对应的GBK码,因为我们的字库是按照GBK编码的,所以需要用到ff_convert()函数里面的Unicode转GBK转换表来转换。由于中文有2万多个汉字,这张转换表实在是太大了,编译不通过,因为单片机容量太小了。所以我们把这张表格放到外部的FLASH吧。再比如说,我们要在SD卡上新建文件,我们给它的名字是由GBK编码的,而文件名存储,必须是Unicode才行,这时候就需要用到GBK转Unicode的表格。这张表同样很大,所以我们把这张表也放到外部的FLASH里面。ff_wtoupper()函数是用来英文大小写转换的,比如说,我们把文件名写为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 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 0x4DFF) & (src 0x9FA6) ) offset = (uint32_t)src - 0x4E00) * 2) + 0x0C0000); W25Q16_Read(unigbk,offset,2); c = (uint16_t)unigbk0)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_convert ( /* 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 0x4DFF) & (src 0x9FA6) ) offset = (uint32_t)src - 0x4E00) * 2) + 0x0C0000); W25Q16_Read(unigbk,offset,2); c = (uint16_t)unigbk0)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;如果你还想支持其他一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025中国建筑股份有限公司岗位招聘党建工作部(企业文化部)笔试题库历年考点版附带答案详解版
- 2025年数字金融行业数字货币与金融科技创新研究报告
- 2025年保险科技行业智能化产品创新研究报告
- 2025年全球新能源汽车市场竞争格局与趋势研究报告
- 2026中科信公司校园招聘笔试备考试题及答案解析
- 2025广东深圳市华一实验学校诚聘高中德育主任、教学主任笔试参考题库附答案解析
- 2025年妇产科常见疾病的处理技巧模拟考试卷答案及解析
- 校园应急救护安全培训课件
- 2026中信银行成都分行校园招聘笔试备考试题及答案解析
- 2025泰山财产保险股份有限公司江苏分公司社会招聘1人笔试模拟试题及答案解析
- 07FJ01~03 防空地下室建筑设计(2007年合订本)
- 《非道路移动工程机械二手设备评估通则》
- 监控验收单完整版本
- DL-T-5743-2016水电水利工程土木合成材料施工规范
- (正式版)YST 1682-2024 镁冶炼行业绿色工厂评价要求
- 体育健康知识教案课件
- 卡西欧dh800电吹管说明书
- 体育课免修申请书体育课免修申请书八篇
- 【超星尔雅学习通】商法的思维网课章节答案
- 509册泵类书籍大全-截止到20150531
- GB/T 5796.3-2022梯形螺纹第3部分:基本尺寸
评论
0/150
提交评论