博客專欄

EEPW首頁 > 博客 > 詳解FreeRTOS:FreeRTOS編程方法

詳解FreeRTOS:FreeRTOS編程方法

發(fā)布人:美男子玩編程 時間:2023-07-28 來源:工程師 發(fā)布文章

在目前的 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)系工作人員刪除。



關鍵詞: FreeRTOS

相關推薦

技術專區(qū)

關閉