xingdajing 发表于 2008-5-4 12:44:43

关于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两个寄存器在任务切换时应用还不是太清除,希望大家原谅我的无知

zllfdd 发表于 2008-5-18 18:22:58

avr的汇编看不懂,ucos在进行任务切换时是从当前任务控制块中取到该任务的规模指针,然后再保存任务上下文的。
有时候可能还要做些调整,有的cpu会自动入栈一些东西。总之就是使任务的规模满足ucos的要求,要不然一切换肯定就跑飞了。
页: [1]
查看完整版本: 关于ucos在AVR上移植的堆栈疑问