<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天內不再提示

FreeRTOS任務調度器的三種調度算法講解(下)

瑞薩MCU小百科 ? 來源:瑞薩嵌入式小百科 ? 2024-03-21 13:46 ? 次閱讀

2.配置調度算法

2.2

不帶時間片的搶占式調度

配置如下時,調度算法就會變成不帶時間片的搶占式調度

configUSE_PREEMPTION 1

configUSE_TIME_SLICING 0

和前面的唯一區別就是相同優先級的任務之間不會隨時間自動切換。

如果不使用時間片,那么調度程序只會在發生這兩種情況時,進行任務切換:

1

優先級更高的任務進入“就緒”態。

2

運行態任務變為阻塞態或被掛起。

很顯然,不使用時間片時,任務切換的情況會變少,所以關閉時間切片可以減少調度器的處理開銷。但是關閉時間切片也可能導致具有相同優先級的任務獲得的處理時間相差很大。因此,一定要慎重使用。

524f3520-e740-11ee-a297-92fbcf53809c.png

task1為最高優先級的事件驅動任務,task2和Idle task有相同的優先級。但是由于關閉了時間片,任務切換只會在空閑任務阻塞或者掛起或者task1搶占后發生,所以空閑任務和task2雖然優先級相同,但是明顯空閑任務占有的時間長很多。

2.3

協同調度

configUSE_PREEMPTION 0

configUSE_TIME_SLICING 隨便

當使用協同調度時,只有當運行態任務進入阻塞態,或者運行態任務通過調用taskYIELD()主動讓出,才會發生任務切換。

任務永遠不會被搶占,不能使用時間片,時間片配置的值隨便,無所謂。

525ff298-e740-11ee-a297-92fbcf53809c.png

task1、2、3優先級依次變低,剛開始task3運行,雖然task1和2優先級高,并且沒有阻塞,但是也無法搶占,task3調用taskYIELD(),主動讓出,因為task1優先級比task2高,task1就運行了,task1運行夠了進入阻塞態,由于task2比task3優先級高,task2就運行了。

2.4

優缺點

多任務訪問問題

在多任務程序中,應用程序編寫人員必須注意一個資源不能被多個任務同時訪問,因為同時訪問可能會破壞資源。例如,考慮以下場景,其中正在訪問的資源是UART(串口)。兩個任務是向UART寫入字符串,任務1寫“abcdefghijklmnop”,任務2寫“123456789”:

1

Task 1處于運行態,開始寫它的字符串。它將“abcdefg”寫入UART,然后離開運行態。

2

Task 2進入運行態,并在離開運行態之前向UART寫入“123456789”。

3

任務1重新進入運行態,并將其字符串的剩余字符寫入UART。

在該場景中,實際寫入UART的內容是“abcdefg123456789hijklmnop”。Task 1寫入的字符串沒有按照預期的連續順序寫入UART,而是被損壞了,因為Task 2寫入UART的字符串出現在UART中。

通常,使用協同調度比使用搶占調度更容易避免同時訪問引起的問題。

當使用搶占式調度時,運行狀態任務可以在任何時候被搶占,包括當它與另一個任務共享的資源處于不一致狀態時。正如剛才UART示例所演示的,讓資源處于不一致的狀態可能導致數據損壞。

當使用協同調度時,應用程序編寫人員控制何時可以切換到另一個任務(干完想干的再阻塞,或者讓出)。因此,應用程序編寫人員可以確保在資源處于不一致狀態時不會發生切換到另一個任務的情況。在上面的UART示例中,應用程序編寫人員可以確保Task 1在將其整個字符串寫入UART之前不會離開運行態,這樣做可以消除字符串被另一個任務的激活破壞的可能性。

很明顯,協同調度比搶占調度響應要慢。

當使用協同調度時,最高優先級任務進入就緒態時并不一定會立即執行,必須等到運行態任務進入阻塞態或調用taskYIELD()才會被執行。

使用搶占調度時,當一個比運行態任務優先級更高的任務進入就緒態時,這個任務會立即執行。這一點對于必須在一定時間內響應高優先級任務的實時系統是非常重要的。至于多任務訪問問題(其實也就是操作系統中的多線程問題),有其他手段去解決。

在RZ/T2L上做的實驗

如果兩個參數設置為:configUSE_PREEMPTION =0,configUSE_TIME_SLICING= 0或者1(隨便) 稱之為協同調度,當使用協同調度時,只有當運行態任務進入阻塞態,或者運行態任務通過調用taskYIELD()主動讓出,才會發生任務切換。

任務永遠不會被搶占,不能使用時間片,時間片配置的值隨便。我做了一個實驗截圖如下:

526ccee6-e740-11ee-a297-92fbcf53809c.png

527466c4-e740-11ee-a297-92fbcf53809c.png

上面的實驗說明 “只有當運行態任務進入阻塞態,或者運行態任務通過調用taskYIELD()主動讓出,才會發生任務切換”,此時與時間片1 ms已經沒有什么關系了。

如果兩個參數設置為 configUSE_PREEMPTION =1,configUSE_TIME_SLICING=1, 此時只有兩個任務并且優先級相同,每個任務都持續做一件事就會出現時間征為1ms的輪轉情況:

5297b5ca-e740-11ee-a297-92fbcf53809c.png

52b641b6-e740-11ee-a297-92fbcf53809c.png

通過上面的兩個實驗可以說明,時間片存的意義是相同優先級并且持續時間較長的處理任務,需要平等分享CPU使用權。但是如果一旦有一方主動放棄CPU或者阻塞或者更高優先級任務來了,調度器是不會等待一個時間片完全結束,再去調度就緒列表中的任務的,而是直接調用就緒列表里的第一個任務。這樣的設計我認為是合理的,如果一定要等待時間片結束,是存在嚴重的資源浪費的。




審核編輯:劉清

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

    關注

    12

    文章

    474

    瀏覽量

    61461
  • UART接口
    +關注

    關注

    0

    文章

    124

    瀏覽量

    15097
  • 中斷優先級
    +關注

    關注

    0

    文章

    22

    瀏覽量

    9295
  • 調度器
    +關注

    關注

    0

    文章

    96

    瀏覽量

    5175

原文標題:FreeRTOS任務調度器的三種調度算法和在RZ/T2L上的實踐(下)

文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FreeRTOS任務調度器的三種調度算法講解(上)

    RZ/T2L是一款高性能MPU,可通過EtherCAT實現高速、高精度的實時控制。
    的頭像 發表于 03-21 13:43 ?725次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b><b class='flag-5'>調度</b>器的<b class='flag-5'>三種</b><b class='flag-5'>調度</b><b class='flag-5'>算法</b><b class='flag-5'>講解</b>(上)

    淺析FreeRTOS任務調度器的三種調度算法和應用

    FreeRTOS在MCU領域應用非常廣泛,今天就給大家講解一下FreeRTOS調度器中的三種調度
    的頭像 發表于 05-10 14:02 ?1047次閱讀
    淺析<b class='flag-5'>FreeRTOS</b><b class='flag-5'>任務</b><b class='flag-5'>調度</b>器的<b class='flag-5'>三種</b><b class='flag-5'>調度</b><b class='flag-5'>算法</b>和應用

    改進的SEDF調度算法

    引入一比較機制來執行多處理間的負載平衡.當VCPU調度時,將就緒VCPU遷移到總運行時間最少的處理上.仿真實驗結果表明:IEDF調度
    發表于 04-24 10:03

    轉:第14章 任務調度—搶占式,時間片和合作式

    調度方式FreeRTOS操作系統支持三種調度方式:搶占式調度,時間片調度和合作式
    發表于 08-30 09:55

    轉第16章 FreeRTOS調度鎖,任務鎖和中斷鎖

    任務鎖函數,但是使用FreeRTOS現有的功能有兩實現方法:(1)通過給調度加鎖實現利用FreeR
    發表于 09-01 07:45

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

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

    請問FreeRTOS是如何實現調度的?

    最近入門RTOS,首先看書了解了合作式調度的應用,其基本思想是在主循環中不斷執行調度函數,在SysTick中斷中更新任務狀態,程序我也大致看懂了。之后到了入門
    發表于 07-30 07:40

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

    一、介紹調度是常用的一編程框架,也是操作系統的拆分多任務的核心,比如單片機的裸機程序框架,網絡協議棧的框架如can網關、485網關等等,使用場合比較多,是做穩定產品比較常用的編程技
    發表于 02-17 07:07

    FreeRTOS時間片調度概述

    一、FreeRTOS時間片調度概述FreeRTOS支持多個任務同時擁有一個優先級,這些任務調度
    發表于 02-18 06:10

    網格任務調度算法研究

    網格任務調度算法是影響網格成功與否的關鍵技術之一。本文總結了網格計算系統的體系結構和特征,分析了網格任務調度
    發表于 08-14 10:27 ?10次下載

    基于遺傳加差分算法的云計算任務調度

    基于遺傳加差分算法的云計算任務調度
    發表于 01-07 21:28 ?0次下載

    任務閾值調度算法

    針對當前云任務調度算法在密碼云環境中無法實現任務實時處理的問題,提出一種基于滾動優化窗口的實時閾值調度方法。首先,將密鑰調用環節融入密碼
    發表于 11-24 17:08 ?5次下載
    云<b class='flag-5'>任務</b>閾值<b class='flag-5'>調度</b><b class='flag-5'>算法</b>

    異構多核處理器任務調度算法

    任務調度響應實時性方面表現優異,但卻不適用于異構多核處理器環境。為此,提出一種高實時性任務調度算法HRSA。在Min-Min
    發表于 02-07 11:07 ?2次下載

    FreeRTOS時間片進行任務調度?

    注意:①任務切換會存在時間片開銷;FreeRTOS支持時間片,每個優先級可以支持無限多個任務,這些任務調度就是時間片
    發表于 12-23 20:02 ?0次下載
    <b class='flag-5'>FreeRTOS</b>時間片進行<b class='flag-5'>任務</b><b class='flag-5'>調度</b>?

    FreeRTOS調度器中的三種調度算法實踐(上)

    在優先級高于運行態任務任務進入就緒態時,調度器立即讓這個高優先級的任務“搶占”運行態任務。被搶占意味著
    發表于 03-21 13:45 ?190次閱讀
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>調度</b>器中的<b class='flag-5'>三種</b><b class='flag-5'>調度</b><b class='flag-5'>算法</b>實踐(上)
    亚洲欧美日韩精品久久_久久精品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>