[uCOS/uCGUI] 请教一下ucos在运行一个任务来中断,任务跟中断是怎么切换的?

zhypabc   2012-2-13 20:26 楼主
本人是菜鸟,请教一下ucos在运行一个任务来中断,任务跟中断是怎么切换的?任务是如何保存现场的?具体代码时哪块。谢谢!

回复评论 (2)

中断来了任务挂起

中断来了任务挂起,进入中断服务,当服务完成后切换到优先级最高的任务

[ 本帖最后由 cccccccc12333 于 2012-3-21 00:04 编辑 ]
点赞  2012-3-20 23:57
中断服务程序将任务的环境(寄存器值)和返回地址压入堆栈
在中断返回的时候,查找优先级最高的就绪任务,从该任务的堆栈中弹出到寄存器值,及任务继续运行的地址,然后切换到该任务运行(转到该地址)
任务切换函数是OS_Sched,其中调用OS_SchedNew来取得就绪的最高优先级的任务到OSPrioHighReady
调用OSCtxSw(宏名OS_TASK_SW)来进行压栈和退栈操作
OS_Sched在OS_CORE.C
OSCtxSw在OS_CPU.C或OS_CPU.A看你是采用嵌入汇编还是直接用汇编
点赞  2012-3-21 00:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复