1. 简介
在使用FreeRTOS创建任务、队列、信号量等对象的时候,一般有动态和静态两种方法。
-
动态方法: 由FreeRTOS在创建任务、队列、信号量等对象的时候自动地i从所管理的内存堆中申请所创建所需的内存。在对象被删除后,该内存又会释放到FreeRTOS管理的内存堆中。
-
静态方法: 由用户自定义对象,编译器在编译程序时,会为已经在程序中定义好的对象分配一定的内存空间。创建任务等对象的API函数一般是“static”结尾。并且,静态创建各种对象时需要用户提供各种内存空间。在删除任务、队列等对象后,这些被占用的内存空间会因为被固定下来而没有其他用途。
1.1 不用标准的c库自带的内存管理算法
- 占用大量的代码空间
- 没有线程安全的相关机制
- 运行有不确定性,每次调用这些函数时花费的时间可能都不相同
- 内存碎片化
FreeRTOS内存管理算法
FreeRTOS内存管理相关API函数
申请内存
在一段内存没有被释放之前绝对不能再调用一次函数pvPortMalloc()
为其再次分配内存,否则会导致内存泄漏
void * pvPortMalloc(size_t xWantedSize);
释放内存
void vPortFree(void * pv);
获取当前空闲内存的大小
size_t xPortGetFreeHeapSize(void);