先是用ICCAVR编译的程序,空间紧张了,压缩后用了百分之90,后来改用IAR,压缩后百分之58,压缩效率的确厉害,真是佩服。但是出现了一个问题,下面这个函数优化过头了: U16 GetSysTimer(void) { U16 u16ReturnValue; m_st_SysIntFlag.u8SysIntFlag &= ~0x01; u16ReturnValue = m_st_SysTimer.u16SysTimer;
if(m_st_SysIntFlag.u8SysIntFlag&0x01) { u16ReturnValue = m_st_SysTimer.u16SysTimer; }
return u16ReturnValue; }
原来的意思是取系统时间m_st_SysTimer.u16SysTimer,如果发生了中断,再取一次,IAR发现if(m_st_SysIntFlag.u8SysIntFlag&0x01)这句在此函数中没有意义,给优化掉了。想请教一下大家,可以评比对某个函数的优化吗,如果可以,那IAR真是好东东,以后就用这个了,代码压缩效率真绝。 |