<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 詳解FreeRTOS:FreeRTOS編程方法

詳解FreeRTOS:FreeRTOS編程方法

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

在目前的 RTOS 中,主要有兩種比較流行的編程方法,接下來(lái)我將通過(guò)偽代碼的方式來(lái)講解下這兩種編程方式。

1

main函數中初始化硬件和RTOS,創(chuàng )建所有任務(wù)

這種方法是在 main 函數中將硬件初始化,RTOS 系統初始化,所有任務(wù)都創(chuàng )建好,最后啟動(dòng) RTOS 的調度器,開(kāi)始多任務(wù)的調度。

偽代碼如下所示:

圖片


程序說(shuō)明如下:

(1)、硬件初始化。硬件初始化這一步還屬于裸機的范疇,我們可以把需要使用到的硬件都初始化好而且測試好,確保無(wú)誤。

(2)、RTOS 系統初始化。比如 RTOS 里面的全局變量的初始化,空閑任務(wù)的創(chuàng )建等。不同的 RTOS,它們的初始化有細微的差別。

(3)、創(chuàng )建各種任務(wù)。這里把所有要用到的任務(wù)都創(chuàng )建好,但還不會(huì )進(jìn)入調度,因為這個(gè)時(shí)候 RTOS 的調度器還沒(méi)有開(kāi)啟。

(4)、啟動(dòng) RTOS 調度器,開(kāi)始任務(wù)調度。這個(gè)時(shí)候調度器就從剛剛創(chuàng )建好的任務(wù)中選擇一個(gè)優(yōu)先級最高的任務(wù)開(kāi)始運行。

(5)(6)、任務(wù)實(shí)體通常是一個(gè)不帶返回值的無(wú)限循環(huán)的 C 函數,函數體必須有阻塞的情況出現,不然任務(wù)(如果優(yōu)先權恰好是最高)會(huì )一直在 while 循環(huán)里面執行,導致其它任務(wù)沒(méi)有執行的機會(huì )。

2

main函數中初始化硬件和RTOS,創(chuàng )建啟動(dòng)任務(wù)

這種方法是在 main 函數中將硬件和 RTOS 系統先初始化好,然后創(chuàng )建一個(gè)啟動(dòng)任務(wù)后就啟動(dòng)任務(wù)調度器,然后在啟動(dòng)任務(wù)里面創(chuàng )建各種應用任務(wù),當所有任務(wù)都創(chuàng )建成功后,啟動(dòng)任務(wù)把自己刪除。

偽代碼如下所示:


圖片


程序說(shuō)明如下:

(1)、硬件初始化。來(lái)到硬件初始化這一步還屬于裸機的范疇,我們可以把需要使用到的硬件都初始化好而且測試好,確保無(wú)誤。

(2)、RTOS 系統初始化。比如 RTOS 里面的全局變量的初始化,空閑任務(wù)的創(chuàng )建等。不同的 RTOS,它們的初始化有細微的差別。

(3)、創(chuàng )建一個(gè)開(kāi)始任務(wù)。然后在這個(gè)初始任務(wù)里面創(chuàng )建各種應用任務(wù)。

(4)、啟動(dòng) RTOS 調度器,開(kāi)始任務(wù)調度。這個(gè)時(shí)候調度器就去執行剛剛創(chuàng )建好的初始任務(wù)。

(5)、我們通常說(shuō)任務(wù)是一個(gè)不帶返回值的無(wú)限循環(huán)的 C函數,但是因為初始任務(wù)的特殊性,它不能是無(wú)限循環(huán)的,只執行一次后就關(guān)閉。在初始任務(wù)里面我們創(chuàng )建我們需要的各種任務(wù)。

(6)、創(chuàng )建任務(wù)。每創(chuàng )建一個(gè)任務(wù)后它都將進(jìn)入就緒態(tài),系統會(huì )進(jìn)行一次調度,如果新創(chuàng )建的任務(wù)的優(yōu)先級比初始任務(wù)的優(yōu)先級高的話(huà),那將去執行新創(chuàng )建的任務(wù),當新的任務(wù)阻塞時(shí)再回到初始任務(wù)被打斷的地方繼續執行。反之,則繼續往下創(chuàng )建新的任務(wù),直到所有任務(wù)創(chuàng )建完成。

(7)、各種應用任務(wù)創(chuàng )建完成后,初始任務(wù)自己關(guān)閉自己,使命完成。

(8)(9)、任務(wù)實(shí)體通常是一個(gè)不帶返回值的無(wú)限循環(huán)的 C 函數,函數體必須有阻塞的情況出現,不然任務(wù)(如果優(yōu)先權恰好是最高)會(huì )一直在 while 循環(huán)里面執行,其它任務(wù)沒(méi)有執行的機會(huì )。

那有關(guān)這兩種方法孰優(yōu)孰劣?我暫時(shí)沒(méi)發(fā)現。LiteOS 和 ucos 第1種和第2種都可以使用,由用戶(hù)選擇,RT-Thread 和 FreeRTOS 則默認使用第二種

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: FreeRTOS

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>