0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SysTick的优先级配置方法

CHANBAEK 来源:硬件工程师干货 作者:硬件工程师干货 2023-03-01 10:49 次阅读

SysTick的优先级配置,常见的有两种说法,这两种说法完全相反,依次说一下各自特点。

第一种:

SysTick中断优先级应该设置为高。

在使用实时操作系统时,把内核“心跳”定时器的优先级调高一些。持这种观点的人认为优先级调高了,使SysTick的ISR能抢占其它ISR,保证系统心跳的准确性,心跳准确了,才能保证实时性,SysTick的ISR一般都很短小精悍,对被抢占的ISR影响较小。

我们来看一下优先级高了会怎么样,如下图所示,SysTick ISR能够抢占用户ISR,SysTick依然按照设定值规律性中断。这种情况下对于线程时间片轮转的方式比较准确,轮转实时性好,基于SysTick的软定时器也比较精准。但是如果用户中断有很多种,而且很频繁,那么SysTick会不停的打断用户中断,不断的出栈入栈,影响用户中断的实时性。所以说SysTick中断优先级调高了有好处也有坏处。

pYYBAGP-vOiAQJJeAACJu8DyETQ719.png

第二种:

SysTick中断优先级应该设置为低。

持这种观点的人认为优先级设置为低了,用户中断能够抢占SysTick,用户中断更准确,能快速响应内外部中断。我们来看一下优先级调低了有什么现象。

如下图所示,在执行用户ISR的时候,SysTick中断到来,由于优先级低,只能挂起等待,用户ISR结束后立即运行,最终导致两次“心跳”间隔大,比如软定时器等。从图中可以看出,由于于SysTick有自动装载功能,没有影响下一次中断。

poYBAGP-vPeAK2fPAADgf03c8Ok687.png

上图中虽然某次心跳间隔大了,但是没有“丢步”。如果用户中断种类多且很频繁,如下图所示,SysTick少进入一次中断,这种情况不准确了。SysTick中断不准了,线程时间片轮转就不准了,基于SysTick的软定时器也不准了。很多人人认为那可是系统时钟呀,怎么能够不准确,那还能叫实时操作系统吗?仔细想一下就知道了,优先级调低了,用户中断不受SysTick中断影响,保障了用户中断,就是保障实时性!

poYBAGP-vRiAPgVSAADmS1XpqsA044.png

总结:

前面的文章中分析了(参见下面扩展阅读),在实时操作系统中,实时性最高的是中断程序,要及时的处理内外部中断,线程内执行的代码因为需要任务调度等,实时性差一些。

如果SysTick优先级调高,影响了用户中断,再加上线程调度本身也不准确,那么整个操作系统没有准确的地方了。因此我个人同意第二种说法,SysTick优先级降低,保障用户中断的实时性,线程的实时性放到第二位,这样才能体现出实时特性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6822

    浏览量

    123329
  • 中断
    +关注

    关注

    5

    文章

    898

    浏览量

    41494
  • ISR
    ISR
    +关注

    关注

    0

    文章

    38

    浏览量

    14430
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19682
  • Systick
    +关注

    关注

    0

    文章

    62

    浏览量

    13081
收藏 人收藏

    评论

    相关推荐

    systick的中断优先级是否应该设置为最高优先级的嵌套中断?

    最近在学习ucosii有这样一个疑问,关于stm32的systick作为ucosii的基准时钟,systick的中断优先级是否应该设置为最高优先级的嵌套中断。理由是什么?各位大侠求指教
    发表于 05-16 06:44

    systick优先级比外设的优先级高还是低,很多人回答不了

    提示:systick是内核的外设,其他外设比如串口,adc等是内核之外的外设。答案分析:[hide]1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件
    发表于 09-01 09:05

    中断优先级配置的函数

    一、中断优先级配置的函数:1.NVIC_IRQChannelPreemptionPriority配置抢占优先级2.NVIC_IRQChannelSubPriority
    发表于 08-04 08:24

    STM32滴答时钟SYStick优先级设定方法是什么

    STM32滴答时钟SYStick优先级设定方法原文链接滴答寄存器Systick的定义和地址分配如下typedef struct{ __IO uint32_t CTRL; /*!<
    发表于 08-18 06:34

    怎样去设定STM32滴答时钟SYStick优先级

    怎样去设定STM32滴答时钟SYStick优先级呢?STM32滴答时钟SYStick优先级设定方法是什么?
    发表于 11-22 07:15

    RT-Thread的SysTick和pendSV的中断优先级该怎样去设置呢

    的寄存器位置不同。外设的中断配置在NVIC的IP内,内核的中断配置在SCB内。更改SysTick的中断优先级方法:1.把汇编部分的NVIC
    发表于 04-25 11:09

    如何配置SysTick定时器中断优先级

    你好恩智浦团队。我尝试配置 SysTick 中断但没有成功。问题 1:如何更改 SysTick IRQ 优先级?我使用了下面提到的两种方法
    发表于 02-28 09:41

    STM32中断及FreeRTOS中断优先级配置

    STM32中断,及FreeRTOS中断优先级配置
    的头像 发表于 03-04 11:45 8915次阅读
    STM32中断及FreeRTOS中断<b class='flag-5'>优先级</b><b class='flag-5'>配置</b>

    CortexM4内核Stm32-HAL_Init()及HAL_InitTick(TICK_INT_PRIORITY()详解——Systick中断优先级

    )函数就讲完了,其中,TICK_INT_PRIORITY为Systick时钟默认中断,为0x0F。如上文抢占有限和响应优先级都是2来说,那么Systick的中断
    发表于 12-01 13:36 7次下载
    CortexM4内核Stm32-HAL_Init()及HAL_InitTick(TICK_INT_PRIORITY()详解——<b class='flag-5'>Systick</b>中断<b class='flag-5'>优先级</b>

    关于stm32内核外设Systick与普通外设中断优先级比较的验证实验(fishing_10)

    最近又遇到了使用Systick来产生精确计时,然后又涉及到了Systick的中断优先级的问题。我们老板认为Systick属于内核外设,中断优先级
    发表于 12-04 13:36 12次下载
    关于stm32内核外设<b class='flag-5'>Systick</b>与普通外设中断<b class='flag-5'>优先级</b>比较的验证实验(fishing_10)

    Cortex-M中断及FreeRTOS中断优先级配置原理

    下面就来说说关于Cortex-M的中断,及FreeRTOS中断优先级配置原理。
    发表于 02-08 15:30 3次下载
    Cortex-M中断及FreeRTOS中断<b class='flag-5'>优先级</b><b class='flag-5'>配置</b>原理

    中断优先级处理的原则及配置 抢占优先级和响应优先级的区别

    首先我们需要知道什么是中断优先级:中断优先级是CPU响应中断的先后顺序
    的头像 发表于 05-18 15:10 2.7w次阅读
    中断<b class='flag-5'>优先级</b>处理的原则及<b class='flag-5'>配置</b> 抢占<b class='flag-5'>优先级</b>和响应<b class='flag-5'>优先级</b>的区别

    什么是优先级反转

    假设现在有三个任务TaskA(优先级高)、TaskB(优先级中)、TaskC(优先级低),一个信号量(Semaphore),此信号量用于任务之间争夺某个资源。在某一时刻,高优先级的Ta
    的头像 发表于 04-24 13:01 2278次阅读
    什么是<b class='flag-5'>优先级</b>反转

    为什么使用CubeMx配置NVIC时不见子优先级选项

    时,不难发现一个问题,那就是怎么没有中断子优先级【或称响应优先级、副优先级等】的配置?!【当然,很多时候我们或许没有关注子优先级】如下图所示
    的头像 发表于 09-09 15:32 1308次阅读
    为什么使用CubeMx<b class='flag-5'>配置</b>NVIC时不见子<b class='flag-5'>优先级</b>选项

    GD32如何配置中断优先级分组以及中断优先级

    使用GD32 MCU的过程中,大家可能会有以下疑问:中断优先级如何配置和使用?
    的头像 发表于 01-10 10:30 3092次阅读
    GD32如何<b class='flag-5'>配置</b>中断<b class='flag-5'>优先级</b>分组以及中断<b class='flag-5'>优先级</b>