|
e0oa0rpjthe64025005426.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊
e0oa0rpjthe64025005426.gif
2024-9-12 09:50 上傳
( z4 ]$ J4 S# T' A點擊上方藍色字體,關(guān)注我們! D' F: |8 O# e) ~( S
0 R% }0 e$ ^/ L# {" h1 g程序說明如下:
2 |8 {6 @8 d0 g" p9 a4 I2 ~! K5 y(1)、硬件初始化。硬件初始化這一步還屬于裸機的范疇,我們可以把需要使用到的硬件都初始化好而且測試好,確保無誤。: i2 w1 o8 I0 w5 k$ q D9 X J* d
(2)、RTOS 系統(tǒng)初始化。比如 RTOS 里面的全局變量的初始化,空閑任務的創(chuàng)建等。不同的 RTOS,它們的初始化有細微的差別。
" O! z8 k& Y- E* o6 a2 d5 z3 E8 V4 J(3)、創(chuàng)建各種任務。這里把所有要用到的任務都創(chuàng)建好,但還不會進入調(diào)度,因為這個時候 RTOS 的調(diào)度器還沒有開啟。& e+ y" w$ [9 a0 b" @; g- D8 e
(4)、啟動 RTOS 調(diào)度器,開始任務調(diào)度。這個時候調(diào)度器就從剛剛創(chuàng)建好的任務中選擇一個優(yōu)先級最高的任務開始運行。
/ N$ U0 Q- J8 u2 \1 x(5)(6)、任務實體通常是一個不帶返回值的無限循環(huán)的 C 函數(shù),函數(shù)體必須有阻塞的情況出現(xiàn),不然任務(如果優(yōu)先權(quán)恰好是最高)會一直在 while 循環(huán)里面執(zhí)行,導致其它任務沒有執(zhí)行的機會。
2 _6 z5 T6 P3 R+ t( P' R. A25 g/ j8 N8 S9 p( O6 v% U/ I7 p
main函數(shù)中初始化硬件和RTOS,創(chuàng)建啟動任務
. S. n: u7 m) E# @! G0 T# R這種方法是在 main 函數(shù)中將硬件和 RTOS 系統(tǒng)先初始化好,然后創(chuàng)建一個啟動任務后就啟動任務調(diào)度器,然后在啟動任務里面創(chuàng)建各種應用任務,當所有任務都創(chuàng)建成功后,啟動任務把自己刪除。
1 c( b1 S3 V8 @1 v. K$ J6 t' [0 i! j; Z
偽代碼如下所示:: o+ u6 C* J/ p; t! N+ j
3 g# m- E8 T }( V# o) y0 C
b31vr4x1m2s64025005526.png (154.14 KB, 下載次數(shù): 1)
下載附件
保存到相冊
b31vr4x1m2s64025005526.png
2024-9-12 09:50 上傳
, v) W2 i* X) A: ]. L
) p3 ]% v" L2 j- x$ S; d程序說明如下:* M1 N/ t, l7 h8 c2 j: X$ z
(1)、硬件初始化。來到硬件初始化這一步還屬于裸機的范疇,我們可以把需要使用到的硬件都初始化好而且測試好,確保無誤。% d' F Z$ A; o2 c
(2)、RTOS 系統(tǒng)初始化。比如 RTOS 里面的全局變量的初始化,空閑任務的創(chuàng)建等。不同的 RTOS,它們的初始化有細微的差別。
6 c2 v' f/ N8 L; @. e: a(3)、創(chuàng)建一個開始任務。然后在這個初始任務里面創(chuàng)建各種應用任務。. G, ]# Q) ? Q3 e' }6 X
(4)、啟動 RTOS 調(diào)度器,開始任務調(diào)度。這個時候調(diào)度器就去執(zhí)行剛剛創(chuàng)建好的初始任務。
& s* W9 d: C! ^2 ~6 x! s1 f(5)、我們通常說任務是一個不帶返回值的無限循環(huán)的 C函數(shù),但是因為初始任務的特殊性,它不能是無限循環(huán)的,只執(zhí)行一次后就關(guān)閉。在初始任務里面我們創(chuàng)建我們需要的各種任務。' Q2 W8 U0 d$ ]* Y1 L- }( p
(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)建完成。
/ D% z5 \6 |. J(7)、各種應用任務創(chuàng)建完成后,初始任務自己關(guān)閉自己,使命完成。
" E, |( b6 J- k5 N6 n) P% i(8)(9)、任務實體通常是一個不帶返回值的無限循環(huán)的 C 函數(shù),函數(shù)體必須有阻塞的情況出現(xiàn),不然任務(如果優(yōu)先權(quán)恰好是最高)會一直在 while 循環(huán)里面執(zhí)行,其它任務沒有執(zhí)行的機會。. o" e; v; N; S6 b
1 B' |' K: _, g
那有關(guān)這兩種方法孰優(yōu)孰劣?我暫時沒發(fā)現(xiàn)。LiteOS 和 ucos 第1種和第2種都可以使用,由用戶選擇,RT-Thread 和 FreeRTOS 則默認使用第二種。
- s+ a( d$ J. u
+ K% _ N, `. S5 F. D
bsoq13yo5tc64025005626.png (401 Bytes, 下載次數(shù): 1)
下載附件
保存到相冊
bsoq13yo5tc64025005626.png
2024-9-12 09:50 上傳
% R& e) f% t; c+ g6 E$ u$ `1 m/ R
往期推薦詳解FreeRTOS:嵌入式軟件系統(tǒng)架構(gòu)6 N! S; h- U3 t- g
詳解FreeRTOS:嵌入式多任務系統(tǒng)的多任務機制7 Q2 A3 Y; ? C) x! `
一種高速ADC和DAC轉(zhuǎn)換電路分享
- h1 @/ X7 E/ S4 x- J+ Z iCAN FD網(wǎng)絡中每秒最多可以發(fā)送多少幀報文?/ H! X8 K X- w# g$ N0 W6 E
1 }7 V( K/ ?$ ?8 ^( D, T" o
sp51vcc4wt364025005726.jpg (71.14 KB, 下載次數(shù): 1)
下載附件
保存到相冊
sp51vcc4wt364025005726.jpg
2024-9-12 09:50 上傳
( D5 a2 [/ c; o0 H8 a# Q
w0a3g0ynksi64025005826.gif (45.46 KB, 下載次數(shù): 2)
下載附件
保存到相冊
w0a3g0ynksi64025005826.gif
2024-9-12 09:50 上傳
+ M' n x7 _; C4 `+ \
點擊閱讀原文,更精彩~ |
|