回不来,因为你说的是调度,而不是调用,中断不是你起的一个task,不在任务列表里面,中断的生命周期只有从激起cpu响应到处理结束,而task的生命周期是从你主动建立到你主动销毁,这段时间内不管你喜欢它还是讨厌它,它始终会存在于系统中。
如果中断被调度程序打断切换出去,那么打断它的任务在几种情况下交出cpu,一是高优先级抢占,二是自己主动释放cpu(这种情况下cpu交给低优先级任务或者idle task),三是被中断打断,任何一种情况都回不到你以前的中断处理中去,四是自己的时间片到期交给同优先级的下一个就绪任务(这个叫做round robin调度,这种情况ucos不用考虑,因为ucos不支持多任务同优先级)。另外你从这段描述中会发现一个问题,如果你没有清中断标志位,那么即使调度出去了,那个task也要马上交还cpu,因为有中断在。
中断里面的pc指针入栈之类的操作是isr自己完成的而不是操作系统完成的。操作系统在进行任务调度的时候会记录tcb(task control block)的大量数据,而这种机制没有应用到中断处理被切换出去的情景。
|