FreeRTOS堆分配大小对任务数的影响

FreeRTOS堆分配(内存)如果不够大,可能引起FreeRTOS运行异常。

对于STM32芯片, 如果使用STM32CubeMX配置FreeRTOS,创建4个任务时,会引起FreeRTOS运行异常,原因是cube默认是使用heap_4.c文件来动态分配内存,并将堆大小设置为3072,见FreeRTOSConfig.c文件中的定义:

                              #define configTOTAL_HEAP_SIZE ((size_t)3072)

这个堆大小可以满足创建3个任务,但如果创建4个任务,程序将运行异常。经过断点调试,可以看到一个任务在创建时需要申请约600个字节的内存(使用默认的任务堆栈深度为128,即128*4=512字节,TCP块占用84个字节,共596字节;对于不同的FreeRTOS配置,这个数值略有差异)。将上述的3072增加为3670,此时创建4个任务,再次运行正常了。

你可能感兴趣的:(FreeRTOS堆分配大小对任务数的影响)