日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          "); //-->

          博客專欄

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

          詳解FreeRTOS:FreeRTOS編程方法

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

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

          1

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

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

          偽代碼如下所示:

          圖片


          程序說(shuō)明如下:

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

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

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

          (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)行。

          (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ì)。

          2

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

          這種方法是在 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ù)把自己刪除。

          偽代碼如下所示:


          圖片


          程序說(shuō)明如下:

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

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

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

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

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

          (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)建完成。

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

          (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ì)。

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

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



          關(guān)鍵詞: FreeRTOS

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉