FreeRTOS之内存管理

文章目录

  • 选用
  • heap函数
    • pvPortMalloc/vPortFree
    • xPortGetFreeHeapSize
    • xPortGetMinimumEverFreeHeapSize
    • malloc 失败的钩子函数

选用

FreeRTOS之内存管理_第1张图片

文件 优点 缺点
heap_1.c 内存分配逻辑简单,执行时间可确定 仅能分配内存,无法回收已分配的内存
heap_2.c 支持动态内存分配,能实现最佳匹配(找到最适合请求大小的空闲内存块) 会产生内存碎片,内存分配和回收的执行时间不确定
heap_3.c 通过调用标准库函数来管理内存,兼容性较好 由于调用标准库,执行速度较慢,执行时间不确定
heap_4.c 能够将相邻的空闲内存块合并,有效减少内存碎片 执行时间不确定
heap_5.c 在heap_4.c基础上,支持不连续的、分隔的内存块管理,适应更复杂的内存布局 执行时间不确定
  • 在不需要回收时选heap_1最好,没有头部,一点也不浪费
  • 要分配和释放一般用heap_2和heap_4,heap_4是heap_2的改进,能合并相邻的内存块
  • heap_3一般不用
  • 实际上用得最多是heap_4和5 ,有多块内存用heap_5

heap函数

pvPortMalloc/vPortFree

void * pvPortMalloc( size_t xWantedSize );
void vPortFree( void * pv );

作用:分配内存、释放内存。
如果分配内存不成功,则返回值为NULL

xPortGetFreeHeapSize

size_t xPortGetFreeHeapSize( void );

当前还有多少空闲内存

xPortGetMinimumEverFreeHeapSize

size_t xPortGetMinimumEverFreeHeapSize( void );

返回程序运行过程中,空闲内存容量的最小值。

malloc 失败的钩子函数

在 pvPortMalloc 函数内部

void vApplicationMallocFailedHook( void );

如果想使用这个钩子函数: 在 FreeRTOSConfig.h 中,把configUSE_MALLOC_FAILED_HOOK 定义为 1, 提供 vApplicationMallocFailedHook 函数, pvPortMalloc 失败时,才会调用此函数

你可能感兴趣的:(单片机,stm32,arm开发,开发语言)