在 Cortex-M 上实现最小 RTOS 上下文切换,核心是利用硬件双栈指针机制。上电后默认使用 MSP,初始化时需为每个任务分配独立栈空间,并将 PSP 指向首个任务栈顶。切换流程:在 PendSV 异常中执行上下文保存与恢复。进入 PendSV 时硬件已自动压栈 xPSP 指向的栈(R0-R3、R12、LR、PC、xPSR),我们只需手动保存 R4-R11 和 PSP 到任务控制块。切换时先取新任务 TCB,恢复 R4-R11,再将 PSP 指向新任务栈顶,最后 bx lr 触发硬件自动出栈。关键点:PendSV 优先级设为最低,SVC 用于启动第一个任务;切换前用 CPSID I 关中断,完成后 CPSIE I 开中断。注意栈 8 字节对齐,否则会触发 UsageFault。最小实现约 50 行汇编加 C 结构体即可跑通两个任务交替闪烁 LED。
mcuku 阿沐 · 2026-10-15