均使用s优化,使用GCC的200604版本
在中断函数的编译中,如: ISR(INT0_vect){ GICR = ( 0<<INT1 ) | ( 0<<INT0 ) | ( 0<<IVSEL ) | ( 0<<IVCE); } 编译结果: 0000006E: __vector_1 +0000006E: 921F PUSH R1 Push register on stack +0000006F: 920F PUSH R0 Push register on stack +00000070: B60F IN R0,0x3F In from I/O location +00000071: 920F PUSH R0 Push register on stack +00000072: 2411 CLR R1 Clear Register 24: GICR = ( 0<<INT1 ) | ( 0<<INT0 ) | ( 0<<IVSEL ) | ( 0<<IVCE); +00000073: BE1B OUT 0x3B,R1 Out to I/O location +00000074: 900F POP R0 Pop register from stack +00000075: BE0F OUT 0x3F,R0 Out to I/O location +00000076: 900F POP R0 Pop register from stack +00000077: 901F POP R1 Pop register from stack +00000078: 9518 RETI Interrupt return 优化效果不好,还有再优化的余地
SREG不用保存 即使保存,只用R0也可以了
|