小虾丁 发表于 2017-1-11 11:48:23

IAR中动态内存的分配问题

使用的MCU型号为STM32L0x,在IAR中配置HEAP的大小为0x200,在程序中用语句char *p = malloc(10);来动态分配内存,链接时提示section placement failed. 如下图。是程序启动的时候,需要对HEAP进行初始化吗?如果需要,是调用什么函数进行初始化?请求帮助,谢谢了。




小虾丁 发表于 2017-1-12 12:04:31

还是我自己解答吧。:)
其实是我搞错了,链接时提示的错误,是代码空间(FLASH)不够大的意思。当使用malloc()后,编译出的代码超过了我设定的代码空间大小。
所以在IAR里设置堆栈的大小后,就可以用malloc()来动态分配内存了。
不过话说回来,我感觉还是要进行HEAP的初始化的,可能是IAR在__iar_program_start里做了吧,这个以后再去研究了。

小虾丁 发表于 2017-1-11 11:55:32

补充:虽然链接失败,但生成的.map文件中已经有HEAP段,起始地址是0x200018b8。是在所用MCU的RAM范围0x20000000~0x20001FFF之内。链接错误提示好像把动态内存分配到其他地址空间里去了。所以我想是IAR里还需要什么其他设置,或者是需要在程序里作HEAP的初始化操作。

andypanfan 发表于 2017-1-12 09:15:39

这个问题比较好,我好像没有在 里面malloc过!!!!!希望高手解答一下!!谢谢

ts2000 发表于 2017-1-12 10:58:00

没用过IAR,Keil好像不用这么麻烦。
页: [1]
查看完整版本: IAR中动态内存的分配问题