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