FreeRTOS 堆内存
OSAL源码
| 文件 | 作用 |
|---|---|
| osal_heap.h | 公开接口 |
| osal_internal_heap.h | Wrapper与适配层接口 |
| osal_heap.c | 参数检查与封装 |
| os_impl_heap.c | pvPortMalloc()和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;
}堆内存接口不能在中断中调用。申请者负责明确所有权,确保每次成功申请最终都有一次释放。