詳解FreeRTOS:FreeRTOS編程方法
在目前的 RTOS 中,主要有兩種比較流行的編程方法,接下來我將通過偽代碼的方式來講解下這兩種編程方式。
1
main函數(shù)中初始化硬件和RTOS,創(chuàng)建所有任務(wù)
這種方法是在 main 函數(shù)中將硬件初始化,RTOS 系統(tǒng)初始化,所有任務(wù)都創(chuàng)建好,最后啟動 RTOS 的調(diào)度器,開始多任務(wù)的調(diào)度。
偽代碼如下所示:
程序說明如下:
(1)、硬件初始化。硬件初始化這一步還屬于裸機(jī)的范疇,我們可以把需要使用到的硬件都初始化好而且測試好,確保無誤。
(2)、RTOS 系統(tǒng)初始化。比如 RTOS 里面的全局變量的初始化,空閑任務(wù)的創(chuàng)建等。不同的 RTOS,它們的初始化有細(xì)微的差別。
(3)、創(chuàng)建各種任務(wù)。這里把所有要用到的任務(wù)都創(chuàng)建好,但還不會進(jìn)入調(diào)度,因為這個時候 RTOS 的調(diào)度器還沒有開啟。
(4)、啟動 RTOS 調(diào)度器,開始任務(wù)調(diào)度。這個時候調(diào)度器就從剛剛創(chuàng)建好的任務(wù)中選擇一個優(yōu)先級最高的任務(wù)開始運行。
(5)(6)、任務(wù)實體通常是一個不帶返回值的無限循環(huán)的 C 函數(shù),函數(shù)體必須有阻塞的情況出現(xiàn),不然任務(wù)(如果優(yōu)先權(quán)恰好是最高)會一直在 while 循環(huán)里面執(zhí)行,導(dǎo)致其它任務(wù)沒有執(zhí)行的機(jī)會。
2
main函數(shù)中初始化硬件和RTOS,創(chuàng)建啟動任務(wù)
這種方法是在 main 函數(shù)中將硬件和 RTOS 系統(tǒng)先初始化好,然后創(chuàng)建一個啟動任務(wù)后就啟動任務(wù)調(diào)度器,然后在啟動任務(wù)里面創(chuàng)建各種應(yīng)用任務(wù),當(dāng)所有任務(wù)都創(chuàng)建成功后,啟動任務(wù)把自己刪除。
偽代碼如下所示:
程序說明如下:
(1)、硬件初始化。來到硬件初始化這一步還屬于裸機(jī)的范疇,我們可以把需要使用到的硬件都初始化好而且測試好,確保無誤。
(2)、RTOS 系統(tǒng)初始化。比如 RTOS 里面的全局變量的初始化,空閑任務(wù)的創(chuàng)建等。不同的 RTOS,它們的初始化有細(xì)微的差別。
(3)、創(chuàng)建一個開始任務(wù)。然后在這個初始任務(wù)里面創(chuàng)建各種應(yīng)用任務(wù)。
(4)、啟動 RTOS 調(diào)度器,開始任務(wù)調(diào)度。這個時候調(diào)度器就去執(zhí)行剛剛創(chuàng)建好的初始任務(wù)。
(5)、我們通常說任務(wù)是一個不帶返回值的無限循環(huán)的 C函數(shù),但是因為初始任務(wù)的特殊性,它不能是無限循環(huán)的,只執(zhí)行一次后就關(guān)閉。在初始任務(wù)里面我們創(chuàng)建我們需要的各種任務(wù)。
(6)、創(chuàng)建任務(wù)。每創(chuàng)建一個任務(wù)后它都將進(jìn)入就緒態(tài),系統(tǒng)會進(jìn)行一次調(diào)度,如果新創(chuàng)建的任務(wù)的優(yōu)先級比初始任務(wù)的優(yōu)先級高的話,那將去執(zhí)行新創(chuàng)建的任務(wù),當(dāng)新的任務(wù)阻塞時再回到初始任務(wù)被打斷的地方繼續(xù)執(zhí)行。反之,則繼續(xù)往下創(chuàng)建新的任務(wù),直到所有任務(wù)創(chuàng)建完成。
(7)、各種應(yīng)用任務(wù)創(chuàng)建完成后,初始任務(wù)自己關(guān)閉自己,使命完成。
(8)(9)、任務(wù)實體通常是一個不帶返回值的無限循環(huán)的 C 函數(shù),函數(shù)體必須有阻塞的情況出現(xiàn),不然任務(wù)(如果優(yōu)先權(quán)恰好是最高)會一直在 while 循環(huán)里面執(zhí)行,其它任務(wù)沒有執(zhí)行的機(jī)會。
那有關(guān)這兩種方法孰優(yōu)孰劣?我暫時沒發(fā)現(xiàn)。LiteOS 和 ucos 第1種和第2種都可以使用,由用戶選擇,RT-Thread 和 FreeRTOS 則默認(rèn)使用第二種
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。