那曲檬骨新材料有限公司

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

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

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

分析RTOS實(shí)現(xiàn)多任務(wù)調(diào)度的基本原理

strongerHuang ? 來(lái)源:嵌入式專(zhuān)欄 ? 作者:嵌入式專(zhuān)欄 ? 2021-07-27 15:59 ? 次閱讀

很多朋友長(zhǎng)時(shí)間使用裸機(jī)編程,切換過(guò)來(lái)學(xué)習(xí)RTOS,就對(duì)其中很多概念產(chǎn)生誤解。

大部分人開(kāi)始學(xué)習(xí)RTOS實(shí)時(shí)操作系統(tǒng)時(shí),對(duì)RTOS中的一些概念都不太理解。

一上來(lái)就是臨界段、調(diào)度、信號(hào)量、互斥鎖等這些概念,相信大部分初學(xué)者都是懵的。

不太懂這些概念很正常,一下子懂了,我倒反而覺(jué)得不正常。

1什么是多任務(wù)

這里大部分人應(yīng)該都是從裸機(jī)階段過(guò)來(lái)的,裸機(jī)系統(tǒng)一般也稱(chēng)之為單任務(wù)系統(tǒng)、輪詢系統(tǒng)或前后臺(tái)系統(tǒng)。

這個(gè)概念相信大家都能明白,輪詢就是在一個(gè)大while循環(huán)里執(zhí)行。前后臺(tái)系統(tǒng)就是在執(zhí)行while時(shí),有中斷(前臺(tái))響應(yīng)的系統(tǒng)。

int main(void){ /* 初始化 */ while(1) { /* 循環(huán)處理多項(xiàng)事情 */ }}

那么,什么是多任務(wù)呢?

當(dāng)多任務(wù)操作系統(tǒng)使用某種任務(wù)調(diào)度策略允許兩個(gè)或更多進(jìn)程并發(fā)共享一個(gè)處理器時(shí),事實(shí)上處理器在某一時(shí)刻只會(huì)給一件任務(wù)提供服務(wù)。

因?yàn)槿蝿?wù)調(diào)度機(jī)制保證不同任務(wù)之間的切換速度十分迅速,因此給人多個(gè)任務(wù)同時(shí)運(yùn)行的錯(cuò)覺(jué)。

---來(lái)自百度百科

初學(xué)者可以理解為:有類(lèi)似上面的多個(gè)輪詢系統(tǒng)。

如下代碼,將大while中的多項(xiàng)事情,分為幾個(gè)事情,分別處理。

void Task1(void){ /* 初始化 */ while(1) { /* 處理事情1 */ }}

void Task2(void){ /* 初始化 */ while(1) { /* 處理事情2 */ }}

這里就要牽涉到各個(gè)任務(wù)之間的切換:任務(wù)調(diào)度。

2任務(wù)調(diào)度

說(shuō)任務(wù)調(diào)度之前,先說(shuō)一插曲:

我開(kāi)始學(xué)RTOS時(shí),覺(jué)得CPU這么短時(shí)間(1ms)在各個(gè)任務(wù)之間來(lái)回切換,而且切換還需要執(zhí)行那么多代碼,這樣CPU還能執(zhí)行多少代碼啊?

其實(shí),我當(dāng)時(shí)太低估了處理器的能力。

STM32F103跑72M來(lái)說(shuō),1ms時(shí)間可以執(zhí)行的代碼有多少,你們心里有概念嗎?

沿著這個(gè)問(wèn)題,大家進(jìn)一步思考其實(shí)都能明白,區(qū)區(qū)那切換(任務(wù)調(diào)度)的幾行代碼對(duì)于CPU速度來(lái)說(shuō),這個(gè)處理時(shí)間可以忽略不計(jì)(當(dāng)然,這是相對(duì)高速處理而言。如果低頻的處理器,這個(gè)時(shí)間可能相對(duì)較長(zhǎng))。

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

任務(wù)調(diào)度可以分搶占調(diào)度和輪詢調(diào)度。

在RTOS中,為了使任務(wù)得到實(shí)時(shí)響應(yīng),一般使用搶占調(diào)度方式,我們拿UCOS為例:

0753a0c2-eb96-11eb-a97a-12bb97331649.jpg

你會(huì)發(fā)現(xiàn)只程序執(zhí)行過(guò)程中,如果有高優(yōu)先級(jí)任務(wù)帶來(lái),高優(yōu)先級(jí)任務(wù)就會(huì)打斷低優(yōu)先級(jí)任務(wù)。

直到高優(yōu)先級(jí)任務(wù)執(zhí)行完,低優(yōu)先級(jí)任務(wù)才得到相應(yīng)。

這里有人可能會(huì)問(wèn):如果高優(yōu)先級(jí)一直或長(zhǎng)時(shí)間執(zhí)行可以嗎?

答案是:NO

這里就關(guān)系到任務(wù)優(yōu)先級(jí)分配,以及任務(wù)設(shè)計(jì)問(wèn)題。

一般來(lái)說(shuō),高優(yōu)先級(jí)任務(wù)是在等待一個(gè)事件的觸發(fā),執(zhí)行一件緊急,而不會(huì)太耗時(shí)的事情。

太耗時(shí)任務(wù)一般留給低優(yōu)先級(jí)任務(wù),在系統(tǒng)不忙時(shí)慢慢處理。

調(diào)度過(guò)程

我們?cè)O(shè)置系統(tǒng)滴答為1ms時(shí)間,那么系統(tǒng)就會(huì)間隔1ms檢查一次就緒任務(wù)中優(yōu)先級(jí)更高的任務(wù)。

這個(gè)1ms滴答是由定時(shí)器中斷產(chǎn)生,一般像在STM32由內(nèi)核滴答定時(shí)器產(chǎn)生。

如上圖,他在(2)的位置就檢測(cè)到有更高優(yōu)先級(jí)任務(wù)(7)就緒,此時(shí)就會(huì)跳轉(zhuǎn)到任務(wù)(7)去執(zhí)行。

編輯:jq

聲明:本文內(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)投訴
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    819

    瀏覽量

    119887

原文標(biāo)題:RTOS實(shí)現(xiàn)多任務(wù)調(diào)度的基本原理

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32 簡(jiǎn)單多任務(wù)調(diào)度

    STM32的開(kāi)發(fā)目前大多數(shù)還開(kāi)處于“裸奔”的階段,處于開(kāi)發(fā)成本的考慮,可能還未嵌入任何的RTOS系統(tǒng),由于沒(méi)有操作系統(tǒng)的支持,因而不能方便的對(duì)多任務(wù)進(jìn)行調(diào)度和管理,在main函數(shù)中你可能會(huì)寫(xiě)成如下
    發(fā)表于 03-09 15:59

    STM32 簡(jiǎn)單多任務(wù)調(diào)度的方法與程序例程

    處于“裸奔”的階段,處于開(kāi)發(fā)成本的考慮,可能還未嵌入任何的RTOS系統(tǒng),由于沒(méi)有操作系統(tǒng)的支持,因而不能方便的對(duì)多任務(wù)進(jìn)行調(diào)度和管理,在main函數(shù)中你可能會(huì)寫(xiě)成如下方式:int main(void
    發(fā)表于 09-05 14:39

    RTOS多任務(wù)同步和通訊

    、郵箱、事件標(biāo)記、管道、信號(hào)和條件變量等。深入理解和實(shí)現(xiàn)RTOS深入理解和實(shí)現(xiàn)RTOS_連載6_多任務(wù)同步和通訊.pdf (379.46 K
    發(fā)表于 02-18 06:35

    RTOS多任務(wù)機(jī)制應(yīng)用演示

    的執(zhí)行路徑。深入理解和實(shí)現(xiàn)RTOS深入理解和實(shí)現(xiàn)RTOS_連載5_多任務(wù)機(jī)制應(yīng)用.pdf (247.18 KB )
    發(fā)表于 02-17 23:30

    在STM32下完成FreeRTOS的多任務(wù)程序開(kāi)發(fā)

    ---------FreeRTOS是一個(gè)迷你的實(shí)時(shí)操作系統(tǒng)內(nèi)核。作為一個(gè)輕量級(jí)的操作系統(tǒng),功能包括:任務(wù)管理、時(shí)間管理、信號(hào)量、消息隊(duì)列、內(nèi)存管理、記錄功能、軟件定時(shí)器、協(xié)程等,可基本滿足較小系統(tǒng)的需要。(二)FreeRTOS基本原理---------
    發(fā)表于 08-09 07:27

    實(shí)時(shí)多任務(wù)操作系統(tǒng)(RTOS

    多任務(wù)處理是指用戶可以在同一時(shí)間內(nèi)運(yùn)行多個(gè)應(yīng)用程序,每個(gè)應(yīng)用程序被稱(chēng)作一個(gè)任務(wù).Linux、windows就是支持多任務(wù)的操作系統(tǒng),比起單任務(wù)系統(tǒng)它的功能增強(qiáng)了許多。當(dāng)
    發(fā)表于 08-24 06:34

    RTOS中的多任務(wù)切換怎么實(shí)現(xiàn)

    RTOS中的多任務(wù)切換怎么實(shí)現(xiàn)
    發(fā)表于 11-30 07:23

    RTOS中的多任務(wù)切換的相關(guān)資料分享

    函數(shù)四.總流程五.結(jié)果六.后記(含代碼鏈接)一. 簡(jiǎn)介??RTOS中的多任務(wù)切換是操作系統(tǒng)與裸機(jī)編程的一個(gè)非常大的區(qū)別,一般邏輯變成運(yùn)行在一個(gè)循環(huán)內(nèi),裸機(jī)編程很難實(shí)現(xiàn)兩個(gè)事件的并行(這里的并行指的是
    發(fā)表于 12-06 07:08

    如何使用Tracealyzer理解多任務(wù)調(diào)度

    ,可能會(huì)阻止低優(yōu)先級(jí)任務(wù)的執(zhí)行,使其無(wú)法得到響應(yīng)。分析RTOS應(yīng)用中的任務(wù)優(yōu)先級(jí)和運(yùn)行時(shí)行為,需要記錄和可視化多任務(wù)
    發(fā)表于 12-17 16:01

    如何去實(shí)現(xiàn)一種基于ARM9的多任務(wù)搶占式調(diào)度器設(shè)計(jì)

    本文檔以ARM9(三星 2410/2440)為平臺(tái),介紹一個(gè)多任務(wù)搶占式調(diào)度器------搶占式任務(wù)調(diào)度,提供延時(shí),掛起,恢復(fù)任務(wù)操作。最精
    發(fā)表于 04-14 09:14

    網(wǎng)格任務(wù)調(diào)度算法研究

    網(wǎng)格任務(wù)調(diào)度算法是影響網(wǎng)格成功與否的關(guān)鍵技術(shù)之一。本文總結(jié)了網(wǎng)格計(jì)算系統(tǒng)的體系結(jié)構(gòu)和特征,分析了網(wǎng)格任務(wù)調(diào)度算法的
    發(fā)表于 08-14 10:27 ?10次下載

    基于DSP的實(shí)時(shí)多任務(wù)調(diào)度內(nèi)核設(shè)計(jì)

    基于DSP的實(shí)時(shí)多任務(wù)調(diào)度內(nèi)核設(shè)計(jì)
    發(fā)表于 10-19 15:30 ?7次下載
    基于DSP的實(shí)時(shí)<b class='flag-5'>多任務(wù)</b><b class='flag-5'>調(diào)度</b>內(nèi)核設(shè)計(jì)

    RTOS實(shí)時(shí)操作系統(tǒng)怎么執(zhí)行多任務(wù)的?

    RTOS實(shí)時(shí)操作系統(tǒng)中是怎樣實(shí)現(xiàn)多任務(wù)的?
    的頭像 發(fā)表于 03-03 13:49 ?4707次閱讀
    <b class='flag-5'>RTOS</b>實(shí)時(shí)操作系統(tǒng)怎么執(zhí)行<b class='flag-5'>多任務(wù)</b>的?

    DSP實(shí)時(shí)多任務(wù)調(diào)度的解決方案

    本文闡述了一個(gè)用于DSP的簡(jiǎn)潔而實(shí)用的實(shí)時(shí)多任務(wù)調(diào)度內(nèi)核的實(shí)現(xiàn)方法。DSP由于其架構(gòu)的特殊性,在任務(wù)調(diào)度方面與
    的頭像 發(fā)表于 03-24 15:22 ?4971次閱讀

    STM32 簡(jiǎn)單多任務(wù)調(diào)度的方法與程序例程

    多任務(wù)處理是指用戶可以在同一時(shí)間內(nèi)運(yùn)行多個(gè)應(yīng)用程序,每個(gè)應(yīng)用程序被稱(chēng)作一個(gè)任務(wù).Linux、windows就是支持多任務(wù)的操作系統(tǒng),比起單任務(wù)系統(tǒng)它的功能增強(qiáng)了許多。當(dāng)
    發(fā)表于 12-22 19:04 ?13次下載
    STM32 簡(jiǎn)單<b class='flag-5'>多任務(wù)</b><b class='flag-5'>調(diào)度</b>的方法與程序例程
    百家乐路单走势图| 德州扑克计算器| 沙龙百家乐官网赌场娱乐网规则| 大发888游戏平台188| 海王星百家乐官网技巧| 金冠娱乐城怎么样| 百家乐官网手机壳| 长沙县| 真人百家乐免费送钱| 百家乐官网赌场技巧论坛| 92棋牌游戏| 百家乐投注五揽式| 百家乐官网小型抽水泵| 郑州市太阳城宾馆| 缅甸百家乐论坛| 百家乐官网代理龙虎| 大发888迅雷下载免费| 百家乐如何投注| 澳门百家乐官网赢钱秘诀| 大发888资讯网007| 葡京百家乐玩法| 百家乐官网棋牌外挂| 香港六合彩开奖结果| A8百家乐娱乐网| 乐享百家乐官网的玩法技巧和规则 | 百家乐官网怎么玩请指教| 百家乐官网视频表演| 大发888娱乐场开户注册| 百家乐大路小路| 澳门百家乐官网怎么| 六合彩开奖结果直播| 中国百家乐的玩法技巧和规则| LV百家乐官网客户端LV| 百家乐官网策略| 大发888注册账号| 百家乐哪条下路好| 天堂鸟百家乐官网的玩法技巧和规则| 百家乐官网策略| 零点棋牌下载| 百家乐那个娱乐城信誉好| 百家乐娱乐城彩金|