malloc动态分配内存错误

fuzhen011 |浏览3022次
收藏|2014/10/30 13:47

芯片NUC122,由于所有变量和数组都定义成静态的就太浪费资源。采用动态分配内存时发现malloc函数无法正常使用。

满意回答

2022/09/05 15:06

在keil 中使用malloc()函数经常会遇到不正常的情况,通常表现为不能正确分配内存空间,或者只能分配很小的空间。
出现这个问题的原因大概有三个:
1、所用的ARM芯片本身内存已经被其代码占用,所余空间不够malloc分配。
解决办法:A、释放其他代码浪费的RAM空间;B、扩容。
2、未进行堆的初始化:在KEIL中使用时,必需要对heap进行初始化,否则不能正常使用malloc。
解决办法:A、使用KEIL自带的启动代码,该汇编启动代码本身已经完成了对heap的初始化;(我们通常建立的工程都是使用KEIL自带的启动代码,或者在该基础上修改的代码,所以这个问题基本上不用考虑)
B、自己编写heap初始化汇编代码,该初始化代码必须放在调用C代码之前,最好放在启动代码中。
3、堆空间太小。
解决办法:在堆初始化代码中,将堆大小增加,一般0x400大小足够,如果不够的话,可根据实际调试情况进行增加。



另外,变量是不是定义成静态看实际需要。democode只验证某一功能,资源足够。如果做完整方案的时候是要考虑变量类型。


admin

其他回答(0)
0人关注该问题
+1
 加载中...