今天调试一个程序,发现老是死在一个地方,仔细看了一下好像是keil编译器的问题: 414: while(tx2ready){}; 0x0800256A 7978 LDRB r0,[r7,#0x05] 0x0800256C 2800 CMP r0,#0x00 0x0800256E D1FD BNE 0x0800256C 本来tx2ready是作为一个发送完成标志,发送完成后在中断里清零,可以再次发送,但看编译结果, 0x0800256A 7978 LDRB r0,[r7,#0x05] //往r0里送tx2ready的值 0x0800256C 2800 CMP r0,#0x00 //比较 0x0800256E D1FD BNE 0x0800256C //非零跳转,但实际跳到了第二行,直接比较,r0的值并没有更新,形成死循环。 不知大家有没有遇到这个问题,我用的keil版本是uVision V5.23.0.0 |
即使你都确保了,tx2ready应该被修饰为volatile。
确实是我的疏忽,感谢提醒。
确实是我的疏忽,感谢提醒。