Keil 分配局部变量会自动选择未使用的寄存器的. 你大可放心地在任何地方定义局部变量.
在没有使用 USING x 的时候, 中断服务函数会自动入栈中断函数使用的所有寄存器.所以你也不用担心.
但是, 使用了 USING x 这样强制的寄存器组设定, 则 KEIL 默认本寄存器组只给这个中断服务使用. 所以没有了寄存器入栈操作, 所以在分配寄存器组时请注意, 一个组只能分配给一个中断使用.
另外, 在程序中随意改变寄存器组是不允许的, 因为编译器不会复制寄存器组的内容, 除非你自己来做这个事情.
还有, Keil 分配局部变量到寄存器的算法很笨的, 要想尽可能地使用寄存器, 请在函数开头定义所有用到的变量,而不要在下面的子块中定义(虽然变量的作用域仅在子块里).
|