FreeRTOS中对于内存的管理当前一共有5种实现方式(作者当前的版本是10.1.1),均在【 \Source\portable\MemMang 】下面,这里笔记下。
pvPortMalloc() 和 vPortFree() 的实现是基于 malloc()和 free()实现的,此时configTOTAL_HEAP_SIZE 是无效的。
改变内存堆是通过修改启动文件来实现的。
heap3使得内存分配变得不确定性,可能会增加代码量。其特点是将标准函数的malloc()和free()函数封装,使其具有线程保护功能。
///
heap_3.c:
/*根据上面的注释可以知道,这里 pvPortMalloc() 和 vPortFree() 的实现是基于 malloc()和 free() 。
由于使用了标准C函数中的内存申请和释放,因此使用前一定要在工程中设置好堆内存。
*/
#include <stdlib.h>
/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining
all the API functions to use the MPU wrappers. That should only be done when
task.h is included from an application file. */
#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE
#include "FreeRTOS.h"
#include