KEIL5 编译器导致的程序异常
生活随笔
收集整理的這篇文章主要介紹了
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
?
總結
以上是生活随笔為你收集整理的KEIL5 编译器导致的程序异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集群服务器分布式iis_Nginx+II
- 下一篇: 传奇登陆游戏黑屏错位以及登陆器配置和常见