FreeRTOS 并不直接使用C语言中的 malloc 和 free,它有自己的、依赖度低、移植性高的库。
FreeRTOS 在 portable/MemMang 目录下提供了5种可选的内存管理方案,分别对应不同的堆管理策略:
通常,使用的是 heap_4.c
heap1:只支持 malloc,不支持 free,没有 free 也就没有碎片。
heap2:比较完备,但是碎片问题严重。
heap3:对标准的 malloc 和 free 进行了封装,加入了保护。
heap4:对 heap2 的改进,加入相邻内存块合并机制
heap5:支持跨区多个内存块
内存相关函数
申请内存
void *pvPortMalloc(size_t xSize);释放内存
void vPortFree(void *pv);获取可用堆内存
算法解析
heap1算法
仅支持静态分配
无法释放