【OS】RTOS的任务切换原理
在RTOS中有两个函数至关重要,分别是PendSV_Handler和SysTick_Handler。
SysTick_Handler:嘀嗒定时器中断,这个中断作为操作系统的心脏,给操作系统提供心跳,在中断服务中提供上下文切换和任务调度工作,如下图:
但是这样可能会出现以下错误:
这么解决这个问题呢?就使用SysTick_Handler触发PendSV_Handler,在PendSV_Handler里处理上下文切换,如下图:
关于这两个中断的优先级,PendSV_Handler设置成最低,没什么好说的。SysTick_Handler有的不设置或者设成最高,这样OS的实时性会好点,也可以精准延时。在外部中断中,出现依赖SysTick的类似HAL_Delay()这样的延时函数,也不会卡死。但像FreeRTOS或有一版的RT-Thread就把SysTick中断优先级设成最低,这种情况也挺普遍。。。这种项目对实时性要求不高,但更强调对外设中断的响应,同时外设中断服务不会被打断,简化设计,有利于系统稳定。详细见Cortex-M3权威指南(中文).pdf第121页
实时性强调的是在规定的时间内完成操作
