uCOS-II移植模板为何要多用一个OSPendSV中断? 感觉没必要多用一个中断。
因为CORTEX-M3 中断自动保护局部变量寄存器, 使得切换任务全部都是在C环境下,OSCtxSw与OSIntCtxSw也就可以完全一样。 切换任务都是C环境下调用OSCtxSw,不必保存局部变量寄存器。 (实际上就是C环境下调用汇编规则,汇编可以任意使用局部变量寄存器而不必保存)
OSCtxSw(OSIntCtxSw): R4-R11入栈(非局部变量寄存器入栈) XPSR,PC,LR入栈 关中断 OSTCBCur->OSTCBStkPtr=SP OSTaskSwHook OSTCBCur=OSTCBHighRdy OSPrioCur=OSPrioHighRdy SP=OSTCBHighRdy->OSTCBStkPtr 恢复中断 R4-R11 出栈(非局部变量寄存器入栈) XPSR,PC,LR出栈 函数返回
|