電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 45|回復: 0
收起左側(cè)

詳解FreeRTOS:FreeRTOS編程方法

[復制鏈接]

660

主題

660

帖子

4567

積分

四級會員

Rank: 4

積分
4567
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2023-7-26 12:00:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

( 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

, 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 % 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
( D5 a2 [/ c; o0 H8 a# Q + M' n  x7 _; C4 `+ \
點擊閱讀原文,更精彩~
回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表