KEIL5 编译器导致的程序异常

STM32F407写程序过程中发现了一个KEIL5 ARM编译器导致的BUG,记录如下。

源代码比较简单,分别打印两个标志量的值,采用了volatile 声明,避免被优化。

代码功能不用多说,看一下输出结果:

两个标志量都被编译器修改了,其值分别变为254,231。

经过反复调试,关闭优化(-O0选项),其值仍然是254和231。该代码用vscode + gcc编译,结果正确。因此,考虑可能是编译器的问题,然后更换编译器:

原来的编译器是默认的 compiler version 5, 更换V6.12过后编译,则输出正常。

分析:

debug看汇编代码对if(Flag != 1)的处理。

(1)默认的 compiler version 5:

(2)V6.12

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值