xTaskCreate内存不足分析

/ 1评 / 1

使用xTaskCreate创建一个任务,提示errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY,明明configTOTAL_HEAP_SIZE有3000那么多,为什么创建一个2560字节的Heap都会失败呢,那么就分析一下.

首先,我们传进去的其实是usStackDepth,实际还需要和StackType_t相乘,StackType_t取决于平台,像ARM平台默认是uint32_t,也就是传进去2560,实际是10240,还要包含8个字节的xHeapStructSize,即期望10248.

而3000的HEAP_SIZE初始化后也要占用一个 xHeapStruct,所以是2992字节.为了满足他分配,那么需要多大呢?

那当然是最小 8+(usStackDepth*StackType_t +8)+....

所以不能混淆这里分配的大小啊.

  1. xiaguangbo说道:

    STM32CubeMX生成的代码里,CMSIS_V1的FreeRTOS代码里的注释说是4字节是为了避免浮点什么什么的,是在代码里乘以4的。CMSIS_V2的任务创建函数则是用了一个结构体,里面的栈大小是要写“128 * 4”这样的

回复 xiaguangbo 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注