【STM32 系列】 —— 解決進入不了標志位的問題
引言
事情是這樣的,博主使用串口接收某個數據后,在串口中斷中置標志位,在主函數中進入標志位執行任務。但是這標志位死活進不去,博主還以為是串口的問題,改了一天的串口,幸好晚上發現是優化等級/代碼規范的問題,接下來仔細說說。
對了,最好看看這一篇文章,對問題的產生和解決會有更好的了解:keil里中斷服務函數設置標志位時加volatile
程序 / 問題
串口中斷接收并置標志位
可以看到博主的串口中斷函數,博主測試過是可以進入且標志位置一的。

while(1) 輪詢標志位
這里就產生了問題,程序之間跳過if,直接不進去了,樓主就找問題啊。

解決方法 一
打開魔術棒 -> C/C++ -> Optimization
可以看到其中有不同的優化等級,將其選到較低的 -O0 或 -O1 就行了,這時就可以進入標志位了。
原理就是標志位被優化掉了。

解決方法 二
加上 "volatile" 關鍵詞,防止標志位被優化。
例如:
點擊查看代碼
volatile uint8_t test_running_flag;
/* 這樣就OK了!*/
總結
最后再次推薦看看這篇文章:keil里中斷服務函數設置標志位時加volatile
博客導航
本文來自博客園,作者:膝蓋中箭衛兵,轉載請注明原文鏈接:http://www.rzrgm.cn/Skyrim-sssuuu/p/18808822

浙公網安備 33010602011771號
https://orcid.org/0000-0001-5102-772X