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