<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

任務調度開源代碼是什么

汽車電子技術 ? 來源:大橙子瘋嵌入式 ? 作者:大橙子瘋 ? 2023-02-15 14:53 ? 次閱讀

1、前言

通過[嵌入式軟件架構設計-任務調度]了解到 MCU 的三種任務調度:前后臺順序執行法、時間片論法和操作系統,下面介紹一個基于時間片論法的任務調度模塊開源代碼。

2、介紹

代碼主要特點有:

  • 適用于裸機平臺
  • 移植簡單,三個核心函數,初始化、啟動和任務調度管理
  • 可動態地添加/刪除普通任務,也能添加/刪除中斷任務
  • 普通任務具備簡單的調度優先級功能
  • 實現了簡單的 MCU 負載率計算,根據負載率可參考評估系統的實時性和響應性

實現思路:

  • 通過1ms定時器中斷服務函數進行任務調度計時和任務狀態就緒切換
  • 普通任務在主循環中判斷就緒狀態并執行,而中斷任務則在中斷服務函數中判斷就緒狀態并執行
  • 普通任務在創建時會根據優先級在普通任務列表中進行排序,優先級越高的函數在列表中越靠前
  • 當正在執行的普通任務每次執行完畢后,都會重新從普通任務列表中從頭開始判斷狀態并執行,從而實現調度優先級功能(并非搶占式)
  • 根據普通空閑任務運行次數和中斷空閑任務運行次數得到 MCU 的負載率計算

3、代碼示例

源文件部分代碼如下

/**
  * @brief      創建新的任務調度
  *
  * @note       任務函數不能被阻塞,盡量保證任務執行的時間小于 1ms,且調度周期一定要大于調度函數任務耗時
  * @param[in]  pfnTask 回調任務函數
  * @param[in]  time    調度周期, 單位ms.
  * @param[in]  priority 調度優先級 5-250, 其他預留, 值越小, 優先級越高
  */
void cTASK_Creat(TaskRunCB pfnTask, uint16_t time, uint8_t priority)
{
    int i, j;

    if (priority < 5)
    {
        priority = 5;
    }

    if (priority > 250)
    {
        priority = 250;
    }

    for (i = 0; i < CTASK_SUPPORT_NUM; i++)
    {
        if (sg_tTaskManage.task[i].priority < priority)
        {
            continue;
        }

        if (sg_tTaskManage.task[i].isUsed)
        {
            for (j = CTASK_SUPPORT_NUM - 1; j > i; j--)
            {
                sg_tTaskManage.task[j] = sg_tTaskManage.task[j - 1];
                sg_tTaskManage.task[j - 1].isUsed = false;
            }
        }

        sg_tTaskManage.task[i].isUsed = true;
        sg_tTaskManage.task[i].isRunnig = false;
        sg_tTaskManage.task[i].itvTime = time;
        sg_tTaskManage.task[i].pfnTaskHook = pfnTask;
        sg_tTaskManage.task[i].timer = time;
        sg_tTaskManage.task[i].priority = priority;
        break;
    }
}

頭文件接口定義

/* Exported types ----------------------------------------------------------------------------------------------------*/

typedef void (*TaskRunCB)(void);

/* Exported constants ------------------------------------------------------------------------------------------------*/
/* Exported macro ----------------------------------------------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------------------------------------------------*/

extern void cTASK_Init(void);
extern void cTASK_Remarks(void);
extern void cTASK_Start(void);

extern void cTASK_Creat(TaskRunCB pfnTask, uint16_t time, uint8_t priority);
extern void cTASK_Destory(TaskRunCB pfnTask);

extern void cTASK_IsrCreat(TaskRunCB pfnTask, uint16_t time);
extern void cTASK_IsrDestory(TaskRunCB pfnTask);

extern uint8_t cTASK_GetLoadRate(void);
extern uint32_t cTASK_GetSysTimer(void);

4、下載鏈接

下載鏈接可復制

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

    關注

    146

    文章

    16055

    瀏覽量

    344140
  • 操作系統
    +關注

    關注

    37

    文章

    6315

    瀏覽量

    121968
  • 開源代碼
    +關注

    關注

    0

    文章

    27

    瀏覽量

    2870
收藏 人收藏

    評論

    相關推薦

    基于OMPL的運動規劃介紹與教程_ROS_開源代碼1 #開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發布于 :2022年08月24日 16:28:03

    基于OMPL的運動規劃介紹與教程_ROS_開源代碼 2#開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發布于 :2022年08月24日 16:28:41

    基于OMPL的運動規劃介紹與教程_ROS_開源代碼3 #開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發布于 :2022年08月24日 16:29:46

    基于OMPL的運動規劃介紹與教程_ROS_開源代碼4 #開源代碼

    機器人開源硬件源代碼代碼控制算法開源代碼
    薪盡火傳
    發布于 :2022年08月24日 16:29:51

    Arduino 的開源代碼 在哪找

    各位哥哥姐姐,姐夫大嫂,有誰能告訴我 Arduino 的開源代碼 在哪找 ?小弟不勝感激??!
    發表于 08-25 13:52

    簡單的任務調度代碼

    通過定時器節拍控制任務執行周期,此代碼的中斷函數時AVR的簡單的任務調度.rar (2.4 KB )
    發表于 06-12 04:35

    FreeRTOS如何使用delay作為系統延時、任務調度

    請教一個問題,最近在學習使用FreeRTOS,想像原子一樣在delay.c里添加RTOS的系統支持,即使用tick時鐘作延時?,F在有幾個問題:1、在啟動任務調度器前,如果調用了delay_ms
    發表于 06-10 04:37

    DSO138學習型示波器的開源代碼

    DLO-138是針對DSO138學習型示波器的開源代碼,如果你希望對138軟件進行修改(或者增加通道),那么基于這個工程應該是不錯的。步驟:1 準備工作下載開源代碼DLO-138:安裝arduino1.8.5(高版本可能支持stm32有問題)下載Arduino_STM32
    發表于 08-06 09:23

    大佬都在用的github開源代碼庫地址

    嵌入式開發有用的github上的開源代碼庫 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u011559046/article/details
    發表于 11-08 07:56

    調度器的原理及其任務調度代碼實現

    、超級循環2、時間片與時標3、調度算法介紹1)時間片輪轉調度2)強制試調度4、注意事項所有任務的執行時間不能超過時標的時間三、任務
    發表于 02-17 07:07

    你了解RT-Thread中的啟動任務調度時機嗎

    中斷?仔細閱讀跟蹤代碼發現,在切換到第一個任務時候,使用的api是rt_hw_context_switch_to,閱讀其源代碼,可以發現在最后一句,通過恢復PC LR跳轉到目標任務,于
    發表于 02-14 16:09

    μC/OS-II 任務調度機制的改進

    介紹μC/OS-II 任務調度機制,并提出一種改進方法,使μC/OS-II變成一個兼備實時與分時任務調度機制的操作系統; 論述改進后系統的特點和要注意的問題,給出部分
    發表于 04-15 11:21 ?14次下載

    四軸開源代碼IAR

    四軸飛行器開源 源代碼IAR需要的自行下載吧。
    發表于 03-31 15:26 ?5次下載

    任務調度代碼

    任務調度代碼,感興趣的小伙伴們可以看看。
    發表于 07-13 16:55 ?21次下載

    MWC四軸開源代碼免費下載

    本文檔的主要內容詳細介紹的是MWC四軸開源代碼免費下載。
    發表于 03-31 08:00 ?17次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>