只要用了using关键字,R0~R7就不存在自动压栈功能,自己看反汇编就明白了
zq1987731 发表于 2010-7-8 00:20
没错,只要用了using就不保存寄存器组参数。哪怕用using 0 和主程序一样的寄存器组,同样不保存。所以这里为避免错误,在默认为0组寄存器的情况下,中断就不要使用using 0了
不过一般来说,中断所用到的寄存器组和主程序的寄存器组设置成不一样的,免得中断需要压栈太多参数。由于主程序中不用到第1组寄存器,所以不保存也无妨。
还有一点要特别提醒,如果中断使用的寄存器组和被调用的函数的寄存器组不一样的话,是不可以的,会发生不可预料的错误(keil使用手册上说的)。
你这里的function函数是用第0组,但是中断用using x(X如果不是0),那本身就是不对的。 |