概述
标准的内存函数是malloc和free,但是对于嵌入式系统来说,可能会有以下问题:
- 这两个函数在小型嵌入式系统中可能不可用
- 这两个函数的具体实现可能会相对较大,会占用较多的代码空间
- 这两个函数通常不具备线程安全特性
- 这两个函数具有不确定性,每次调用的时间开销都可能不同
- 这两个函数会产生内存碎片
- 这两个函数会使得链接器配置变得复杂
因此对于FreeRTOS来说,通常提供pvPortMalloc()而不是malloc(),vPortFree()而不是free()
分配方案
FreeRTOS有三种内存分配方案
- Heap_1.c
构建一个静态数组,只分配,没有实现free - Heap_2.c
静态数组,可以分配和释放,但是不处理内存碎片的问题 - Heap_3.c
调用标准malloc和free,通过暂时挂起调度器使得函数调用具备线程安全特性。