FATFS 下载地址:FATFS源码下载

FATFS 移植的过程中,主要用到三个文件:ff.c、diskio.c、ffconf.h

移植FATFS不需要过多的操作,过程很是方便,步骤为:

  1. 补全 diskio.c 中的存储介质底层驱动文件。(一般为SD卡、SPI-Flash,直接copy别人的就行)
  2. 修改 ffconf.h 中的配置。包括 磁盘数目、文件名语言、存储介质的块大小。
  3. 实例化 逻辑磁盘的结构体FATFS、文件对象结构体FIL(这两个实例化对象占用RAM,大小取决于 ffconf.h 中配置的存储介质的块大小)
  4. 使用 f_mount 挂载磁盘,使用 f_open、f_read、f_write、f_opendir、f_readdir、f_closedir、f_size、f_mkdir、f_unlink、f_rename、f_mkfs、f_getlabel、f_setlabel 等函数对磁盘进行操作。

FATFS减少Flash占用,移除中文文件名支持

移植好后编译,发现占用的 Flash 和 RAM 资源过多。打开 .map文件查看。

ROM 占用过多的为 cc936.c,占用170多KB。对于Flash大小只有 128/64KB 的MCU来说肯定是不够用的。

cc936 是对中文文件名的支持包,可以不要,只使用英文文件名。

将 ffconf.h 中的 #define    _USE_LFN,由3改为0,移除掉语言包的支持,修改后的文件系统只支持英文文件名。

Tips:cc936.c 中的数据类型均为const,所以也可以编译好后放入外部存储介质,不占用MCU-Flash。

编译后报错:

..\FATFS\src\option\cc936.c(11): error:  #35: #error directive: This file is not needed in current configuration. Remove from the project.

原因是 cc936.c 中的这句:

需要将 cc936.c 移除工程。

移除后编译。

Flash 空间占用,一下子就少了 170多KB。

一共占用 69.16 KB,主要是由于 lcd、uart、sdio 等文件。实际 FATFS 仅占用十多K的 Flash。

FATFS减少RAM占用,移除malloc动态内存

工程使用的是正点原子F407的FATFS例程。其中为FATFS分配的RAM使用了动态内存。

其实只需要在栈中根据存储介质的块大小,分配一块大小合适的RAM即可,没必要使用动态内存,栈内分配即可。

例如 SD卡的块大小为 512 Byte,那么我们只需要分配 512 Byte给FATFS即可。W25qxx的块略大,为 4KB。

正点原子的例程中,RAM占用过大的文件主要为 malloc.c,而实际使用到 malloc 的为 exfun.c。

其中,exfun.c 有

FATFS *fs[_VOLUMES];//逻辑磁盘工作区
FIL *file;          //文件1
FIL *ftemp;         //文件2
u8 *fatbuf;         //SD卡数据缓存区fs[i]=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS));    //为磁盘i工作区申请内存
file=(FIL*)mymalloc(SRAMIN,sizeof(FIL));       //为file申请内存
ftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL));      //为ftemp申请内存
fatbuf=(u8*)mymalloc(SRAMIN,512);              //为fatbuf申请内存

FATFS 为FATFS逻辑磁盘结构体,FIL 为FATFS文件对象结构体。对象有用不可删除。

fatbuf 是为 fattester.c和usmart.c 服务,目的是串口调试。与 FATFS的功能无关,可以删除。

故可以将 fattester.c/h,malloc.c/h,usmart.c/h,usmart_config.c/h,usmart_str.c/h,lcd.c/h 完全移除。将 exfuns.c/h 去除u8 *fatbuf; ,并将整个文件重写,将 FATFS *fs[_VOLUMES]; FIL *file; 改为使用栈上RAM: FATFS fs[_VOLUMES]; FIL file;

FATFS 特点就是轻量化,移植好后,Flash仅占用10多Kb。RAM占用于 ffconf.h 中配置的存储介质的块大小逻辑磁盘的数目文件对象的数目 共同决定。(如果存储介质只为SD卡,只有1个逻辑磁盘,1/2个文件对象,RAM占用仅为1Kb多)

由于正点原子的工程文件过于冗余,实际应用可能还不如自己重新移植FATFS来的方便。

stm32 FATFS文件系统如何减少Flash和RAM占用,FATFS移除中文文件名,FATFS移除动态内存相关推荐

  1. stm32的flash和ram占用情况

    stm32的flash和ram占用情况 在stm32中flash就是ROM,掉电数据不会丢失:(通常保存着text段.Code.Ro-data.Rw-data) RAM就是运行内存,掉电数据就丢失:( ...

  2. (转载)关于stm32编译后的代码空间和ram占用

    http://blog.csdn.net/u011354506/article/details/54767241 这个文章讲这个东西讲得很细可以参考 转载于:https://www.cnblogs.c ...

  3. 基于SD卡的FatFs文件系统(FatFs移植到STM32)

    平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线 工程介绍:主要文件在USER组中,bsp_sdio_sdcard.c,bsp_sdio_sdcard.h和main.c, ...

  4. ARM单片机FATFS文件系统的移植

    ARM单片机FATFS文件系统的移植 测试效果 前提条件 下载所需源码 FATFS 文件系统 SFUD万能驱动 加入工程 接口驱动 测试代码 FreeRTOS10.0.1 FATFS FF14A SF ...

  5. Zynq Fatfs文件系统应用笔记

    Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统采用在Bare-Metal和轻量级 ...

  6. FatFs文件系统的移植

    FatFs 的底层可以写一次命令,读写多个扇区.FatFs的设计的读写的思想就很好,小块的数据,我就经过Buffer来存储,大块的数据,我就直接进行存取,那样速度,效率高了很多,看图: FatFs文件 ...

  7. fatfs 文件属性_Zynq Fatfs文件系统应用笔记

    Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描写叙述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统採用在Bare-Metal和轻 ...

  8. STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)

    文章目录 1. 准备工作 1.1. 简单扫盲 1.1.1. SD卡 1.1.2. TF卡 1.1.3. SDIO接口 1.2. 所用硬件及原理图 2. 创建工程 2.1. 选择主控 2.2. 系统配置 ...

  9. keil c51的内部RAM(idata)动态内存管理程序(转)

    源:keil c51的内部RAM(idata)动态内存管理程序 程序比较简单,但感觉比较有意思,个人认为有一定应用价值,希望大家有更好的思路和方法,互相促进. 程序的基本思路是:在CPU堆栈指针SP以 ...

最新文章

  1. Golang实践录:使用gin框架实现转发功能:利用nginx转发
  2. 夯实Java基础(二十二)——Java8新特性之Lambda表达式
  3. linux 硬链接 软链接_Linux中的软链接–完整参考
  4. OpenAI Gym 是一个优秀开发和比较强化学习算法的工具
  5. 程序员到CTO必须注意的几个关键点
  6. 汉诺塔C语言实现(纯代码)
  7. css修改图标字体大小,css-更改AngularJS材质图标的图标大小
  8. 勘探重力实验matlab,重力场与重力勘探实验指导.ppt
  9. 学环境工程我后悔了_环境工程学出来能干啥
  10. Python 多线程学习
  11. 【Baxter机器人末端轨迹坐标采集和轨迹还原】
  12. 微信小程序引用vant框架
  13. 2016CSDN前十排名博客地址
  14. java double 的精度_java double类型相加精度问题的解决
  15. 自动控制原理 学习笔记2
  16. 别拿汇报不当事!5个技巧教你做好职场汇报!
  17. Linux·网络编程套接字(一)
  18. 圆形或者椭圆形交通标志图像匹配模板
  19. springboot大学生青年志愿者管理系统的设计与实现毕业设计源码101605
  20. 《PCL点云库学习VS2010(X64)》Part 41 图形学领域的关键算法及源码链接

热门文章

  1. Intellij IDEA汉化教程
  2. [LeetCode] 118. Pascal's Triangle Java
  3. Struts2的Action中访问servletAPI方式
  4. stm32端口复用和重映射
  5. Ubuntu12.04中eclipse提示框黑色背景色修改
  6. c语言字符数组的应用编程,C语言基础(一)
  7. 让IT不加班,让业务不等待,一文讲透自助式分析的前世今生
  8. 华为鸿蒙系统是指芯片吗_没有了芯片,华为能靠鸿蒙OS系统打出差异化吗?
  9. seo伪原创工具_伪原创工具哪个好用?
  10. python三维数组表示方法_Python操作多维数组和矩阵