heap_5 內(nèi)存分配方法
heap_5 使用了和 heap_4 相同的合并算法,內(nèi)存管理實現(xiàn)起來基本相同,但是heap_5 允許內(nèi)存堆跨越多個不連續(xù)的內(nèi)存段。比如 STM32 的內(nèi)部 RAM 可以作為內(nèi)存堆,但是 STM32 內(nèi)部 RAM 比較小,遇到那些需要大容量 RAM 的應(yīng)用就不行了,如音視頻處理。不過STM32 可以外接 SRAM 甚至大容量的 SDRAM,如果使用 heap_4 的話你就只能在內(nèi)部 RAM 和外部SRAM 或 SDRAM 之間二選一了,使用 heap_5 的話就不存在這個問題,兩個都可以一起作為內(nèi)存堆來用。
如果使用 heap_5 的話,在調(diào)用 API 函數(shù)之前需要先調(diào)用函數(shù) vPortDefineHeapRegions ()來對內(nèi)存堆做初始化處理,在 vPortDefineHeapRegions()未執(zhí)行完之前禁止調(diào)用任何可能會調(diào)用pvPortMalloc()的 API 函數(shù)!比如創(chuàng)建任務(wù)、信號量、隊列等函數(shù)。函數(shù) vPortDefineHeapRegions()只有一個參數(shù),參數(shù)是一個 HeapRegion_t 類型的數(shù)組,HeapRegion 為一個結(jié)構(gòu)體,此結(jié)構(gòu)體在portable.h 中有定義,定義如下:
typedefstructHeapRegion
{
uint8_t*pucStartAddress;//內(nèi)存塊的起始地址
size_txSizeInBytes;//內(nèi)存段大小
}HeapRegion_t;
使用 heap_5 的時候在一開始就應(yīng)該先調(diào)用函數(shù) vPortDefineHeapRegions()完成內(nèi)存堆的初始化!然后才能創(chuàng)建任務(wù)、信號量這些東西。
-
嵌入式
+關(guān)注
關(guān)注
5150文章
19659瀏覽量
317398 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3122瀏覽量
75248 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4379瀏覽量
64835 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
493瀏覽量
64305
發(fā)布評論請先 登錄
第28章 FreeRTOS動態(tài)內(nèi)存管理
基于FreeRTOS內(nèi)存管理Heap_4.c的實現(xiàn)方法
為什么既然已經(jīng)用上了FreeRTOS,還要再用自己的內(nèi)存分配方案呢
STM32內(nèi)存結(jié)構(gòu)介紹和FreeRTOS內(nèi)存分配技巧
FreeRTOS代碼剖析之1:內(nèi)存管理Heap

FreeRTOS代碼剖析之2:內(nèi)存管理Heap

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

STM32內(nèi)存結(jié)構(gòu)介紹,FreeRTOS內(nèi)存分配技巧,Stack_Size和Heap_Size大小設(shè)置

heap_1內(nèi)存分配方法
heap_2內(nèi)存的特性與分配方法
FreeRTOS heap_3內(nèi)存分配方法

評論