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()完成內存堆的初始化!然后才能創建任務、信號量這些東西。
-
嵌入式
+關注
關注
5144文章
19575瀏覽量
315778 -
內存
+關注
關注
8文章
3115瀏覽量
75065 -
函數
+關注
關注
3文章
4374瀏覽量
64402 -
FreeRTOS
+關注
關注
12文章
492瀏覽量
63922
發布評論請先 登錄
基于FreeRTOS內存管理Heap_4.c的實現方法
為什么既然已經用上了FreeRTOS,還要再用自己的內存分配方案呢
FreeRTOS代碼剖析之1:內存管理Heap

FreeRTOS代碼剖析之2:內存管理Heap

FreeRTOS代碼剖析之3:內存管理Heap
韋東山freeRTOS系列教程之內存管理(2)

STM32內存結構介紹,FreeRTOS內存分配技巧,Stack_Size和Heap_Size大小設置

評論