假设有两个任务正在运行TASK_A和TASK_B。当TASK_A运行时,发生中断,需要将上下文切换到TASK_B。
在ISR内时,不应直接跳过TASK_B,因为它仍在ISR中并且尚未返回(例如:未执行RETI)。如果通常从ISR返回,它将照常返回TASK_A的最后一个程序计数器。因此,RTOS必须脱离ISR,并且一旦脱离ISR,就必须进行上下文切换到TASK_B。 RTOS退出ISR后如何立即获得控制权,而不是返回TASK_A。
如果从RTOS功能进行切换(例如在解锁互斥锁时),则可以通过备份寄存器进行直接切换。
RTOS如何处理这种情况
如果这是一个笼统的问题,请原谅我...
最佳答案
ISR必须以允许上下文切换的方式来实现。通常,在ISR结束时,将调用一个RTOS函数,以检查并执行上下文切换。
发生中断时,CPU保存其上下文并跳转到ISR。保存上下文的方式因CPU系列而异。 ISR完成后,应调用一个特殊的RTOS例程,该例程允许在ISR之后进行上下文切换。如果有更高优先级的任务准备运行,则此例程将执行上下文切换。它将采用CPU保存的中断前上下文并将其保存在TASK_A中。然后,它将获取已保存的TASK_B上下文并将其还原到CPU中,这样,当调用中断结束指令时,执行将返回TASK_B的上下文。
所有这些细节都非常依赖于CPU和RTOS。
关于rtos - RTOS如何完成从中断的任务切换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28486242/