yyq006 发表于 2017-5-12 14:04:27

keil arm编译BUG

今天调试一个程序,发现老是死在一个地方,仔细看了一下好像是keil编译器的问题:   414:         while(tx2ready){};
0x0800256A 7978      LDRB   r0,
0x0800256C 2800      CMP      r0,#0x00
0x0800256E D1FD      BNE      0x0800256C



本来tx2ready是作为一个发送完成标志,发送完成后在中断里清零,可以再次发送,但看编译结果,
0x0800256A 7978      LDRB   r0,         //往r0里送tx2ready的值

0x0800256C 2800      CMP      r0,#0x00               //比较

0x0800256E D1FD      BNE      0x0800256C         //非零跳转,但实际跳到了第二行,直接比较,r0的值并没有更新,形成死循环。

不知大家有没有遇到这个问题,我用的keil版本是uVision V5.23.0.0

moyanming2013 发表于 2017-5-12 14:26:51

你确保tx2ready被成功写0以及写0后被立即在while中判断了吗?
即使你都确保了,tx2ready应该被修饰为volatile。

QianFan 发表于 2017-5-12 14:32:14

volatile: +1

yyq006 发表于 2017-5-12 14:07:52

yyq006 发表于 2017-5-12 16:28:02

moyanming2013 发表于 2017-5-12 14:26
你确保tx2ready被成功写0以及写0后被立即在while中判断了吗?
即使你都确保了,tx2ready应该被修饰为volati ...

确实是我的疏忽,感谢提醒。

yyq006 发表于 2017-5-12 16:28:23

QianFan 发表于 2017-5-12 14:32
volatile: +1

确实是我的疏忽,感谢提醒。
页: [1]
查看完整版本: keil arm编译BUG