编译器优化等级提高导致的死机问题
如下图代码
理论上执行完UART4_IROHandler_num = 0才对,-O1的时候的确如此,但是开启-O3后已进入这个中断就会HardFault。
好在停止仿真后能看出来死在了哪里
然后就进来UART4_IRQHandler单步仿真看是哪句话导致的,定位到最后一句的赋值操作,应该赋值0的,但是每次都是个无序值。
查看汇编
这里它直接取 R4寄存器+4地址里的值跟0x09比较,少了for循环里的赋值。
其实就是它把我们的for循环优化成了两种情况,一种是UART4_IROHandler_num ==9, 另一种我也看不懂
所以解决也很简单,在定义处给i赋个初始值 uint8 i=0;即可。
本文来自博客园,作者:xjxcxjx,转载请注明原文链接:https://www.cnblogs.com/xjxcxjx/p/18141410,谢绝CSDN转载!