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

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

3天內不再提示

SysTick的優(yōu)先級配置方法

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

SysTick的優(yōu)先級配置,常見的有兩種說法,這兩種說法完全相反,依次說一下各自特點。

第一種:

SysTick中斷優(yōu)先級應該設置為高。

在使用實時操作系統(tǒng)時,把內核“心跳”定時器的優(yōu)先級調高一些。持這種觀點的人認為優(yōu)先級調高了,使SysTick的ISR能搶占其它ISR,保證系統(tǒng)心跳的準確性,心跳準確了,才能保證實時性,SysTick的ISR一般都很短小精悍,對被搶占的ISR影響較小。

我們來看一下優(yōu)先級高了會怎么樣,如下圖所示,SysTick ISR能夠搶占用戶ISR,SysTick依然按照設定值規(guī)律性中斷。這種情況下對于線程時間片輪轉的方式比較準確,輪轉實時性好,基于SysTick的軟定時器也比較精準。但是如果用戶中斷有很多種,而且很頻繁,那么SysTick會不停的打斷用戶中斷,不斷的出棧入棧,影響用戶中斷的實時性。所以說SysTick中斷優(yōu)先級調高了有好處也有壞處。

pYYBAGP-vOiAQJJeAACJu8DyETQ719.png

第二種:

SysTick中斷優(yōu)先級應該設置為低。

持這種觀點的人認為優(yōu)先級設置為低了,用戶中斷能夠搶占SysTick,用戶中斷更準確,能快速響應內外部中斷。我們來看一下優(yōu)先級調低了有什么現(xiàn)象。

如下圖所示,在執(zhí)行用戶ISR的時候,SysTick中斷到來,由于優(yōu)先級低,只能掛起等待,用戶ISR結束后立即運行,最終導致兩次“心跳”間隔大,比如軟定時器等。從圖中可以看出,由于于SysTick有自動裝載功能,沒有影響下一次中斷。

poYBAGP-vPeAK2fPAADgf03c8Ok687.png

上圖中雖然某次心跳間隔大了,但是沒有“丟步”。如果用戶中斷種類多且很頻繁,如下圖所示,SysTick少進入一次中斷,這種情況不準確了。SysTick中斷不準了,線程時間片輪轉就不準了,基于SysTick的軟定時器也不準了。很多人人認為那可是系統(tǒng)時鐘呀,怎么能夠不準確,那還能叫實時操作系統(tǒng)嗎?仔細想一下就知道了,優(yōu)先級調低了,用戶中斷不受SysTick中斷影響,保障了用戶中斷,就是保障實時性!

poYBAGP-vRiAPgVSAADmS1XpqsA044.png

總結:

前面的文章中分析了(參見下面擴展閱讀),在實時操作系統(tǒng)中,實時性最高的是中斷程序,要及時的處理內外部中斷,線程內執(zhí)行的代碼因為需要任務調度等,實時性差一些。

如果SysTick優(yōu)先級調高,影響了用戶中斷,再加上線程調度本身也不準確,那么整個操作系統(tǒng)沒有準確的地方了。因此我個人同意第二種說法,SysTick優(yōu)先級降低,保障用戶中斷的實時性,線程的實時性放到第二位,這樣才能體現(xiàn)出實時特性。

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

    關注

    37

    文章

    6703

    瀏覽量

    123151
  • 中斷
    +關注

    關注

    5

    文章

    895

    瀏覽量

    41354
  • ISR
    ISR
    +關注

    關注

    0

    文章

    38

    瀏覽量

    14394
  • 線程
    +關注

    關注

    0

    文章

    504

    瀏覽量

    19636
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    13032
收藏 人收藏

    評論

    相關推薦

    systick的中斷優(yōu)先級是否應該設置為最高優(yōu)先級的嵌套中斷?

    最近在學習ucosii有這樣一個疑問,關于stm32的systick作為ucosii的基準時鐘,systick的中斷優(yōu)先級是否應該設置為最高優(yōu)先級的嵌套中斷。理由是什么?各位大俠求指教
    發(fā)表于 05-16 06:44

    systick優(yōu)先級比外設的優(yōu)先級高還是低,很多人回答不了

    提示:systick是內核的外設,其他外設比如串口,adc等是內核之外的外設。答案分析:[hide]1、只要內核的優(yōu)先級可以配置,那么內核的優(yōu)先級就不是一定比外設的高,而是要先比較軟件
    發(fā)表于 09-01 09:05

    中斷優(yōu)先級配置的函數

    一、中斷優(yōu)先級配置的函數:1.NVIC_IRQChannelPreemptionPriority配置搶占優(yōu)先級2.NVIC_IRQChannelSubPriority
    發(fā)表于 08-04 08:24

    STM32滴答時鐘SYStick優(yōu)先級設定方法是什么

    STM32滴答時鐘SYStick優(yōu)先級設定方法原文鏈接滴答寄存器Systick的定義和地址分配如下typedef struct{ __IO uint32_t CTRL; /*!<
    發(fā)表于 08-18 06:34

    怎樣去設定STM32滴答時鐘SYStick優(yōu)先級

    怎樣去設定STM32滴答時鐘SYStick優(yōu)先級呢?STM32滴答時鐘SYStick優(yōu)先級設定方法是什么?
    發(fā)表于 11-22 07:15

    RT-Thread的SysTick和pendSV的中斷優(yōu)先級該怎樣去設置呢

    的寄存器位置不同。外設的中斷配置在NVIC的IP內,內核的中斷配置在SCB內。更改SysTick的中斷優(yōu)先級方法:1.把匯編部分的NVIC
    發(fā)表于 04-25 11:09

    如何配置SysTick定時器中斷優(yōu)先級

    你好恩智浦團隊。我嘗試配置 SysTick 中斷但沒有成功。問題 1:如何更改 SysTick IRQ 優(yōu)先級?我使用了下面提到的兩種方法
    發(fā)表于 02-28 09:41

    STM32中斷及FreeRTOS中斷優(yōu)先級配置

    STM32中斷,及FreeRTOS中斷優(yōu)先級配置
    的頭像 發(fā)表于 03-04 11:45 ?8803次閱讀
    STM32中斷及FreeRTOS中斷<b class='flag-5'>優(yōu)先級</b><b class='flag-5'>配置</b>

    CortexM4內核Stm32-HAL_Init()及HAL_InitTick(TICK_INT_PRIORITY()詳解——Systick中斷優(yōu)先級

    )函數就講完了,其中,TICK_INT_PRIORITY為Systick時鐘默認中斷,為0x0F。如上文搶占有限和響應優(yōu)先級都是2來說,那么Systick的中斷
    發(fā)表于 12-01 13:36 ?7次下載
    CortexM4內核Stm32-HAL_Init()及HAL_InitTick(TICK_INT_PRIORITY()詳解——<b class='flag-5'>Systick</b>中斷<b class='flag-5'>優(yōu)先級</b>

    關于stm32內核外設Systick與普通外設中斷優(yōu)先級比較的驗證實驗(fishing_10)

    最近又遇到了使用Systick來產生精確計時,然后又涉及到了Systick的中斷優(yōu)先級的問題。我們老板認為Systick屬于內核外設,中斷優(yōu)先級
    發(fā)表于 12-04 13:36 ?12次下載
    關于stm32內核外設<b class='flag-5'>Systick</b>與普通外設中斷<b class='flag-5'>優(yōu)先級</b>比較的驗證實驗(fishing_10)

    Cortex-M中斷及FreeRTOS中斷優(yōu)先級配置原理

    下面就來說說關于Cortex-M的中斷,及FreeRTOS中斷優(yōu)先級配置原理。
    發(fā)表于 02-08 15:30 ?3次下載
    Cortex-M中斷及FreeRTOS中斷<b class='flag-5'>優(yōu)先級</b><b class='flag-5'>配置</b>原理

    中斷優(yōu)先級處理的原則及配置 搶占優(yōu)先級和響應優(yōu)先級的區(qū)別

    首先我們需要知道什么是中斷優(yōu)先級:中斷優(yōu)先級是CPU響應中斷的先后順序
    的頭像 發(fā)表于 05-18 15:10 ?2.6w次閱讀
    中斷<b class='flag-5'>優(yōu)先級</b>處理的原則及<b class='flag-5'>配置</b> 搶占<b class='flag-5'>優(yōu)先級</b>和響應<b class='flag-5'>優(yōu)先級</b>的區(qū)別

    什么是優(yōu)先級反轉

    假設現(xiàn)在有三個任務TaskA(優(yōu)先級高)、TaskB(優(yōu)先級中)、TaskC(優(yōu)先級低),一個信號量(Semaphore),此信號量用于任務之間爭奪某個資源。在某一時刻,高優(yōu)先級的Ta
    的頭像 發(fā)表于 04-24 13:01 ?2207次閱讀
    什么是<b class='flag-5'>優(yōu)先級</b>反轉

    為什么使用CubeMx配置NVIC時不見子優(yōu)先級選項

    時,不難發(fā)現(xiàn)一個問題,那就是怎么沒有中斷子優(yōu)先級【或稱響應優(yōu)先級、副優(yōu)先級等】的配置?!【當然,很多時候我們或許沒有關注子優(yōu)先級】如下圖所示
    的頭像 發(fā)表于 09-09 15:32 ?1210次閱讀
    為什么使用CubeMx<b class='flag-5'>配置</b>NVIC時不見子<b class='flag-5'>優(yōu)先級</b>選項

    GD32如何配置中斷優(yōu)先級分組以及中斷優(yōu)先級

    使用GD32 MCU的過程中,大家可能會有以下疑問:中斷優(yōu)先級如何配置和使用?
    的頭像 發(fā)表于 01-10 10:30 ?2900次閱讀
    GD32如何<b class='flag-5'>配置</b>中斷<b class='flag-5'>優(yōu)先級</b>分組以及中斷<b class='flag-5'>優(yōu)先級</b>