0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【freeRTOS開發(fā)筆記】關(guān)注創(chuàng)建任務(wù)時傳入優(yōu)先級數(shù)值問題

嵌入式物聯(lián)網(wǎng)開發(fā) ? 來源:嵌入式物聯(lián)網(wǎng)開發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開發(fā) ? 2022-07-11 09:13 ? 次閱讀

1 前言

最近博主在做一些適配freeRTOS的項目,簡單來說就是從別的RTOS平臺遷移到freeRTOS平臺。 由于之前的代碼都是可用的,憑經(jīng)驗我們認(rèn)為只需要將OSAL的接口重新封裝一下,理論上上層的邏輯應(yīng)該問題不大;但是我們沒想到的卻是在OSAL層適配的時候,遇到了一些之前沒有考慮到的問題。

2 遇到的問題

這個問題主要的體現(xiàn)就是在創(chuàng)建任務(wù)的接口調(diào)用上,freeRTOS的接口原型為:

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            const char * const pcName,     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                            const configSTACK_DEPTH_TYPE usStackDepth,
                            void * const pvParameters,
                            UBaseType_t uxPriority,
                            TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;

我們關(guān)注下第5個參數(shù)uxPriority,這個參數(shù)就是指定任務(wù)的優(yōu)先級。 我們都知道freeRTOS是基于任務(wù)優(yōu)先級來進(jìn)行調(diào)度的,創(chuàng)建任務(wù)時指定的任務(wù)優(yōu)先級直接影響任務(wù)響應(yīng)的實時性。 早前我們是使用AliOS,功能組件代碼也都是使用AliOS的創(chuàng)建任務(wù)的API

/**
 * Create a task.
 *
 * @param[in]  task        handle.
 * @param[in]  name        task name.
 * @param[in]  fn          task function.
 * @param[in]  arg         argument of the function..
 * @param[in]  stack_buf   stack-buf: if stack_buf==NULL, provided by kernel.
 * @param[in]  stack_size  stack-size in bytes.
 * @param[in]  prio        priority value, the max is RHINO_CONFIG_USER_PRI_MAX(default 60).
 *
 * @return  0: success, otherwise: fail.
 */
int aos_task_new_ext(aos_task_t *task, const char *name, void (*fn)(void *),
                     void *arg, int stack_size, int prio);

這樣在做OS層接口的轉(zhuǎn)換的時候,優(yōu)先級這個數(shù)值就出問題了。 比如AliOS的接口傳入prio=60;然后60傳入freeRTOS就會出問題了,導(dǎo)致的結(jié)果就是新創(chuàng)建的任務(wù)可以被調(diào)度起來,但是創(chuàng)建任務(wù)的接口沒法返回了。 這里的根本原因就是freeRTOS的優(yōu)先級定義,數(shù)值越小,優(yōu)先級越低;反之,優(yōu)先級越高。

3 如何解決

解決的方法,倒是比較簡單,但是會比較繁瑣。 我們需要對所有創(chuàng)建的任務(wù),傳入的優(yōu)先級數(shù)值重新進(jìn)行評估,明確每個任務(wù)是高優(yōu)先級還是低優(yōu)先級。 比如上面的prio=60(低優(yōu)先級)改為prio=0或1就可以解決問題了。

4 經(jīng)驗總結(jié)

針對freeRTOS這種反常的優(yōu)先級數(shù)值定義,我總結(jié)了其他常見RTOS的定義,做下對比,加深理解和記憶:

RTOS名稱 優(yōu)先級數(shù)值范圍 優(yōu)先級數(shù)值的定義
freeRTOS 0 - (configMAX_PRIORITIES-1) 數(shù)值越小,優(yōu)先級越低
AliOS 0 - 61 數(shù)值越小,優(yōu)先級越高
uCOS 0 - OSLOWESTPRIO 數(shù)值越小,優(yōu)先級越高
RT-Thread 0 - 255 數(shù)值越小,優(yōu)先級越高
threadx 0 - (TXMAXPRIORITIES-1) 數(shù)值越小,優(yōu)先級越高
huawei lite os 0 - 31 數(shù)值越小,優(yōu)先級越高
Oneos 0 - (OSTASKPRIORITY_MAX-1) 數(shù)值越小,優(yōu)先級越高
tencent tiny os 0 - (TOSCFGTASKPRIOMAX-1) 數(shù)值越小,優(yōu)先級越低

看到這里,大家一定感慨,就只有freeRTOS獨一檔的存在,只有它是數(shù)值越小,優(yōu)先級越低! 這里提醒下大家,如果你從其他RTOS平臺遷移到freeRTOS平臺,尤其注意下優(yōu)先級數(shù)值的問題,否則可能會導(dǎo)致莫名其妙的問題。

5 更多分享

歡迎關(guān)注我的github倉庫01workstation,日常分享一些開發(fā)筆記和項目實戰(zhàn),歡迎指正問題。

同時也非常歡迎關(guān)注我的專欄:有問題的話,可以跟我討論,知無不答,謝謝大家。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8459

    瀏覽量

    150748
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    809

    瀏覽量

    119366
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61929
收藏 人收藏

    評論

    相關(guān)推薦

    freeRTOS開發(fā)筆記】記一次坑爹的freeTOS升級

    freeRTOS開發(fā)筆記】記一次坑爹的freeTOS-v9.0.0升級到freeRTOS-v10.4.4
    的頭像 發(fā)表于 07-11 09:15 ?4513次閱讀
    【<b class='flag-5'>freeRTOS</b><b class='flag-5'>開發(fā)筆記</b>】記一次坑爹的freeTOS升級

    FreeRTOS中的任務(wù)管理

    任務(wù)FreeRTOS 中最基本的調(diào)度單元,它是一段可執(zhí)行的代碼,可以獨立運行。FreeRTOS 中的任務(wù)是基于優(yōu)先級的搶占式調(diào)度,
    的頭像 發(fā)表于 11-27 17:03 ?923次閱讀

    轉(zhuǎn):第13章 FreeRTOS任務(wù)優(yōu)先級修改及其分配方案

    configMAX_PRIORITIES– 1。比如我們配置此宏定義為5,那么用戶可以使用的優(yōu)先級號是0,1,2,3,4,不包含5,對于這一點,初學(xué)者要特別的注意。u 用戶配置任務(wù)優(yōu)先級數(shù)值越小,那么此
    發(fā)表于 08-29 11:07

    FreeRTOS任務(wù)調(diào)度優(yōu)先級,會直接在就緒列表中調(diào)用低優(yōu)先級任務(wù)么?

    由于剛開始使用FreeRTOS,所以有很多問題,也正在學(xué)習(xí)。請問各位,假如優(yōu)先級高的任務(wù)時間片用完后,會直接在就緒列表中調(diào)用低優(yōu)先級任務(wù)么?假設(shè):Task_A
    發(fā)表于 06-14 09:01

    stm32cube創(chuàng)建任務(wù)優(yōu)先級與xTaskCreate的區(qū)別是什么

    請教一下,freertos中,為什么stm32cube創(chuàng)建的工程里,任務(wù)優(yōu)先級只有下面這幾種:而使用xTaskCreate創(chuàng)建
    發(fā)表于 06-15 09:00

    FREERTOS任務(wù)優(yōu)先級的設(shè)置

    FREERTOS中,各個任務(wù)優(yōu)先級怎么設(shè)置比較好呢?或者是說有什么標(biāo)準(zhǔn)?疑惑中。。。。。。
    發(fā)表于 07-19 08:03

    創(chuàng)建0優(yōu)先級任務(wù),程序會一直運行該任務(wù)這是為什么呢?

    看資料說,0優(yōu)先級是空閑任務(wù),但是其他任務(wù)是可以與空閑任務(wù),共享0優(yōu)先級的,那么我創(chuàng)建兩個
    發(fā)表于 07-26 08:00

    FreeRTOS中斷優(yōu)先級任務(wù)優(yōu)先級架構(gòu)的相關(guān)資料推薦

    ,于是便有了這篇筆記,本篇文章以Cortex-M3(STM32F103)為例子。目錄FreeRTOS中斷優(yōu)先級任務(wù)優(yōu)先級1.Cortex-
    發(fā)表于 02-08 06:36

    FreeRTOS任務(wù)的使用

    FreeRTOS最基本的任務(wù)操作就是任務(wù)創(chuàng)建與刪除,其API如下表:1.1動態(tài)任務(wù)創(chuàng)建xTask
    發(fā)表于 02-18 07:14

    freertos怎么在任務(wù)中修改任務(wù)優(yōu)先級?

    freertos怎么在任務(wù)中修改任務(wù)優(yōu)先級
    發(fā)表于 10-11 07:56

    2.FreeRTOS中斷優(yōu)先級任務(wù)優(yōu)先級

    ,于是便有了這篇筆記,本篇文章以Cortex-M3(STM32F103)為例子。目錄FreeRTOS中斷優(yōu)先級任務(wù)優(yōu)先級1.Cortex-
    發(fā)表于 12-04 20:21 ?9次下載
    2.<b class='flag-5'>FreeRTOS</b>中斷<b class='flag-5'>優(yōu)先級</b>和<b class='flag-5'>任務(wù)</b><b class='flag-5'>優(yōu)先級</b>

    #FreeRTOS學(xué)習(xí)筆記(二):任務(wù)創(chuàng)建/刪除,掛起/解掛

    FreeRTOS最基本的任務(wù)操作就是任務(wù)創(chuàng)建與刪除,其API如下表:1.1動態(tài)任務(wù)創(chuàng)建xTask
    發(fā)表于 12-23 19:56 ?2次下載
    #<b class='flag-5'>FreeRTOS</b>學(xué)習(xí)<b class='flag-5'>筆記</b>(二):<b class='flag-5'>任務(wù)</b><b class='flag-5'>創(chuàng)建</b>/刪除,掛起/解掛

    FreeRTOS任務(wù)優(yōu)先級示例

    任務(wù)優(yōu)先級:0~24之間。數(shù)字越大,任務(wù)優(yōu)先等級越高。高優(yōu)先級任務(wù)
    的頭像 發(fā)表于 09-15 11:13 ?2713次閱讀

    FreeRTOS任務(wù)狀態(tài)與任務(wù)優(yōu)先級

    處理器的話那么不管在任何時刻永遠(yuǎn)都只有一個任務(wù)處于運行態(tài)。 ● 就緒態(tài) 處于就緒態(tài)的任務(wù)是那些已經(jīng)準(zhǔn)備就緒(這些任務(wù)沒有被阻塞或者掛起),可以運行的任務(wù),但是處于就緒態(tài)的
    的頭像 發(fā)表于 09-28 11:10 ?1069次閱讀
    <b class='flag-5'>FreeRTOS</b>中<b class='flag-5'>任務(wù)</b>狀態(tài)與<b class='flag-5'>任務(wù)</b><b class='flag-5'>優(yōu)先級</b>

    freertos中斷優(yōu)先級在哪設(shè)置

    FreeRTOS是一個流行的實時操作系統(tǒng),它廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)。在FreeRTOS中,中斷優(yōu)先級是一個重要的概念,因為它決定了中斷處理的順序和響應(yīng)時間。 1. 理解中斷
    的頭像 發(fā)表于 09-02 14:17 ?512次閱讀