赞
踩
关于任务栈和系统栈的基础知识,可以参考之前的随笔。(FreeRTOS 任务栈大小确定及其溢出检测)
这里再次说明:
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
这个宏,官方文档解释:
configTOTAL_HEAP_SIZE就是FreeRTOS堆中可用的RAM总量。
只有在configSUPPORT_DYNAMIC_ALLOCATION设置为1并且应用程序使用FreeRTOS源代码下载中提供的一个示例内存分配方案时(heap1,2,3,4,5.c源文件,这里我使用的是heap4),才会使用此值。有关详细信息,请参阅内存分配部分。
我全局搜索工程,并没有发现configSUPPORT_DYNAMIC_ALLOCATION这个宏,然后,直接看官方解释:
具体的configTOTAL_HEAP_SIZE 需要分配多大,确实没有一个简单可行的方式,但是,当我们遇到程序莫名崩溃或者卡死的时候,先试试把configTOTAL_HEAP_SIZE 的大小增大试试看。就在上一个项目中,我增加了一个任务中的几百行代码,然后发现我的系统会出现崩溃情况,我试着把
任务栈从512提高到1024,依然还是出现崩溃,再然后,我明白不是任务栈的大小问题,但应该就是某个内存分配出了问题(当然,这是建立在我已经检查过代码没有非法操作的情况下),最后,我试着把configTOTAL_HEAP_SIZE 改成20* 1024,果然,立马系统正常运行了。
这说明确实是RAM不够用了,特此记录。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。