FreeRTOS不同内存管理策略的区别

来源于正点原子《STM32F1 FreeRTOS开发手册 V1.1》
第二十章 内存管理 20.7 heap_5内存分配方法(P391):

heap_1 最简单,但是只能申请内存,不能释放。
heap_2 提供了内存释放函数,用户代码也可以直接调用函数pvPortMalloc()和vPortFree()来申请和释放内存,但是 heap_2 会导致内存碎片的产生!
heap_3 是对标准 C 库中的函数 malloc()和 free()的简单封装,并且提供了线程保护。
heap_4 相对与 heap_2 提供了内存合并功能,可以降低内存碎片的产生,我们移植 FreeRTOS 的时候就选择了heap_4。
heap_5 基本上和heap_4 一样,只是 heap_5 支持内存堆使用不连续的内存块。

一般,对于无外部RAM的MCU就选择heap_4,如外接了大容量SRAM,则选择heap_5,因为heap_4不能同时拥有内部RAM和外部SRAM,只能二选一,而heap_5则可以内部、外部RAM同时一起作为内存堆来使用。但在使用前必须先调用vPortDefineHeapRegions()函数来对内存堆初始化处理,在此之前不能直接或间接的去调用会使用pvPortMalloc()函数的API,如创建任务、信号量、队列等。

posted @ 2024-08-27 17:15  yinsua  阅读(16)  评论(0编辑  收藏  举报