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