【发布时间】:2012-04-26 21:30:02
【问题描述】:
我想使用 avr-gcc 将全局变量绑定到未使用的 I/O 寄存器(例如 PORTB),以减少代码大小。我在 AVR 的应用笔记AVR035(第 14 页)中学到了这个技巧。
在应用笔记中,他们使用 IAR 编译器并将变量绑定到 I/O 寄存器,如下所示:
__no_init volatile uint8_t counter@0x35;
使用 avr-gcc,我可以使用以下行将变量绑定到标准寄存器(在本例中为 r3):
register uint8_t counter asm("r3");
这不适用于 I/O 寄存器。有没有办法对 I/O 寄存器执行此操作?
【问题讨论】:
-
哇,这是个好技巧。但有一个问题:当您考虑使用 IN 和 OUT 而不是 STS 和 LDS 获得的代码大小时,为什么不首先在汇编中编写整个代码?跨度>
-
Assembly 可能是这个级别的代码调整的好主意 :-) 我希望通过将一些全局变量移动到 i/o 寄存器来“快速”获得收益。原来这那并不容易。