|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
用了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之后还是不行。 |
|