wudean 发表于 2009-3-2 14:52:35

为什么两次调用__asm__ __volatile__("POP R31 \n\t&qu

//从中断退出并进行调度
void IntSwitch(void)
{      
//当中断无嵌套,并且没有在切换任务的过程中,直接进行任务切换
if(OSCoreState == 0x02 && IntNum==0)   
{
    //进入中断时,已经保存了SREG和R0,R1,R18~R27,R30,R31
    __asm__ __volatile__("POPR31                  \n\t");//去除因调用子程序而入栈的PC
    __asm__ __volatile__("POPR31                  \n\t");
    __asm__ __volatile__("LDIR16,0x01             \n\t");   
    //清除中断要求任务切换的标志位,设置正在任务切换标志位
    __asm__ __volatile__("RJMP Int_OSSched          \n\t");//重新调度
}
}
这程序中为什么会两次有POP R31?R31有什么作用?是保存子程序的返回地址吗?可以具体说一下AVR的R28、R29的作用吗,谢啦。

wudean 发表于 2009-3-14 20:42:48

哈哈。。。自己看完small RTOS后终于知道啦。。。

jiben042 发表于 2009-4-10 21:28:18

LZ可以解释一下吗?

aspenlin 发表于 2010-7-29 10:42:06

回复【楼主位】wudean 德仔
-----------------------------------------------------------------------

你看的是那一个small RTOS,是AVR的还是51的呢?谢谢
页: [1]
查看完整版本: 为什么两次调用__asm__ __volatile__("POP R31 \n\t&qu