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
你确保tx2ready被成功写0以及写0后被立即在while中判断了吗?
即使你都确保了,tx2ready应该被修饰为volatile。 volatile: +1 moyanming2013 发表于 2017-5-12 14:26
你确保tx2ready被成功写0以及写0后被立即在while中判断了吗?
即使你都确保了,tx2ready应该被修饰为volati ...
确实是我的疏忽,感谢提醒。 QianFan 发表于 2017-5-12 14:32
volatile: +1
确实是我的疏忽,感谢提醒。
页:
[1]