99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

任務(wù)調(diào)度開(kāi)源代碼是什么

汽車(chē)電子技術(shù) ? 來(lái)源:大橙子瘋嵌入式 ? 作者:大橙子瘋 ? 2023-02-15 14:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、前言

通過(guò)[嵌入式軟件架構(gòu)設(shè)計(jì)-任務(wù)調(diào)度]了解到 MCU 的三種任務(wù)調(diào)度:前后臺(tái)順序執(zhí)行法、時(shí)間片論法和操作系統(tǒng),下面介紹一個(gè)基于時(shí)間片論法的任務(wù)調(diào)度模塊開(kāi)源代碼。

2、介紹

代碼主要特點(diǎn)有:

  • 適用于裸機(jī)平臺(tái)
  • 移植簡(jiǎn)單,三個(gè)核心函數(shù),初始化、啟動(dòng)和任務(wù)調(diào)度管理
  • 可動(dòng)態(tài)地添加/刪除普通任務(wù),也能添加/刪除中斷任務(wù)
  • 普通任務(wù)具備簡(jiǎn)單的調(diào)度優(yōu)先級(jí)功能
  • 實(shí)現(xiàn)了簡(jiǎn)單的 MCU 負(fù)載率計(jì)算,根據(jù)負(fù)載率可參考評(píng)估系統(tǒng)的實(shí)時(shí)性和響應(yīng)性

實(shí)現(xiàn)思路:

  • 通過(guò)1ms定時(shí)器中斷服務(wù)函數(shù)進(jìn)行任務(wù)調(diào)度計(jì)時(shí)和任務(wù)狀態(tài)就緒切換
  • 普通任務(wù)在主循環(huán)中判斷就緒狀態(tài)并執(zhí)行,而中斷任務(wù)則在中斷服務(wù)函數(shù)中判斷就緒狀態(tài)并執(zhí)行
  • 普通任務(wù)在創(chuàng)建時(shí)會(huì)根據(jù)優(yōu)先級(jí)在普通任務(wù)列表中進(jìn)行排序,優(yōu)先級(jí)越高的函數(shù)在列表中越靠前
  • 當(dāng)正在執(zhí)行的普通任務(wù)每次執(zhí)行完畢后,都會(huì)重新從普通任務(wù)列表中從頭開(kāi)始判斷狀態(tài)并執(zhí)行,從而實(shí)現(xiàn)調(diào)度優(yōu)先級(jí)功能(并非搶占式)
  • 根據(jù)普通空閑任務(wù)運(yùn)行次數(shù)和中斷空閑任務(wù)運(yùn)行次數(shù)得到 MCU 的負(fù)載率計(jì)算

3、代碼示例

源文件部分代碼如下

/**
  * @brief      創(chuàng)建新的任務(wù)調(diào)度
  *
  * @note       任務(wù)函數(shù)不能被阻塞,盡量保證任務(wù)執(zhí)行的時(shí)間小于 1ms,且調(diào)度周期一定要大于調(diào)度函數(shù)任務(wù)耗時(shí)
  * @param[in]  pfnTask 回調(diào)任務(wù)函數(shù)
  * @param[in]  time    調(diào)度周期, 單位ms.
  * @param[in]  priority 調(diào)度優(yōu)先級(jí) 5-250, 其他預(yù)留, 值越小, 優(yōu)先級(jí)越高
  */
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、下載鏈接

下載鏈接可復(fù)制

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

    關(guān)注

    146

    文章

    17932

    瀏覽量

    363164
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7130

    瀏覽量

    125343
  • 開(kāi)源代碼
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    3177
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于OMPL的運(yùn)動(dòng)規(guī)劃介紹與教程_ROS_開(kāi)源代碼1 #開(kāi)源代碼

    機(jī)器人開(kāi)源硬件源代碼代碼控制算法開(kāi)源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:28:03

    基于OMPL的運(yùn)動(dòng)規(guī)劃介紹與教程_ROS_開(kāi)源代碼 2#開(kāi)源代碼

    機(jī)器人開(kāi)源硬件源代碼代碼控制算法開(kāi)源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:28:41

    基于OMPL的運(yùn)動(dòng)規(guī)劃介紹與教程_ROS_開(kāi)源代碼3 #開(kāi)源代碼

    機(jī)器人開(kāi)源硬件源代碼代碼控制算法開(kāi)源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:29:46

    基于OMPL的運(yùn)動(dòng)規(guī)劃介紹與教程_ROS_開(kāi)源代碼4 #開(kāi)源代碼

    機(jī)器人開(kāi)源硬件源代碼代碼控制算法開(kāi)源代碼
    薪盡火傳
    發(fā)布于 :2022年08月24日 16:29:51

    Arduino 的開(kāi)源代碼 在哪找

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

    簡(jiǎn)單的任務(wù)調(diào)度代碼

    通過(guò)定時(shí)器節(jié)拍控制任務(wù)執(zhí)行周期,此代碼的中斷函數(shù)時(shí)AVR的簡(jiǎn)單的任務(wù)調(diào)度.rar (2.4 KB )
    發(fā)表于 06-12 04:35

    FreeRTOS如何使用delay作為系統(tǒng)延時(shí)、任務(wù)調(diào)度

    請(qǐng)教一個(gè)問(wèn)題,最近在學(xué)習(xí)使用FreeRTOS,想像原子一樣在delay.c里添加RTOS的系統(tǒng)支持,即使用tick時(shí)鐘作延時(shí)?,F(xiàn)在有幾個(gè)問(wèn)題:1、在啟動(dòng)任務(wù)調(diào)度器前,如果調(diào)用了delay_ms
    發(fā)表于 06-10 04:37

    DSO138學(xué)習(xí)型示波器的開(kāi)源代碼

    DLO-138是針對(duì)DSO138學(xué)習(xí)型示波器的開(kāi)源代碼,如果你希望對(duì)138軟件進(jìn)行修改(或者增加通道),那么基于這個(gè)工程應(yīng)該是不錯(cuò)的。步驟:1 準(zhǔn)備工作下載開(kāi)源代碼DLO-138:安裝arduino1.8.5(高版本可能支持stm32有問(wèn)題)下載Arduino_STM32
    發(fā)表于 08-06 09:23

    調(diào)度器的原理及其任務(wù)調(diào)度代碼實(shí)現(xiàn)

    、超級(jí)循環(huán)2、時(shí)間片與時(shí)標(biāo)3、調(diào)度算法介紹1)時(shí)間片輪轉(zhuǎn)調(diào)度2)強(qiáng)制試調(diào)度4、注意事項(xiàng)所有任務(wù)的執(zhí)行時(shí)間不能超過(guò)時(shí)標(biāo)的時(shí)間三、任務(wù)
    發(fā)表于 02-17 07:07

    你了解RT-Thread中的啟動(dòng)任務(wù)調(diào)度時(shí)機(jī)嗎

    中斷?仔細(xì)閱讀跟蹤代碼發(fā)現(xiàn),在切換到第一個(gè)任務(wù)時(shí)候,使用的api是rt_hw_context_switch_to,閱讀其源代碼,可以發(fā)現(xiàn)在最后一句,通過(guò)恢復(fù)PC LR跳轉(zhuǎn)到目標(biāo)任務(wù),于
    發(fā)表于 02-14 16:09

    μC/OS-II 任務(wù)調(diào)度機(jī)制的改進(jìn)

    介紹μC/OS-II 任務(wù)調(diào)度機(jī)制,并提出一種改進(jìn)方法,使μC/OS-II變成一個(gè)兼?zhèn)鋵?shí)時(shí)與分時(shí)任務(wù)調(diào)度機(jī)制的操作系統(tǒng); 論述改進(jìn)后系統(tǒng)的特點(diǎn)和要注意的問(wèn)題,給出部分
    發(fā)表于 04-15 11:21 ?14次下載

    四軸開(kāi)源代碼IAR

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

    任務(wù)調(diào)度代碼

    任務(wù)調(diào)度代碼,感興趣的小伙伴們可以看看。
    發(fā)表于 07-13 16:55 ?22次下載

    MWC四軸開(kāi)源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是MWC四軸開(kāi)源代碼免費(fèi)下載。
    發(fā)表于 03-31 08:00 ?20次下載

    開(kāi)源鴻蒙】下載OpenHarmony 4.1 Release源代碼

    本文介紹了如何下載開(kāi)源鴻蒙(OpenHarmony)操作系統(tǒng) 4.1 Release版本的源代碼,該方法同樣可以用于下載OpenHarmony最新開(kāi)發(fā)版本(master分支)或者4.0 Release、3.2 Release等發(fā)布版本的
    的頭像 發(fā)表于 04-27 23:16 ?1703次閱讀
    【<b class='flag-5'>開(kāi)源</b>鴻蒙】下載OpenHarmony 4.1 Release<b class='flag-5'>源代碼</b>