关注+星标公众号,不错过精彩内容
编排 | strongerHuang
微信公众号 | 嵌入式专栏
非抢占式内核
(1) 任务正在执行但被中断。 (2) 如果中断被使能,CPU 向量(跳转)到 ISR。 (3) ISR 处理事件并使更高优先级的任务准备好运行。 (4) ISR完成后,执行返回指令,CPU返回被中断的任务。 (5) 任务代码在中断指令之后的指令处恢复。 (6) 当任务代码完成时,它调用内核提供的服务,将 CPU 交给另一个任务。 (7) 内核看到更高优先级的任务已经准备好运行,因此,内核执行上下文切换,以便它可以运行(即执行)更高优先级的任务来处理由 ISR 发出信号的事件。
抢占式内核
(1) 任务正在执行但被中断。 (2) 如果中断被使能,CPU 向量(跳转)到 ISR。 (3) ISR 处理事件并使更高优先级的任务准备好运行。ISR 完成后,调用内核提供的服务(即调用内核提供的函数)。 (4) & (5) 该函数知道一个更重要的任务已经准备好运行,因此内核将执行上下文切换并执行更重要的代码而不是返回到被中断的任务任务。当更重要的任务完成时,内核提供的另一个函数被调用,让任务进入休眠状态,等待事件(即 ISR)发生。 (6) & (7) 然后内核“看到”需要执行一个较低优先级的任务,并完成另一个上下文切换以恢复被中断任务的执行。