衡阳派盒市场营销有限公司

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

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

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

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

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

1 前言

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

2 遇到的問題

這個(gè)問題主要的體現(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個(gè)參數(shù)uxPriority,這個(gè)參數(shù)就是指定任務(wù)的優(yōu)先級(jí)。 我們都知道freeRTOS是基于任務(wù)優(yōu)先級(jí)來進(jìn)行調(diào)度的,創(chuàng)建任務(wù)時(shí)指定的任務(wù)優(yōu)先級(jí)直接影響任務(wù)響應(yīng)的實(shí)時(shí)性。 早前我們是使用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)換的時(shí)候,優(yōu)先級(jí)這個(gè)數(shù)值就出問題了。 比如AliOS的接口傳入prio=60;然后60傳入freeRTOS就會(huì)出問題了,導(dǎo)致的結(jié)果就是新創(chuàng)建的任務(wù)可以被調(diào)度起來,但是創(chuàng)建任務(wù)的接口沒法返回了。 這里的根本原因就是freeRTOS的優(yōu)先級(jí)定義,數(shù)值越小,優(yōu)先級(jí)越低;反之,優(yōu)先級(jí)越高。

3 如何解決

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

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

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

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

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

5 更多分享

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

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

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

    關(guān)注

    33

    文章

    8691

    瀏覽量

    151911
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    819

    瀏覽量

    119884
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62394
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    FreeRTOS中的任務(wù)管理

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

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

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

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

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

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

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

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

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

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

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

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

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

    對(duì)FreeRTOS任務(wù)的使用

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

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

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

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

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

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

    FreeRTOS最基本的任務(wù)操作就是任務(wù)創(chuàng)建與刪除,其API如下表:1.1動(dòng)態(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)先級(jí)示例

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

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

    處理器的話那么不管在任何時(shí)刻永遠(yuǎn)都只有一個(gè)任務(wù)處于運(yùn)行態(tài)。 ● 就緒態(tài) 處于就緒態(tài)的任務(wù)是那些已經(jīng)準(zhǔn)備就緒(這些任務(wù)沒有被阻塞或者掛起),可以運(yùn)行的任務(wù),但是處于就緒態(tài)的
    的頭像 發(fā)表于 09-28 11:10 ?1189次閱讀
    <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)先級(jí)</b>

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

    FreeRTOS是一個(gè)流行的實(shí)時(shí)操作系統(tǒng),它廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)。在FreeRTOS中,中斷優(yōu)先級(jí)是一個(gè)重要的概念,因?yàn)樗鼪Q定了中斷處理的順序和響應(yīng)時(shí)間。 1. 理解中斷
    的頭像 發(fā)表于 09-02 14:17 ?777次閱讀
    百家乐官网2号说名书| 闲和庄百家乐官网娱乐城| 亚洲顶级赌场 网投领导者| 百家乐揽子打法| 百家乐官网庄家必赢诀窍| bet365主页| 乐中百家乐的玩法技巧和规则| 做生意招财小窍门| 百家乐官网赌场规则| 88娱乐城天上人间| 大发888娱乐场 d188| 榆次百家乐的玩法技巧和规则| 24山安葬吉凶择日| 鑫鼎百家乐官网娱乐城| 百家乐官网稳赚秘籍| 欧博线上娱乐| 太阳城娱乐小郭| 百家乐开线| 百家乐试玩全讯网2| 百家乐官网娱乐网网| 百家乐官网龙虎台布| 百家乐官网最佳投注办法| 和林格尔县| 欧博线上娱乐| 博彩评级| 娱乐城开户送体验金| 大发888娱乐捕鱼游戏| 新百家乐的玩法技巧和规则| 百家乐下载免费软件| 百家乐怎么推算| 波音百家乐游戏| 百家乐神仙道礼包| 百家乐是否有路子| 百家乐视频连连看| 百家乐哪条路好| 百家乐体育博彩| 百家乐五局八星| 澳门百家乐有限公司| 澳门百家乐走势图| 现场百家乐玩法| 威尼斯人娱乐城博彩网|