OpenEdv-开源电子网

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

exfuns_init();为什么申请内存可以在mem_init(SRAMIN);初始化内存池之前?

[复制链接]

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2015-6-8 11:29:21 | 显示全部楼层 |阅读模式
5金钱

为什么在FATFS试验中有两个exfuns_init();  //为FATFS相关变量申请内存

1、其中第一个exfuns_init();  是在初始化内部内存池之前,第二个是在之后,注释掉一个编译下载都没有问题(为什么注释掉第二个会没有问题呢,先申请再初始化没问题吗,不应该先初始化再申请吗?)。

2、注释掉两个编译没问题,下载显示Fatfs Error!为什么一定要为它申请内存才不会出错呢?

最佳答案

查看完整内容[请看2#楼]

1, 因为我们的malloc里面,看代码: if(!mallco_dev.memrdy[memx])mallco_dev.init(memx);//未初始化,先执行初始化  如果没初始化,会先初始化的。 2, 因为用到了内存管理
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-8 11:29:22 | 显示全部楼层
1,
因为我们的malloc里面,看代码:
if(!mallco_dev.memrdy[memx])mallco_dev.init(memx);//未初始化,先执行初始化 
如果没初始化,会先初始化的。

2,
因为用到了内存管理
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

70

主题

6764

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13140
金钱
13140
注册时间
2012-11-26
在线时间
3815 小时
发表于 2015-6-8 14:02:07 | 显示全部楼层
1、如果你的代码没修改过,第二个是不需要的,如果原代码有,可能是复制错了

2、给你饭吃,然后不给你碗,你说有没有问题
学无止境
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-8 20:32:45 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
谢谢jermy_z解答:
1.代码没修改,按理说申请内存应该是内存初始化以后再申请吧,为什么一定第二个不需要呢?
2.第二个问题如果不申请内存也不会报错,extern FATFS *fs[2]; 这边都申明了,为什么一定要给它申请内存呢。我这样理解:我定义一个u8 data[100]的数组,申不申请内存都是可以吧,这个不一样吗?可能是我理解还不到位,麻烦帮解释下。
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-9 09:11:04 | 显示全部楼层

回复【4楼】正点原子:
---------------------------------
谢谢原子哥的回答。第一个看明白了。

第二个说因为用到了内存管理:

1.这个在为fs[0]和fs[1]申请内存之前,只是定义了fs[0]和fs[1]是指向FATFS类型的指针(FATFS* fs[2]),32位系统中指针是占四个字节,这样的话fs[0]在内存中应该分配到了相应的地址(占四个字节),但是并未真正分配sizeof(FATFS)个内存空间给FATFS变量是吧?

2.如果我这样写:

FATFS fs[2];

FIL file;    
FIL ftemp;     
UINT br,bw; 
FILINFO fileinfo; 
DIR dir;     

u8 fatbuf;

是不是就不需要为他们申请内存了?

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-9 23:43:24 | 显示全部楼层
1,会申请的。
2,是的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-10 10:04:36 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
谢谢原子哥耐心解答!
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-6-10 11:03:22 | 显示全部楼层
把指针在细细看了下,发现FATFS *fs[2];之后要为它分配空间的原因。类似于下面:
int *a; *a=1;这样虽然可能编译能过,但是有危险,向一个未知的地址赋值,可能会引起系统奔溃,应该是同一个道理。
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
186
金钱
186
注册时间
2018-10-27
在线时间
57 小时
发表于 2018-11-1 14:39:10 | 显示全部楼层
正点原子 发表于 2015-6-9 23:43
1,会申请的。
2,是的。

exfuns_init()不调用可以吗?现在碰到一个奇怪现象,sd+fatfs+usb读卡器,exfuns_init()不调用可以看到存储卡文件,调用后不显示存储卡文件
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-6 01:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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