SysTick的优先级配置,常见的有两种说法,这两种说法完全相反,依次说一下各自特点。
第一种:
SysTick中断优先级应该设置为高。
在使用实时操作系统时,把内核“心跳”定时器的优先级调高一些。持这种观点的人认为优先级调高了,使SysTick的ISR能抢占其它ISR,保证系统心跳的准确性,心跳准确了,才能保证实时性,SysTick的ISR一般都很短小精悍,对被抢占的ISR影响较小。
我们来看一下优先级高了会怎么样,如下图所示,SysTick ISR能够抢占用户ISR,SysTick依然按照设定值规律性中断。这种情况下对于线程时间片轮转的方式比较准确,轮转实时性好,基于SysTick的软定时器也比较精准。但是如果用户中断有很多种,而且很频繁,那么SysTick会不停的打断用户中断,不断的出栈入栈,影响用户中断的实时性。所以说SysTick中断优先级调高了有好处也有坏处。
第二种:
SysTick中断优先级应该设置为低。
持这种观点的人认为优先级设置为低了,用户中断能够抢占SysTick,用户中断更准确,能快速响应内外部中断。我们来看一下优先级调低了有什么现象。
如下图所示,在执行用户ISR的时候,SysTick中断到来,由于优先级低,只能挂起等待,用户ISR结束后立即运行,最终导致两次“心跳”间隔大,比如软定时器等。从图中可以看出,由于于SysTick有自动装载功能,没有影响下一次中断。
上图中虽然某次心跳间隔大了,但是没有“丢步”。如果用户中断种类多且很频繁,如下图所示,SysTick少进入一次中断,这种情况不准确了。SysTick中断不准了,线程时间片轮转就不准了,基于SysTick的软定时器也不准了。很多人人认为那可是系统时钟呀,怎么能够不准确,那还能叫实时操作系统吗?仔细想一下就知道了,优先级调低了,用户中断不受SysTick中断影响,保障了用户中断,就是保障实时性!
总结:
前面的文章中分析了(参见下面扩展阅读),在实时操作系统中,实时性最高的是中断程序,要及时的处理内外部中断,线程内执行的代码因为需要任务调度等,实时性差一些。
如果SysTick优先级调高,影响了用户中断,再加上线程调度本身也不准确,那么整个操作系统没有准确的地方了。因此我个人同意第二种说法,SysTick优先级降低,保障用户中断的实时性,线程的实时性放到第二位,这样才能体现出实时特性。
全部0条评论
快来发表一下你的评论吧 !