在Tricore上移植μC/OS-III——3.4 在中断中执行任务切换

在中断中执行任务切换时,调用的是OSIntCtxSw()函数。任务切换的原理和上面是一样的。系统进入中断的时候也会自动保存原任务的UCX和LCX,区别就是进入中断后到调用OSIntCtxSw()之间多了两层函数嵌套,也就是多存储了两个UCX,所以在调用OSCtxSw()之前,要先将这两个UCX释放掉。

如图中所示,前三行使系统跳转到第四行的函数“j1”,消耗掉一个UCX,接下来三行使系统跳转到第七行的函数“j2”,再消耗掉一个UCX,然后在j2中直接跳转至函数OSCtxSw(),注意这里不是调用,而是直接跳转,所以不会存储UCX。后面的操作就和上面一样了。


/*------------------------------------------------------------------------------------------------*/
/*! \brief             TASK SWITCH FROM INTERRUPT
*
*          This function restores the context from the previous calls and jumps to OSCtxSw().
*          OSCtxSw() is invoked by a jump because there is still one upper context left on
*          the previous context list from the call to the interrupt handler
*
* \note    This function is used only inside OSIntExit().
*          OSIntExit() is located at 

你可能感兴趣的:(RTOS,Tricore,英飞凌,TC2XX,任务切换)