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

2019-07-21 08:25发布

为什么在FATFS试验中有两个exfuns_init();  //为FATFS相关变量申请内存  1、其中第一个exfuns_init();  是在初始化内部内存池之前,第二个是在之后,注释掉一个编译下载都没有问题(为什么注释掉第二个会没有问题呢,先申请再初始化没问题吗,不应该先初始化再申请吗?)。 2、注释掉两个编译没问题,下载显示Fatfs Error!为什么一定要为它申请内存才不会出错呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-07-21 08:44
1,
因为我们的malloc里面,看代码:
if(!mallco_dev.memrdy[memx])mallco_dev.init(memx);//未初始化,先执行初始化 
如果没初始化,会先初始化的。

2,
因为用到了内存管理
jermy_z
2楼-- · 2019-07-21 12:14
 精彩回答 2  元偷偷看……
善良的二哥
3楼-- · 2019-07-21 12:18
回复【2楼】jermy_z:
---------------------------------
谢谢jermy_z解答:
1.代码没修改,按理说申请内存应该是内存初始化以后再申请吧,为什么一定第二个不需要呢?
2.第二个问题如果不申请内存也不会报错,extern FATFS *fs[2]; 这边都申明了,为什么一定要给它申请内存呢。我这样理解:我定义一个u8 data[100]的数组,申不申请内存都是可以吧,这个不一样吗?可能是我理解还不到位,麻烦帮解释下。
善良的二哥
4楼-- · 2019-07-21 17:16

回复【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;

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

正点原子
5楼-- · 2019-07-21 20:23
1,会申请的。
2,是的。
善良的二哥
6楼-- · 2019-07-22 01:18
回复【6楼】正点原子:
---------------------------------
谢谢原子哥耐心解答!

一周热门 更多>