FreeRTOS 堆内存

← 返回 FreeRTOS | ← 主页


OSAL源码

文件作用
osal_heap.h公开接口
osal_internal_heap.hWrapper与适配层接口
osal_heap.c参数检查与封装
os_impl_heap.cpvPortMalloc()和vPortFree()适配

1. 配置

FreeRTOSConfig.h 和 FreeRTOS 工程文件

#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configTOTAL_HEAP_SIZE (20U * 1024U)

FreeRTOS的 heap_1.c 到 heap_5.c 只能选择一个加入工程,常用 heap_4.c。

2. 申请

使用动态内存的业务 .c

sensor_data_t *data = osal_heap_alloc(sizeof(sensor_data_t));
if (data == NULL)
{
    /* 内存不足 */
}

3. 释放

使用动态内存的业务 .c

if (data != NULL)
{
    osal_heap_free(data);
    data = NULL;
}

堆内存接口不能在中断中调用。申请者负责明确所有权,确保每次成功申请最终都有一次释放。