博客專欄

        EEPW首頁 > 博客 > 詳解FreeRTOS:FreeRTOS編程方法

        詳解FreeRTOS:FreeRTOS編程方法

        發布人:美男子玩編程 時間:2023-07-28 來源:工程師 發布文章

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

        1

        main函數中初始化硬件和RTOS,創建所有任務

        這種方法是在 main 函數中將硬件初始化,RTOS 系統初始化,所有任務都創建好,最后啟動 RTOS 的調度器,開始多任務的調度。

        偽代碼如下所示:

        圖片


        程序說明如下:

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

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

        (3)、創建各種任務。這里把所有要用到的任務都創建好,但還不會進入調度,因為這個時候 RTOS 的調度器還沒有開啟。

        (4)、啟動 RTOS 調度器,開始任務調度。這個時候調度器就從剛剛創建好的任務中選擇一個優先級最高的任務開始運行。

        (5)(6)、任務實體通常是一個不帶返回值的無限循環的 C 函數,函數體必須有阻塞的情況出現,不然任務(如果優先權恰好是最高)會一直在 while 循環里面執行,導致其它任務沒有執行的機會。

        2

        main函數中初始化硬件和RTOS,創建啟動任務

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

        偽代碼如下所示:


        圖片


        程序說明如下:

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

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

        (3)、創建一個開始任務。然后在這個初始任務里面創建各種應用任務。

        (4)、啟動 RTOS 調度器,開始任務調度。這個時候調度器就去執行剛剛創建好的初始任務。

        (5)、我們通常說任務是一個不帶返回值的無限循環的 C函數,但是因為初始任務的特殊性,它不能是無限循環的,只執行一次后就關閉。在初始任務里面我們創建我們需要的各種任務。

        (6)、創建任務。每創建一個任務后它都將進入就緒態,系統會進行一次調度,如果新創建的任務的優先級比初始任務的優先級高的話,那將去執行新創建的任務,當新的任務阻塞時再回到初始任務被打斷的地方繼續執行。反之,則繼續往下創建新的任務,直到所有任務創建完成。

        (7)、各種應用任務創建完成后,初始任務自己關閉自己,使命完成。

        (8)(9)、任務實體通常是一個不帶返回值的無限循環的 C 函數,函數體必須有阻塞的情況出現,不然任務(如果優先權恰好是最高)會一直在 while 循環里面執行,其它任務沒有執行的機會。

        那有關這兩種方法孰優孰劣?我暫時沒發現。LiteOS 和 ucos 第1種和第2種都可以使用,由用戶選擇,RT-Thread 和 FreeRTOS 則默認使用第二種

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: FreeRTOS

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 阳西县| 仁寿县| 边坝县| 鄂温| 南康市| 清涧县| 浦城县| 冕宁县| 右玉县| 新乡县| 武鸣县| 二手房| 沈阳市| 肥东县| 淮南市| 夏津县| 安吉县| 法库县| 华池县| 澎湖县| 蒲江县| 安陆市| 繁峙县| 通州区| 九龙坡区| 绵竹市| 开原市| 河源市| 丰镇市| 梁平县| 昌吉市| 金华市| 镇原县| 合肥市| 南澳县| 西吉县| 富川| 循化| 江达县| 象山县| 上杭县|