RTOS上下文切换 - 步骤 7
[详细示例]
RTOS tick
从 vPortYieldFromTick() 退出,返回到 SIG_OUTPUT_COMPARE1A(),其中最后一条指令返回自 interrupt (RETI)。RETI 指令假设,堆栈上的下一个值是中断发生时存放在其上的返回地址。
发生 RTOS tick 中断时,AVR 自动将 TaskA 返回地址存放在堆栈上,也即 TaskA 中下一条要执行指令的地址。RTOS tick 处理程序更改栈指针,让其当前指向 TaskB 栈。因此,使用 RETI 指令从堆栈弹出的返回地址实际上是 TaskB 在挂起前即将执行的指令的地址。
RTOS tick 中断了 TaskA,但却返回到 TaskB:上下文切换完成!
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.