在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【freeRTOS開發筆記】關注創建任務時傳入優先級數值問題

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-07-11 09:13 ? 次閱讀

1 前言

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

2 遇到的問題

這個問題主要的體現就是在創建任務的接口調用上,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;

我們關注下第5個參數uxPriority,這個參數就是指定任務的優先級。 我們都知道freeRTOS是基于任務優先級來進行調度的,創建任務時指定的任務優先級直接影響任務響應的實時性。 早前我們是使用AliOS,功能組件代碼也都是使用AliOS的創建任務的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層接口的轉換的時候,優先級這個數值就出問題了。 比如AliOS的接口傳入prio=60;然后60傳入freeRTOS就會出問題了,導致的結果就是新創建的任務可以被調度起來,但是創建任務的接口沒法返回了。 這里的根本原因就是freeRTOS的優先級定義,數值越小,優先級越低;反之,優先級越高

3 如何解決

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

4 經驗總結

針對freeRTOS這種反常的優先級數值定義,我總結了其他常見RTOS的定義,做下對比,加深理解和記憶:

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

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

5 更多分享

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8661

    瀏覽量

    151480
  • RTOS
    +關注

    關注

    22

    文章

    817

    瀏覽量

    119747
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62271
收藏 人收藏

    評論

    相關推薦

    freeRTOS開發筆記】記一次坑爹的freeTOS升級

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

    FreeRTOS中的任務管理

    任務FreeRTOS 中最基本的調度單元,它是一段可執行的代碼,可以獨立運行。FreeRTOS 中的任務是基于優先級的搶占式調度,
    的頭像 發表于 11-27 17:03 ?1046次閱讀

    轉:第13章 FreeRTOS任務優先級修改及其分配方案

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

    FreeRTOS任務調度優先級,會直接在就緒列表中調用低優先級任務么?

    由于剛開始使用FreeRTOS,所以有很多問題,也正在學習。請問各位,假如優先級高的任務時間片用完后,會直接在就緒列表中調用低優先級任務么?假設:Task_A
    發表于 06-14 09:01

    stm32cube創建任務優先級與xTaskCreate的區別是什么

    請教一下,freertos中,為什么stm32cube創建的工程里,任務優先級只有下面這幾種:而使用xTaskCreate創建
    發表于 06-15 09:00

    FREERTOS任務優先級的設置

    FREERTOS中,各個任務優先級怎么設置比較好呢?或者是說有什么標準?疑惑中。。。。。。
    發表于 07-19 08:03

    創建0優先級任務,程序會一直運行該任務這是為什么呢?

    看資料說,0優先級是空閑任務,但是其他任務是可以與空閑任務,共享0優先級的,那么我創建兩個
    發表于 07-26 08:00

    FreeRTOS中斷優先級任務優先級架構的相關資料推薦

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

    FreeRTOS任務的使用

    FreeRTOS最基本的任務操作就是任務創建與刪除,其API如下表:1.1動態任務創建xTask
    發表于 02-18 07:14

    freertos怎么在任務中修改任務優先級

    freertos怎么在任務中修改任務優先級
    發表于 10-11 07:56

    2.FreeRTOS中斷優先級任務優先級

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

    #FreeRTOS學習筆記(二):任務創建/刪除,掛起/解掛

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

    FreeRTOS任務優先級示例

    任務優先級:0~24之間。數字越大,任務優先等級越高。高優先級任務
    的頭像 發表于 09-15 11:13 ?2829次閱讀

    FreeRTOS任務狀態與任務優先級

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

    freertos中斷優先級在哪設置

    FreeRTOS是一個流行的實時操作系統,它廣泛應用于嵌入式系統開發。在FreeRTOS中,中斷優先級是一個重要的概念,因為它決定了中斷處理的順序和響應時間。 1. 理解中斷
    的頭像 發表于 09-02 14:17 ?725次閱讀
    主站蜘蛛池模板: 卡1卡2卡3精品推荐老狼| 欧美不卡一区| 九色视频网| 国产精品看片| 中文字幕亚洲天堂| 亚洲一二三四| 欧美丝袜一区| 在线一级毛片| 色婷婷狠狠久久综合五月| 日本特级视频| 久久婷婷影院| 波多野结衣在线视频观看| 一区二区三区午夜| 人人澡 人人澡 人人看| 二级特黄绝大片免费视频大片| 日本videosgratis教师69| 中文字幕一二三区乱码老| 成人中文字幕一区二区三区| 性色网站| 欧美3d动漫网站| www4虎| 日日拍拍| www.欧美.com| 亚洲黄色成人| 欧美成人免费全部观看天天性色| 国产单男| 殴美一级| 视频一区二区在线播放| 亚洲不卡网| 毛片官网| 永久免费观看午夜视频在线| 黄色成人在线网站| 日本一区二区三区四区视频| 亚洲va久久久久综合| 欧美午夜色视频国产精品| 成 人 免 费 黄 色| 欧美夜夜操| 曰本a| 生活片一级性| 国产成人综合久久| 理论毛片|