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

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

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

RTOS為什么用PendSV進(jìn)行線程調(diào)度?

CHANBAEK ? 來源:硬件工程師干貨 ? 作者:硬件工程師干貨 ? 2023-03-01 10:47 ? 次閱讀

有些操作系統(tǒng)在“心跳”中斷(SysTick中斷)里進(jìn)行線程切換,如果處理器正在執(zhí)行一個(gè)ISR,此時(shí)SysTick異常到來,且SysTick優(yōu)先級(jí)高,搶占了正在運(yùn)行的用戶ISR,SysTick ISR是不能進(jìn)行線程切換的,因?yàn)镾ysTick ISR運(yùn)行完后要返回上一層用戶ISR,此時(shí)仍然處于異常模式,不能進(jìn)入線程模式,強(qiáng)行進(jìn)入線程模式會(huì)導(dǎo)致Fault異常。如下圖,延時(shí)到了第二個(gè)SysTick ISR才線程切換,實(shí)時(shí)性降低。在這種情況下,SysTick ISR中切換任務(wù),這會(huì)導(dǎo)致任務(wù)切換延后。

pYYBAGP-vBmABjqgAACZDOEhLTs867.png

極端的情況下,SysTick中斷和用戶中斷步調(diào)一致,會(huì)導(dǎo)致任務(wù)切換嚴(yán)重滯后。如下圖所示:

pYYBAGP-vC-ARgIWAACHJ2Iqn98501.png

有朋友說了,既然SysTick中斷搶占了用戶中斷不能調(diào)度線程,那么在用戶ISR即將退出時(shí)進(jìn)行調(diào)度就好了呀,確實(shí)比上面的情況要好一些,但這就需要在所有中斷的末尾都要檢查是否需要切換,增加用戶中斷程序復(fù)雜度。

也有朋友說了,把SysTick中斷優(yōu)先級(jí)調(diào)到最低是不是也可以呢,當(dāng)然可以,調(diào)低了優(yōu)先級(jí),避免了嵌套,就算用戶中斷期間產(chǎn)生SysTick中斷,但是SysTick中斷不能運(yùn)行,用戶中斷結(jié)束后,SysTick中斷“咬尾”,這樣是沒問題的,可是有一點(diǎn)SysTick的優(yōu)先級(jí)就無法提高了。

鑒于上述原因,我們想到了PendSV異常,這個(gè)異常比較特殊,可以理解為一個(gè)軟中斷(軟異常),代碼中操作寄存器就可以觸發(fā)此中斷,我們把它的優(yōu)先級(jí)調(diào)整到最低,當(dāng)SysTick ISR搶占了用戶中斷后,發(fā)現(xiàn)需要任務(wù)調(diào)度,就設(shè)置寄存器觸發(fā)PendSV異常,因?yàn)樗鼉?yōu)先級(jí)最低,不能響應(yīng),等到用戶中斷執(zhí)行完立即自動(dòng)響應(yīng),進(jìn)行任務(wù)切換,如下圖所示。

poYBAGP-vECAXPiBAAC198jzyNM802.png

一般情況下:

1、PendSV中斷優(yōu)先級(jí)設(shè)置為最低,用于線程調(diào)度。

2、SysTick中斷優(yōu)先級(jí)根據(jù)自己需求設(shè)置,如果想讓心跳更準(zhǔn)確就調(diào)高一些,如果想讓用戶中斷相應(yīng)更迅速就調(diào)低一些。

3、可以和PendSV一樣都設(shè)置為最低。

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

    關(guān)注

    37

    文章

    6703

    瀏覽量

    123151
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    895

    瀏覽量

    41354
  • RTOS
    +關(guān)注

    關(guān)注

    21

    文章

    809

    瀏覽量

    119374
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    504

    瀏覽量

    19636
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    13032
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RTOS中的線程、進(jìn)程和協(xié)程詳解

    看到有小伙伴在討論【RTOS任務(wù)屬于線程還是進(jìn)程】的話題,這里就來分析一下OS中的線程、進(jìn)程和協(xié)程的這幾個(gè)概念,同時(shí)一起看看RTOS中的任務(wù)到底屬于哪一種。
    的頭像 發(fā)表于 11-09 12:36 ?1827次閱讀
    <b class='flag-5'>RTOS</b>中的<b class='flag-5'>線程</b>、進(jìn)程和協(xié)程詳解

    轉(zhuǎn)第16章 FreeRTOS調(diào)度鎖,任務(wù)鎖和中斷鎖

    的作用區(qū)分開,調(diào)度鎖只是禁止了任務(wù)調(diào)度,并沒有關(guān)閉任何中斷,中斷還是正常執(zhí)行的。而臨界段進(jìn)行了開關(guān)中斷操作。16.2 中斷鎖中斷鎖就是RTOS提供的開關(guān)中斷函數(shù),F(xiàn)reeRTOS沒有專
    發(fā)表于 09-01 07:45

    rtthread線程調(diào)度

    rtthread線程調(diào)度,RT-Thread多線程學(xué)習(xí)總結(jié)多線程是實(shí)時(shí)操作系統(tǒng)里面最重要的知識(shí)點(diǎn)之一,要學(xué)習(xí)RTOS,多
    發(fā)表于 07-20 07:21

    如何合理的進(jìn)行線程切換與調(diào)度

    線程并發(fā)情況下,如何合理的進(jìn)行線程切換與調(diào)度,充分發(fā)揮芯片性能,解決線程間沖突,是迫切需要解決的問題。MDK5.25版本以后提供了新的Sy
    發(fā)表于 08-24 07:33

    RT-Thread的線程簡(jiǎn)介

    。RT-Thread的線程簡(jiǎn)介線程(thread)是系統(tǒng)能夠進(jìn)行調(diào)度的最小單位,在linux中也是這樣定義的,但是和我們RTOS中的thre
    發(fā)表于 08-24 07:56

    對(duì)RTOS進(jìn)行講解

    自動(dòng)化類專業(yè)小伙伴最早接觸一般都是在接觸RTOS后了,然而對(duì)于計(jì)算機(jī)相關(guān)專業(yè)的小伙伴應(yīng)該在學(xué)《計(jì)算機(jī)操作系統(tǒng)》老師對(duì)這一塊講解的非常清楚了,包括一些性能指標(biāo)的定義與計(jì)算等等,不過作者這里僅僅只針對(duì)RTOS進(jìn)行講解,大家感興趣可以
    發(fā)表于 11-10 07:24

    RT-Thread代碼啟動(dòng)與線程切換過程的實(shí)現(xiàn)

    線程的上下文切換可以下圖表示:2.2.3 系統(tǒng)調(diào)度系統(tǒng)調(diào)度就是在就緒列表中尋找優(yōu)先級(jí)最高的就緒線程,然后去執(zhí)行該
    發(fā)表于 04-25 11:38

    實(shí)現(xiàn)OSEK/VDX的RTOS進(jìn)行汽車電控單元開發(fā)

    討論了現(xiàn)階段實(shí)現(xiàn)OSEK/VDX規(guī)范的實(shí)時(shí)操作系統(tǒng)(RTOs)進(jìn)行汽車電控單元開發(fā)的必要性,介紹了OSEK OS的運(yùn)行機(jī)制和特點(diǎn),并對(duì)實(shí)現(xiàn)OSEK/VDX的
    發(fā)表于 04-20 08:49 ?15次下載

    RTOS線程訪問同一硬件(如UART)的方法

    RTOS線程(任務(wù))訪問同一硬件(如UART)的方法
    的頭像 發(fā)表于 03-12 11:28 ?5393次閱讀

    LEDs狀態(tài)燈任務(wù)(線程)設(shè)計(jì) (基于RTOS

    LEDs狀態(tài)燈任務(wù)(線程)設(shè)計(jì)(基于RTOS
    的頭像 發(fā)表于 03-12 11:30 ?2291次閱讀

    RTOS應(yīng)用中的調(diào)度策略

    RTOS中,協(xié)同調(diào)度是基于優(yōu)先級(jí)的非搶占調(diào)度方法。任務(wù)按優(yōu)先級(jí)排序,并且是事件驅(qū)動(dòng)類型的,一旦正在運(yùn)行的任務(wù)完成,或者任務(wù)主動(dòng)調(diào)用OS服務(wù)放棄CPU,就緒運(yùn)行的優(yōu)先級(jí)最高的任務(wù)才可以獲得CPU使用權(quán)。
    的頭像 發(fā)表于 05-29 09:19 ?637次閱讀
    <b class='flag-5'>RTOS</b>應(yīng)用中的<b class='flag-5'>調(diào)度</b>策略

    什么是虛擬線程?虛擬線程到底是做什么用的呢?

    虛擬線程是在Java并發(fā)領(lǐng)域添加的一個(gè)新概念,那么虛擬線程到底是做什么用的呢?
    的頭像 發(fā)表于 10-29 10:23 ?3039次閱讀
    什么是虛擬<b class='flag-5'>線程</b>?虛擬<b class='flag-5'>線程</b>到底是做<b class='flag-5'>什么用</b>的呢?

    SCP線程模型特點(diǎn)

    線程 混合協(xié)作調(diào)度模型-調(diào)度在具有相同優(yōu)先級(jí)的線程之間是協(xié)作的。 ?無需鎖 ?使代碼更簡(jiǎn)單,避免了死鎖的情況。 ?它消除了對(duì)執(zhí)行上下文/RTOS
    的頭像 發(fā)表于 11-02 17:07 ?508次閱讀
    SCP<b class='flag-5'>線程</b>模型特點(diǎn)

    新手必看的RTOS基礎(chǔ)知識(shí)

    時(shí)間片調(diào)度保證每個(gè)線程都有一個(gè)要執(zhí)行的槽。這種類型的調(diào)度通常不利于實(shí)時(shí)應(yīng)用。如果需要,TI-RTOS內(nèi)核支持使用任務(wù)進(jìn)行時(shí)間切片
    的頭像 發(fā)表于 11-20 16:06 ?2321次閱讀
    新手必看的<b class='flag-5'>RTOS</b>基礎(chǔ)知識(shí)

    基于RTOS的應(yīng)用進(jìn)程中的典型線程

    RTOS中的關(guān)鍵因素是最小的中斷延遲和最小的線程切換延遲。RTOS的價(jià)值在于它的響應(yīng)速度或可預(yù)測(cè)性,而不是它在給定時(shí)間段內(nèi)可以執(zhí)行的工作量。
    發(fā)表于 03-05 09:32 ?507次閱讀
    基于<b class='flag-5'>RTOS</b>的應(yīng)用進(jìn)程中的典型<b class='flag-5'>線程</b>