那曲檬骨新材料有限公司

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次閱讀
    盐津县| 大发888屡败屡战| 百家乐官网博百家乐官网的玩法技巧和规则| 松桃| 裕昌太阳城业主论坛| 菲律宾百家乐试玩| 网络百家乐官网会作假吗| 福贡县| 百家乐押注最多是多少| 菲彩百家乐官网的玩法技巧和规则| 网上百家乐官网心得| 大发888官方授权网| 百家乐大西洋| 属狗的和虎的做生意好吗| 新百家乐官网庄闲路单图记录| 皇冠网小说网址| 真人游戏排行榜| 缅甸百家乐网络赌博解谜| 贝博百家乐官网的玩法技巧和规则 | 网页百家乐官网| 六合彩号码| 路劲太阳城金旭园| 百家乐八卦九| 百家乐另类投注法| 百家乐官网正负计| 百家乐官网长龙怎么预判| 灵璧县| E世博投注| 大发888娱乐城打发888打发8| 百家乐水浒传| 百家乐永利娱乐城| 中国百家乐官网的玩法技巧和规则 | 百家乐官网园太阳| 百家乐官网国际娱乐网| 皇冠百家乐官网客户端皇冠 | 皇家百家乐的玩法技巧和规则| 玩百家乐凤凰娱乐城| 百家乐官网号破| 百家乐官网真人娱乐场开户注册| 保单机百家乐官网破解方法| 百家乐官网注码管理|