打印
[技术问答]

malloc动态分配内存错误

[复制链接]
606|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
海滨消消|  楼主 | 2022-9-14 10:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯片NUC122,由于所有变量和数组都定义成静态的就太浪费资源。采用动态分配内存时发现malloc函数无法正常使用。

使用特权

评论回复
沙发
麻花油条| | 2022-9-14 10:38 | 只看该作者
在keil 中使用malloc()函数经常会遇到不正常的情况,通常表现为不能正确分配内存空间,或者只能分配很小的空间。
出现这个问题的原因大概有三个:
1、所用的ARM芯片本身内存已经被其代码占用,所余空间不够malloc分配。
解决办法:A、释放其他代码浪费的RAM空间;B、扩容。


使用特权

评论回复
板凳
麻花油条| | 2022-9-14 10:39 | 只看该作者
2、未进行堆的初始化:在KEIL中使用时,必需要对heap进行初始化,否则不能正常使用malloc。
解决办法:A、使用KEIL自带的启动代码,该汇编启动代码本身已经完成了对heap的初始化;(我们通常建立的工程都是使用KEIL自带的启动代码,或者在该基础上修改的代码,所以这个问题基本上不用考虑)
B、自己编写heap初始化汇编代码,该初始化代码必须放在调用C代码之前,最好放在启动代码中。

使用特权

评论回复
地板
麻花油条| | 2022-9-14 10:41 | 只看该作者
3、堆空间太小。
解决办法:在堆初始化代码中,将堆大小增加,一般0x400大小足够,如果不够的话,可根据实际调试情况进行增加。




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

使用特权

评论回复
5
Bowclad| | 2022-9-14 20:58 | 只看该作者
是,变量类型需要先考虑清除

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

237

主题

1584

帖子

2

粉丝