用了KEIL很久了,一直心里不踏实,因为总遇到一些奇怪的事情,今天又发生了一个:下面 是C源程序和汇编后的程序,大家帮分析一下。 if(m_st_SerialPort.u8UartRxActiveTimer)//如果不为零 { m_st_SerialPort.u8UartRxActiveTimer--;//减一 if(m_st_SerialPort.u8UartRxActiveTimer == 0);//如果为零 { m_st_SerialPort.u8RecDataPorNum = 0;//执行这里 } } 000D 7800 R MOV R0,#LOW m_st_SerialPort+01CH//判断第一个IF是否为零 000F E6 MOV A,@R0 0010 6005 JZ ?C0032//判断第一个IF是否为零,不为零跳转 ; SOURCE LINE # 192 ; SOURCE LINE # 193 0012 16 DEC @R0//减一 ; SOURCE LINE # 194 0013 ?C0033: ; SOURCE LINE # 195 ; SOURCE LINE # 196 0013 E4 CLR A// 这里减一之后直接把另一个数清零了,没有再判断一次,减一后是否为零 0014 7800 R MOV R0,#LOW m_st_SerialPort+01BH 0016 F6 MOV @R0,A ; SOURCE LINE # 197 ; SOURCE LINE # 198
不知道这样说大家能看懂吗~~ 我先判断一个数是否为零,不为零减一在判断是否为零,第二个判断是否为零没有做,直接执行IF里的语句了 为什么这样,是KEIL 给优化了吧,这句有啥问题呢,把变量加了 volalital之后还是不行。
|