Fatfs文件系统学习
来源:互联网 发布:大学生常用电脑软件 编辑:程序博客网 时间:2024/06/06 12:47
移植过程网上有很多,直接参考就可以了。
1、学习过程对API重新理解
f_mout();
f_mout(&fs,"0:",0); // 挂载
f_mout(0,"0:",0); // 卸载
一直对卸载有错误的认识,一直以为卸载的时候第一个形参还是&fs。
2、英文长文件名的实现
http://blog.csdn.net/lan120576664/article/details/48344311英文长文件名的实现参考了这个朋友的帖子。
#define _CODE_PAGE 437 选择不同的编码格式
#define _USE_LFN 3 长文件名的使能,文件名不同格式的转换需要内存区进行格式的转换。
0 不使用长文件名,文件的名的长度最大12个字节包括格式(.txt)。
1 使用长文件名,在bss段上开辟静态的工作存储区。
2 使用长文件名,在栈上使用动态的工作区
3 使用长文件名,在堆上使用动作的工作区
#define _MAX_LFN 255 长文件名的最大字节个数。
另外工程中还需要包括syscall.c unicode.c ccsbcs.c,编译过程中根据编译错误的提示进行修改即可。
编译没有错误,使用f_open() 函数新建一个文件时,可能会返回错误FR_NOT_ENOUGH_CORE 长文件名没有足够的工作区,根据 _USE_LFN 的值去修改启动文件.s中堆或栈的大小,修改好后就可以使用长文件名了。
3、中文的支持
#define _CODE_PAGE 936
#define _LFN_UNICODE 0 // 看有的网友说这里设置为1,设置为1后TCHAR的类型就变了,设置成0也能用我就没改,以后遇到问题再说。
将cc936.c添加到文件中,编译提示ccsbcs.c和cc936.c文件的两个转换函数重复了,将ccsbcs.c中的两个转换函数屏蔽。
cc936.c包含了两个转换数组,数组非常大,如果单片机的flash小的话放不下,可以将数组放到外挂的 spi的flash中,在转换函数中读数组得到数据进行解码(这个我还没做测试,现在单片机flash够用)。
4、目录的遍历
实现中文名和长文件名以后,做了下目录的遍历,目前只测试了第一级目录的遍历。程序可以在网上搜一下做参考,主要记录一下做的过程中出现的问题。
程序实现了第一级目录的遍历,通过printf()函数将目录内容输出到串口助手也是正确的。但是我将目录的内容在显示屏上显示的时候,出了点问题,如果名字是字符可以正确显示,但是只要遇到中文文件名字第一个中文的文件名字可以在lcd上显示,但是遍历直接就直接停止在这了,错误显示FR_INVALID_OBJECT。
我将汉字的字库放在了sd卡上,显示汉字的时候通过算出汉字的偏移量,挂载SD卡,打开字库文件,做指针偏移,然后读出汉字的点阵,保存在数组中,关闭文件,函数返回。
如果单独调用函数显示汉字显示多行也没有问题,但是只要遍历目录就会遇到问题。我想应该是读取汉字库的函数出了问题,最后确实是这里出了问题,在读汉字库的函数中,将挂载sd卡的语句就可以了。
挂载sd卡,打开目录,读目录->显示目录。显示目录的函数中又挂载了sd卡,多次SD卡的挂载导致了显示完汉字目录后,再一次读目录的时候出错了,所有尽量在整个工程中只挂载一次SD卡。或者直接将字库写在SPI flash里,不用fatfs的函数操作SD卡避免错误的发生。
5、打开或者读写文件的时候,如果用的是文件指针,那么定义文件指针的时候必须给文件指针赋值。
FIL *file;
f_open(file,"0:a",FA_READ);
因为没有给指针变量赋值,打开的时候将会返回FR_INVALID_OBJECT。可以定义一个数组,把数组的地址赋给file就行了。
uint8_t filebuff[sizeof(FIL)];
FIL *file=(FIL *)filebuff;
这样再用指针的时候就不会出错了。
- Fatfs文件系统学习
- FatFS文件系统
- FatFS文件系统
- FATFS 文件系统
- fatfs文件系统
- FATFS文件系统
- fatfs文件系统
- FATFS文件系统
- Fatfs文件系统分析(1)-Fatfs
- 基于STM32的SD卡FATFS文件系统学习笔记
- STM32学习笔记之fatfs文件系统接口函数使用
- FATFS文件系统+源码分析——学习笔记
- 嵌入式系统学习——STM32之FATFS文件系统
- FatFs文件系统的移植
- FatFs文件系统的移植
- fatfs文件系统移植
- FatFs文件系统的移植
- SD_STM32_SPI驱动+FatFs文件系统
- 如何解决vs2003 asp.net树控件不能正常显示的问题
- 设计模式之代理模式和装饰者模式
- 不需要新建表,或者修改表结构,直接添加表分区。
- java 创建临时临时文件
- 基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门
- Fatfs文件系统学习
- 广播--案例:拦截有序广播
- 2D制图实战之绘制时钟
- Activity的四种启动模式
- iOS- 详解文本属性Attributes(文本的样式设置/阴影/下划线/颜色)
- php 在本地解压 反压缩 zip rar
- Python练习7-统计日记中最重要的词
- 设计模式之饿汉单例
- C++内存越界(转)