FreeRTOS 創建任務、隊列、信號量等的時候有兩種方法,一種是動態的申請所需的 RAM。一種是由用戶自行定義所需的 RAM,這種方法也叫靜態方法,使用靜態方法的函數一般以“Static”結尾,比如任務創建函數 xTaskCreateStatic(),使用此函數創建任務的時候需要由用戶定義任務堆棧,我們不討論這種靜態方法。
使用動態內存管理的時候 FreeRTOS 內核在創建任務、隊列、信號量的時候會動態的申請 RAM。標準 C 庫中的 malloc()和 free()也可以實現動態內存管理,但是如下原因限制了其使用:
● 在小型的嵌入式系統中效率不高。
● 會占用很多的代碼空間。
● 它們不是線程安全的。
● 具有不確定性,每次執行的時間不同。
● 會導致內存碎片。
● 使鏈接器的配置變得復雜。
不同的嵌入式系統對于內存分配和時間要求不同,因此一個內存分配算法可以作為系統的可選選項。FreeRTOS 將內存分配作為移植層的一部分,這樣 FreeRTOS 使用者就可以使用自己的合適的內存分配方法。
當內核需要 RAM 的時候可以使用 pvPortMalloc()來替代 malloc()申請內存,不使用內存的時候可以使用 vPortFree()函數來替代 free()函數釋放內存。函數 pvPortMalloc()、vPortFree()與函數 malloc()、free()的函數原型類似。
FreeRTOS 提供了 5 種內存分配方法,FreeRTOS 使用者可以其中的某一個方法,或者自己的內存分配方法。這 5 種方法是 5 個文件,分別為:heap_1.c、heap_2.c、heap_3.c、heap_4.c 和heap_5.c。這 5 個文件再 FreeRTOS 源碼中,路徑:FreeRTOS-》Source-》portable-》MemMang。
-
嵌入式
+關注
關注
5082文章
19104瀏覽量
304816 -
內存
+關注
關注
8文章
3019瀏覽量
74005 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62144
發布評論請先 登錄
相關推薦
評論