关于ucos在AVR上移植的堆栈疑问
例如进行任务切换_OSCtxSw::
PUSHRS ; Save current task's context
PUSHSREG
PUSHSP
进入函数第一件事就是入栈,那么此时的Y指针指向的确保一定是当前任务的堆栈入口吗?
是不是Y指针指向的地址只有在个别涉及到任务切换时才会改变?
LDS R30,_OSTCBCur ;
LDS R31,_OSTCBCur+1 ;
ST Z+,R28 ;
ST Z+,R29;
前面两个LDS语句是使 Z = OSTCBCur->OSTCBStkPtr
那么后面的怎么理解,是指把Y的内容即任务的堆栈入口放在Z所指向的地址内吗?可是Z已经入栈过了啊。
关于Z,Y两个寄存器在任务切换时应用还不是太清除,希望大家原谅我的无知 avr的汇编看不懂,ucos在进行任务切换时是从当前任务控制块中取到该任务的规模指针,然后再保存任务上下文的。
有时候可能还要做些调整,有的cpu会自动入栈一些东西。总之就是使任务的规模满足ucos的要求,要不然一切换肯定就跑飞了。
页:
[1]