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