移植ucosii碰到的疑惑,望大神解惑!
任务切换函数如下,不明白的是为什么没有把PC指针压入堆栈呢,我看了直接调用和间接调用OSCtxSw的函数也没有做这样的一个事情。望大神解答:OSCtxSw
push sr ; emulate interrupt by also saving the SR
PUSHALL ; push all registers
mov.w &OSTCBCur, R13 ; OSTCBCur->OSTCBStkPtr = SP
mov.w SP, 0(R13)
call #OSTaskSwHook
mov.b &OSPrioHighRdy, R13 ; OSPrioCur = OSPrioHighRdy
mov.b R13, &OSPrioCur ;
mov.w &OSTCBHighRdy, R13 ; OSTCBCur= OSTCBHighRdy
mov.w R13, &OSTCBCur ;
mov.w @R13, SP ; SP = OSTCBHighRdy->OSTCBStkPtr
POPALL ; pop all registers
reti ; return from interrup 软中断指令会强制返回地址和处理器状态压入当前任务的堆栈。 evanzn 发表于 2013-5-10 22:54 static/image/common/back.gif
软中断指令会强制返回地址和处理器状态压入当前任务的堆栈。
好像没有用到软中断指令? 1.在x86的移植版本中,OS_TASK_SW()函数模拟一次中断过程,ISR入口地址指向OSCtxSw,声明为:#define OS_TASK_SW() asm INT uCOS。
2。在atmega128等其他移植版本,若处理器不提供软终端机制,则#defineOS_TASK_SW() OSCtxSw();函数调用的话也会自动将返回地址入栈,
总之,返回地址总是自动入栈的。 evanzn 发表于 2013-5-11 01:01 static/image/common/back.gif
1.在x86的移植版本中,OS_TASK_SW()函数模拟一次中断过程,ISR入口地址指向OSCtxSw,声明为:#define OS_TA ...
谢谢!我明白了,你说的是!
页:
[1]