|
5rg4hsiwnr564011345008.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
5rg4hsiwnr564011345008.gif
2024-9-9 09:52 上傳
$ F9 n. E8 m- f7 j" M點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
+ ^+ N: u* @1 N3 g, E v( B
8 v( V) F% }& _1 z2 [' T程序說(shuō)明如下:! i% t7 Z3 c# D$ U9 A) x
(1)、硬件初始化。硬件初始化這一步還屬于裸機(jī)的范疇,我們可以把需要使用到的硬件都初始化好而且測(cè)試好,確保無(wú)誤。7 }% b. N+ q+ b% R4 @ U
(2)、RTOS 系統(tǒng)初始化。比如 RTOS 里面的全局變量的初始化,空閑任務(wù)的創(chuàng)建等。不同的 RTOS,它們的初始化有細(xì)微的差別。" a; j7 C2 e6 R& \# a+ }' `! o
(3)、創(chuàng)建各種任務(wù)。這里把所有要用到的任務(wù)都創(chuàng)建好,但還不會(huì)進(jìn)入調(diào)度,因?yàn)檫@個(gè)時(shí)候 RTOS 的調(diào)度器還沒(méi)有開(kāi)啟。
0 J, p1 b4 r8 B$ ~; I+ W) C% N(4)、啟動(dòng) RTOS 調(diào)度器,開(kāi)始任務(wù)調(diào)度。這個(gè)時(shí)候調(diào)度器就從剛剛創(chuàng)建好的任務(wù)中選擇一個(gè)優(yōu)先級(jí)最高的任務(wù)開(kāi)始運(yùn)行。
3 O* [3 S/ x, W1 g' h(5)(6)、任務(wù)實(shí)體通常是一個(gè)不帶返回值的無(wú)限循環(huán)的 C 函數(shù),函數(shù)體必須有阻塞的情況出現(xiàn),不然任務(wù)(如果優(yōu)先權(quán)恰好是最高)會(huì)一直在 while 循環(huán)里面執(zhí)行,導(dǎo)致其它任務(wù)沒(méi)有執(zhí)行的機(jī)會(huì)。
3 A m1 }* U+ f( y, n2/ v" }& n+ F! [& |$ J
main函數(shù)中初始化硬件和RTOS,創(chuàng)建啟動(dòng)任務(wù)
2 l" p: P, I# D這種方法是在 main 函數(shù)中將硬件和 RTOS 系統(tǒng)先初始化好,然后創(chuàng)建一個(gè)啟動(dòng)任務(wù)后就啟動(dòng)任務(wù)調(diào)度器,然后在啟動(dòng)任務(wù)里面創(chuàng)建各種應(yīng)用任務(wù),當(dāng)所有任務(wù)都創(chuàng)建成功后,啟動(dòng)任務(wù)把自己刪除。
% h' d( y# m$ ]: \' Y1 k$ p1 }; ~. {. O8 S$ W- E5 p$ t
偽代碼如下所示:
; Y8 y5 |2 @" I& S4 X0 l4 v
8 [5 T# E- o9 {
24rbexrjx1s64011345108.png (154.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
24rbexrjx1s64011345108.png
2024-9-9 09:52 上傳
: K7 t+ b% e c. N
" x& l5 X$ \/ M9 l程序說(shuō)明如下:1 n& A3 p9 w( G! k! A
(1)、硬件初始化。來(lái)到硬件初始化這一步還屬于裸機(jī)的范疇,我們可以把需要使用到的硬件都初始化好而且測(cè)試好,確保無(wú)誤。8 L: e* d8 h$ _ m3 ^# l: `$ m
(2)、RTOS 系統(tǒng)初始化。比如 RTOS 里面的全局變量的初始化,空閑任務(wù)的創(chuàng)建等。不同的 RTOS,它們的初始化有細(xì)微的差別。- \; m6 i9 H. a6 H! L5 O$ H# j
(3)、創(chuàng)建一個(gè)開(kāi)始任務(wù)。然后在這個(gè)初始任務(wù)里面創(chuàng)建各種應(yīng)用任務(wù)。$ ` k' D ~$ e- I4 l$ Q, I
(4)、啟動(dòng) RTOS 調(diào)度器,開(kāi)始任務(wù)調(diào)度。這個(gè)時(shí)候調(diào)度器就去執(zhí)行剛剛創(chuàng)建好的初始任務(wù)。
; \- y$ l, r) z+ m& L9 P; G) F(5)、我們通常說(shuō)任務(wù)是一個(gè)不帶返回值的無(wú)限循環(huán)的 C函數(shù),但是因?yàn)槌跏既蝿?wù)的特殊性,它不能是無(wú)限循環(huán)的,只執(zhí)行一次后就關(guān)閉。在初始任務(wù)里面我們創(chuàng)建我們需要的各種任務(wù)。9 }. E0 Z: {' j6 @/ l% p" n1 u
(6)、創(chuàng)建任務(wù)。每創(chuàng)建一個(gè)任務(wù)后它都將進(jìn)入就緒態(tài),系統(tǒng)會(huì)進(jìn)行一次調(diào)度,如果新創(chuàng)建的任務(wù)的優(yōu)先級(jí)比初始任務(wù)的優(yōu)先級(jí)高的話,那將去執(zhí)行新創(chuàng)建的任務(wù),當(dāng)新的任務(wù)阻塞時(shí)再回到初始任務(wù)被打斷的地方繼續(xù)執(zhí)行。反之,則繼續(xù)往下創(chuàng)建新的任務(wù),直到所有任務(wù)創(chuàng)建完成。
$ s2 F3 e5 Y; y9 R# }(7)、各種應(yīng)用任務(wù)創(chuàng)建完成后,初始任務(wù)自己關(guān)閉自己,使命完成。
: `) w. \; Q& T(8)(9)、任務(wù)實(shí)體通常是一個(gè)不帶返回值的無(wú)限循環(huán)的 C 函數(shù),函數(shù)體必須有阻塞的情況出現(xiàn),不然任務(wù)(如果優(yōu)先權(quán)恰好是最高)會(huì)一直在 while 循環(huán)里面執(zhí)行,其它任務(wù)沒(méi)有執(zhí)行的機(jī)會(huì)。; R1 h. x" M0 Z9 r0 Q
) c7 w" A4 W/ {- z那有關(guān)這兩種方法孰優(yōu)孰劣?我暫時(shí)沒(méi)發(fā)現(xiàn)。LiteOS 和 ucos 第1種和第2種都可以使用,由用戶選擇,RT-Thread 和 FreeRTOS 則默認(rèn)使用第二種。5 Q- @9 x f7 L, q5 V {
- \+ m9 o8 I4 t, p( c1 @
4135xdt4dha64011345208.png (401 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
4135xdt4dha64011345208.png
2024-9-9 09:52 上傳
& S8 H0 s$ k1 Z
往期推薦詳解FreeRTOS:嵌入式軟件系統(tǒng)架構(gòu)
0 S' F1 M T( L# Z; {5 c詳解FreeRTOS:嵌入式多任務(wù)系統(tǒng)的多任務(wù)機(jī)制) ]: ^ W# v$ z4 |% T
一種高速ADC和DAC轉(zhuǎn)換電路分享) y; _ j/ H+ i
CAN FD網(wǎng)絡(luò)中每秒最多可以發(fā)送多少幀報(bào)文?8 [6 a( {7 V2 g& n$ {/ ?
; a2 E3 P3 i5 D; ~9 p* y, U7 T( d0 d
41kxye4egjc64011345308.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
41kxye4egjc64011345308.jpg
2024-9-9 09:52 上傳
7 n& `& V( B+ n
icyxq5dw1y464011345408.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
icyxq5dw1y464011345408.gif
2024-9-9 09:52 上傳
1 L P* ]% o9 T P+ v3 |( X點(diǎn)擊閱讀原文,更精彩~ |
|