芯片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只验证某一功能,资源足够。如果做完整方案的时候是要考虑变量类型。