内存管理
FreeRTOS提供了五种内存管理方式,heap_1到heap_5。源码路径为FreeRTOS\Source\portable\MemMang. FreeRTOS管理的内存在此处定义。
static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
Heap_1
只提供了pvPortMalloc,无法释放内存,适用于无需动态内存分配的场景。
Heap_2
提供了vPortFree接口,支持内存释放。添加了一个单向链表将每块内存连接在一起,并且按内存块大小从小到大排列。但是会造成内存碎片化的问题。
Heap_3
直接使用malloc和free
Heap_4
在Heap_2的基础上,使用了按内存地址从小到大排列的链表。在回收内存时如果发现相邻的可用内存块,会把它们合并成一个更大的内存块,一定程度解决了内存碎片化的问题。
Heap_5
在Heap_4的基础上,支持了对非连续内存的管理,如片外RAM。