FreeRTOS 之五種內存分配方案(概括總結)

一.FreeRTOS 之五種內存分配方案

Heap_1:

      (1).在此方案中,實現了基礎版本的pcPortMalloc ,而沒有實現vPortFree(),因此它適用於從來不會刪除任務的應用

      ( 2) 動態分配的內存總是確定的 ,不會產生內存碎片

                                 

Heap_2:

     該方案不同於方案1,它可以進行任務的刪除,對空間進行釋放,但是,它不能將相鄰的兩塊相對小的空間進行合併,有可能造成內存碎片的問題,該方案在官方的文檔中不推薦使用,它被Heap_4所代替

                   

在圖中,可以看出將任務釋放之後,會有兩塊不一樣大的空間,這是若創建隊列,將可能佔據原先的棧空間或TCB空間,再將隊列刪除之後就有可能將空間再變小,之後若刪除隊列,那麼再次創建任務的時候就不能在原來那裏開闢空間了,因此造成了內存碎片

所以該方案只適合於頻繁刪除,創建相同任務的應用

Heap_3:

在此方案中,pcPortMalloc(),vPortFree() 和原先的Malloc(),free()的區別是,前者保證了是線程安全的

Heap_4:

該方案是Heap_2的增強版,可以對可以合併兩塊相鄰的內存空間,使之變大。

在圖中我們可以看到在任務空間釋放之後,又創建了隊列,隨之又創建了用戶數據,之後,將隊列,用戶數據刪除之後,又是還原回一塊大的內存空間,因此該方案被推薦代替Heap_2

Heap_5:

該方案是對Heap_4,進行再次的增強,將不相鄰的代碼內存空間進行鏈接使用,變成更大的內存空間。

 

 

ref:

161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章