有网友经实验验证,Systick虽然作为与CPU紧耦合的内核外设,但其中断优先级并不比普通外设要高,并不因为它是内核外设而特殊,它还是遵循中断优先级高低的规则来响应。
https://blog.csdn.net/To_be_a_fisher/article/details/84986790
Systick优先级是最低的
Systick虽然作为与CPU紧耦合的内核外设,但其中断优先级并不比普通外设要高,并不因为它是内核外设而特殊,它还是遵循中断优先级高低的规则来响应。
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */
根据代码可以看出systick的优先级是最低的。
总结:这也就说明了在移植UCOS时如何看待外设中断与软件定时器及任务的优先级的问题:如果不修改默认systick的硬件优先级,则优先级顺序为:外设中断、软件定时器(各软件定时器暂时没有分优先级按照FIFO顺序)、任务级优先级。
注意:Systick不一定是最低优先级,它是可以更改的。
- 如果想要精确定时也可使用以下函数将systick整成最高优先级
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 15);
- Systick属于内核异常中断应该用SHPR设置其优先级;外设中断属于ISR应该按NVIC_IPRx来设置优先级。