本帖最后由 熊仔 于 2023-10-7 12:29 编辑
(5)在uC/OS-II中,具体实现中断外任务切换的函数是上面第1651行的“OS_TASK_SW()”宏函数。 在首次引入中国的uC/OS-II的原始版本中,这个宏函数是利用80x86 CPU的软中断指令“INT”实现的。由于80x86软中断指令“INT”不受第1641行uC/OS-II进入临界区保护时关闭总中断的影响,在第1651行处产生一个真正的“软中断”,实现任务切换。在完成任务切换退出“软中断”之后,单片机继续执行第1655行的退出临界区保护程序,打开总中断,至此uC/OS-II系统才脱离临界区。
对于杨老师第五点。我有不同观点。 在完成任务切换退出“软中断”之后,单片机继续执行第1655行的退出临界区保护程序,打开总中断,至此uC/OS-II系统才脱离临界区。通过分析这很不正确。
int指令执行过程 1)取中断类型码n; 2)标志寄存器入栈(pushf),IF=0,TF=0(重置中断标志位); 3)CS、IP入栈; 4)查中断向量表, (IP)=(n*4),(CS)=(n*4+2)。 INT软中断后,OSCtxSw这个中断服务函数是立即执行的。OSCtxSw函数执行后,肯定是切换到新的任务去了,所以不会返回到断点。
|