欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 解决因内存过小芯片使用malloc造成内存碎片使程序偶发性卡死问题

解决因内存过小芯片使用malloc造成内存碎片使程序偶发性卡死问题

2024/10/25 13:08:27 来源:https://blog.csdn.net/OMGMac/article/details/143082402  浏览:    关键词:解决因内存过小芯片使用malloc造成内存碎片使程序偶发性卡死问题

这一期,我们来分享一个之前在项目中遇到的一个使用内存出现的偶发性错误,具体原因是因为当时开发的项目采用的是STM32F1系列的103RCT6型号,其Flash为256K。

错误原因:

因为项目中采用了第三方的组件和FreeRTOS,FreeRTOS因为选择的是heap4.c内存方案,所以申请和释放的内存都会合并减少产生内存碎片,倒是不会出现内存不足造成的系统性崩坏。

而第三方组件中因为申请释放内存采用的是malloc和free,加上程序代码占用和一些静态存储占用,本身256K内存剩余不多,所以出现内存碎片就会导致对于小容量的芯片在后期动态内存申请上造成不足,容易出现hardfault_handler错误

而标题为什么会说是偶发性的是因为你的产品如果有很大的量,可能不一定每个都会出现内存申请不足,因为malloc内存申请是随机的,所以有可能会造成下次申请的所需内存空间大于剩下的内存碎片,也有可能正好小于,满足所需要的内存空间,存在不确定性,这样有可能出现你调试时候没问题,但是在生产时候就会出现问题。

因此,如果有出现这种情况可以参考我下面的解决方法!

解决方法:

所以如果没有使用os就尽量手动申请内存,减少使用malloc,造成内存碎片;如果使用os,像FreeRTOS的heap4内存方案,会将内存申请空间相近,减少内存碎片产生,尤其适用于像单片机内存只有几十KB或者几百KB的情况下。

好了,今天的分享就到这里了~

本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞和收藏,谢谢~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com