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()完成內存堆的初始化!然后才能創建任務、信號量這些東西。
-
嵌入式
+關注
關注
5082文章
19104瀏覽量
304817 -
內存
+關注
關注
8文章
3019瀏覽量
74005 -
函數
+關注
關注
3文章
4327瀏覽量
62573 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62144
發布評論請先 登錄
相關推薦
評論