SysTick的优先级配置方法

描述

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

第一种:

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

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

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

ISR

第二种:

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

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

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

ISR

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

ISR

总结:

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

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分