编译优化
有一下一段简单代码
#define LED2=0x04;
#define LED3=0x40;
void toggle_led(void){
static int idx=0;
if((++idx)&1)
__REG_B(GPKDAT) = LED2;
else
__REG_B(GPKDAT) = LED3;
}
优化编译后反汇编得到的代码是:
//omit the code of testing idx,
movne r2,#LED2
ldrne r3,=GPKDAT
strbne r2,[r3]
moveq r2,#LED3
ldreq r3,=GPKDAT
strbeq r2,[r3]
bx lr
我估计在编译的时候,这里的语句没办法优化因此会 3,4,6,7 行的多余出来。其实这4行用2行代码就可以了。
修改了C代码为
#define LED2=0x04;
#define LED3=0x40;
void toggle(void){
static int idx=0;
unigned char temp;
if((++idx)&1)
temp = LED2;
else
temp = LED3;
__REG_B(GPKDAT) = temp;
}
代码编译后反编译:
//omit the code of testing idx
moveq r3,#LED2
movne r3,#LED3
ldr r2,=GPKDAT
strb r3,[r2]
估计是因为宏__REG_B中使用了volatile,因此对无法代码进行优化。