stm32 FATFS文件系统如何减少Flash和RAM占用,FATFS移除中文文件名,FATFS移除动态内存
FATFS 下载地址:FATFS源码下载
FATFS 移植的过程中,主要用到三个文件:ff.c、diskio.c、ffconf.h。
移植FATFS不需要过多的操作,过程很是方便,步骤为:
- 补全 diskio.c 中的存储介质底层驱动文件。(一般为SD卡、SPI-Flash,直接copy别人的就行)
- 修改 ffconf.h 中的配置。包括 磁盘数目、文件名语言、存储介质的块大小。
- 实例化 逻辑磁盘的结构体FATFS、文件对象结构体FIL(这两个实例化对象占用RAM,大小取决于 ffconf.h 中配置的存储介质的块大小)
- 使用 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移除动态内存相关推荐
- stm32的flash和ram占用情况
stm32的flash和ram占用情况 在stm32中flash就是ROM,掉电数据不会丢失:(通常保存着text段.Code.Ro-data.Rw-data) RAM就是运行内存,掉电数据就丢失:( ...
- (转载)关于stm32编译后的代码空间和ram占用
http://blog.csdn.net/u011354506/article/details/54767241 这个文章讲这个东西讲得很细可以参考 转载于:https://www.cnblogs.c ...
- 基于SD卡的FatFs文件系统(FatFs移植到STM32)
平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线 工程介绍:主要文件在USER组中,bsp_sdio_sdcard.c,bsp_sdio_sdcard.h和main.c, ...
- ARM单片机FATFS文件系统的移植
ARM单片机FATFS文件系统的移植 测试效果 前提条件 下载所需源码 FATFS 文件系统 SFUD万能驱动 加入工程 接口驱动 测试代码 FreeRTOS10.0.1 FATFS FF14A SF ...
- Zynq Fatfs文件系统应用笔记
Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统采用在Bare-Metal和轻量级 ...
- FatFs文件系统的移植
FatFs 的底层可以写一次命令,读写多个扇区.FatFs的设计的读写的思想就很好,小块的数据,我就经过Buffer来存储,大块的数据,我就直接进行存取,那样速度,效率高了很多,看图: FatFs文件 ...
- fatfs 文件属性_Zynq Fatfs文件系统应用笔记
Zynq Fatfs文件系统应用笔 Hello,panda 笔记介绍基于所描写叙述的Zynq Fatfs基于Xilinx xilffsv3.0和Sdpsv2.4,文件系统採用在Bare-Metal和轻 ...
- 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. 系统配置 ...
- keil c51的内部RAM(idata)动态内存管理程序(转)
源:keil c51的内部RAM(idata)动态内存管理程序 程序比较简单,但感觉比较有意思,个人认为有一定应用价值,希望大家有更好的思路和方法,互相促进. 程序的基本思路是:在CPU堆栈指针SP以 ...
最新文章
- Golang实践录:使用gin框架实现转发功能:利用nginx转发
- 夯实Java基础(二十二)——Java8新特性之Lambda表达式
- linux 硬链接 软链接_Linux中的软链接–完整参考
- OpenAI Gym 是一个优秀开发和比较强化学习算法的工具
- 程序员到CTO必须注意的几个关键点
- 汉诺塔C语言实现(纯代码)
- css修改图标字体大小,css-更改AngularJS材质图标的图标大小
- 勘探重力实验matlab,重力场与重力勘探实验指导.ppt
- 学环境工程我后悔了_环境工程学出来能干啥
- Python 多线程学习
- 【Baxter机器人末端轨迹坐标采集和轨迹还原】
- 微信小程序引用vant框架
- 2016CSDN前十排名博客地址
- java double 的精度_java double类型相加精度问题的解决
- 自动控制原理 学习笔记2
- 别拿汇报不当事!5个技巧教你做好职场汇报!
- Linux·网络编程套接字(一)
- 圆形或者椭圆形交通标志图像匹配模板
- springboot大学生青年志愿者管理系统的设计与实现毕业设计源码101605
- 《PCL点云库学习VS2010(X64)》Part 41 图形学领域的关键算法及源码链接
热门文章
- Intellij IDEA汉化教程
- [LeetCode] 118. Pascal's Triangle Java
- Struts2的Action中访问servletAPI方式
- stm32端口复用和重映射
- Ubuntu12.04中eclipse提示框黑色背景色修改
- c语言字符数组的应用编程,C语言基础(一)
- 让IT不加班,让业务不等待,一文讲透自助式分析的前世今生
- 华为鸿蒙系统是指芯片吗_没有了芯片,华为能靠鸿蒙OS系统打出差异化吗?
- seo伪原创工具_伪原创工具哪个好用?
- python三维数组表示方法_Python操作多维数组和矩阵