OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10970|回复: 4

移植FATFS给malloc函数准备的空间需要多大?

[复制链接]

4

主题

30

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2012-2-17
在线时间
123 小时
发表于 2013-11-3 23:55:50 | 显示全部楼层 |阅读模式

最近在学习FATFS文件系统,照着教程终于能读出文件内容了,程序中关于内存分配函数是参考keil自带的malloc函数写,用的内存池的方式,定义一个数组作为堆空间:
#define RAM_SIZE  0x1100  //这个取小了FATFS功能不正常
char ram[RAM_SIZE]
然后再初始化:
init_mempool(ram,RAM_SIZE);
问题就是上面那个地方的,目前读目录是正常的,但一旦把那个值取小一点(比如0x1000),功能就不正常了;

正常的时候,读多少次目录都有输出



不正常的时候,只有第一次能正常读,剩下就不行了,如果把堆空间设置更小一点,可能连第一次都读不出根目录文件来


难道是FATFS对内存分配函数预备的空间要求特别大?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-4 00:55:10 | 显示全部楼层
不知道是不是用的我的现成代码.
如果是,我初始化的时候,就从内存池里面申请了几K过去用了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

30

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2012-2-17
在线时间
123 小时
 楼主| 发表于 2013-11-4 08:44:39 | 显示全部楼层
谢谢原子,整个代码除了内存管理那块,其它是差不多的,另外我的型号是F103C8的,就一个最小系统,也没有外挂falsh和ram,所以还删掉了相关的代码;那你有没有试过把内存池总容量设置小一点?我现发现小于0x1100的基本上就不正常了.
附:我的内存管理代码

memory.h

1.28 KB, 下载次数: 648

memory.c

7.65 KB, 下载次数: 582

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-4 11:35:38 | 显示全部楼层
回复【3楼】frival:
---------------------------------
没试过,如果第一次可以第二次不行,看看是不是内存没有释放...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

30

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2012-2-17
在线时间
123 小时
 楼主| 发表于 2013-11-4 20:28:28 | 显示全部楼层

原子哥,终于知道怎么回事了,原来FATFS初始化需要分配的内存还挺多的,在内存分配函数中加了printf输出才发现的;
一上电就输出这个,
端口初始化成功
SD卡容量=29M
分配内存:564
分配内存:564
分配内存:552
分配内存:552
分配内存:512
加起来相当于十六进制的:0x0AB8,再运行一次扫描根目录,输出如下:
mf_scan_files("0:")分配内存:511

分配内存:512

free内存:512 

分配内存:512

free内存:512

0:/113

分配内存:512

free内存:512

0:/12322

分配内存:512

free内存:512

0:/in.txt

分配内存:512

free内存:512

0:/abc.txt
………………
后面信息省略
所以我开始分配的0x1000的空间是不够用的,再运行就提示错误了
mf_scan_files("0:")分配内存:512
分配失败
free内存:512
=0X11;

所以准备大约0x1100字节的堆空间才勉强够用,占用内存5K字节了,不知道那些用普通的51单片机玩文件系统是怎么做到的?

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-10 03:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表