本人是菜鸟,请教一下ucos在运行一个任务来中断,任务跟中断是怎么切换的?任务是如何保存现场的?具体代码时哪块。谢谢!
中断来了任务挂起
中断来了任务挂起,进入中断服务,当服务完成后切换到优先级最高的任务
[ 本帖最后由 cccccccc12333 于 2012-3-21 00:04 编辑 ]
中断服务程序将任务的环境(寄存器值)和返回地址压入堆栈
在中断返回的时候,查找优先级最高的就绪任务,从该任务的堆栈中弹出到寄存器值,及任务继续运行的地址,然后切换到该任务运行(转到该地址)
任务切换函数是OS_Sched,其中调用OS_SchedNew来取得就绪的最高优先级的任务到OSPrioHighReady
调用OSCtxSw(宏名OS_TASK_SW)来进行压栈和退栈操作
OS_Sched在OS_CORE.C
OSCtxSw在OS_CPU.C或OS_CPU.A看你是采用嵌入汇编还是直接用汇编