a22 dfu升级到最后一点会重启、ram不够问题、malloc和静态变量申请内存的位置、freertos的malloc大小设置、

问题:a22在添加插值算法的时候,发现播放功能正常,但是dfu升级到最后一点会重启的问题,定位发现是因为申请了一个很大的静态变量

初步判断是静态变量内存不够了而引起的问题:

关于单片机的内存可以看这个:"D:\Engineering documents\单片机的内存管理.xmind"

单片机的内存管理_文武先生hh的博客-CSDN博客

 通过看keil的打印可以看出RAM=RW-data+ZI-data=50444+751856=802,300字节小于单片机内存的总大小1M,所以总的大小是够的,进一步看是静态变量的大小不够了

  

从上图可知静态变量和malloc内存是共用一块区域——ZI-data,那明明ZI-data大小是够的,为什么还会出现内存不够的问题呢,原来在freertos中,在系统运行的初期会划走一部分空间专门给malloc用,这块内存是不能给静态变量用的,所以即使在总的使用ram没到达1M的时候,静态变量也会放不下的问题,查看FreeRTOS的配置文件FreeRTOSConfig.h中,可以通过configTOTAL_HEAP_SIZE来设置动态内存堆的总大小,可以看出malloc划走了350k的大小,这么算起来,静态变量的大小确实是不够的

然后通过使用函数xPortGetFreeHeapSize()来获取动态内存堆剩余可申请空间的大小。该函数会返回当前剩余的可用堆空间大小(以字节为单位),通过此函数发现malloc还有较大的空间

所以修改代码为使用malloc来申请内存空间,如此问题解决:

其他相关:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文武先生hh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值