RTOS上下文切换通过PendSV异常实现,核心机制为"硬件自动保存 + 软件手动补栈"。
1. 硬件自动保存
CPU响应PendSV时,自动将调用者保存寄存器 (R0-R3、R12)以及返回地址(LR)、程序状态(xPSR)压入当前任务的进程栈(PSP)。
2. 软件手动补栈
PendSV处理程序中,显式执行PUSH {R4-R11},保存被调用者保存寄存器,补齐完整上下文。
3. TCB锚定
将更新后的PSP值存入当前任务的任务控制块(TCB),实现栈与任务的绑定。
4. 恢复对称操作
从目标任务的TCB加载PSP,POP {R4-R11}恢复寄存器,异常返回时硬件自动弹出剩余上下文,任务无缝继续执行。
总结一句话就是::
上下文保存 = 硬件自动压栈(R0-R3,R12,LR,PC,xPSR) + 软件手动压栈(R4-R11),最终将 PSP 存入 TCB。