heap_5 内存分配方法
heap_5 使用了和 heap_4 相同的合并算法,内存管理实现起来基本相同,但是heap_5 允许内存堆跨越多个不连续的内存段。比如 STM32 的内部 RAM 可以作为内存堆,但是 STM32 内部 RAM 比较小,遇到那些需要大容量 RAM 的应用就不行了,如音视频处理。不过STM32 可以外接 SRAM 甚至大容量的 SDRAM,如果使用 heap_4 的话你就只能在内部 RAM 和外部SRAM 或 SDRAM 之间二选一了,使用 heap_5 的话就不存在这个问题,两个都可以一起作为内存堆来用。
如果使用 heap_5 的话,在调用 API 函数之前需要先调用函数 vPortDefineHeapRegions ()来对内存堆做初始化处理,在 vPortDefineHeapRegions()未执行完之前禁止调用任何可能会调用pvPortMalloc()的 API 函数!比如创建任务、信号量、队列等函数。函数 vPortDefineHeapRegions()只有一个参数,参数是一个 HeapRegion_t 类型的数组,HeapRegion 为一个结构体,此结构体在portable.h 中有定义,定义如下:
typedefstructHeapRegion
{
uint8_t*pucStartAddress;//内存块的起始地址
size_txSizeInBytes;//内存段大小
}HeapRegion_t;
使用 heap_5 的时候在一开始就应该先调用函数 vPortDefineHeapRegions()完成内存堆的初始化!然后才能创建任务、信号量这些东西。
-
嵌入式
+关注
关注
5056文章
18950浏览量
301479 -
内存
+关注
关注
8文章
2957浏览量
73782 -
函数
+关注
关注
3文章
4273浏览量
62290 -
FreeRTOS
+关注
关注
12文章
483浏览量
61892
发布评论请先 登录
相关推荐
评论