STM32 while語句奇怪的問題

2021-10-24 02:51:27 字數 377 閱讀 9769

一、現象

定義乙個全域性變數在while迴圈裡一直去判斷,然後在定時器中斷裡對其做加一操作。出現了這種現象,在while迴圈裡該變數取 出來的值一直為0,在定時器這邊取出來的值是一直在變化的。即同個全域性變數在不同函式出現兩個取值,這是不正常的。

二、原因及解決方法

經上網查閱得知是編譯器優化問題,這裡的原因是:編譯器優化掉了,因為在 c 編譯器看來:isr 並不會顯式的被 c 編譯器呼叫(isr 是隱式的呼叫,由硬體中斷觸發 mcu 呼叫的),所以認為他是不變的則沒有去取最新值來更新,解決方法是對變數加上關鍵字 volatile,表示其為易變的即可解決編譯器優化問題,保證同個變數只有乙個值。

stm32 奇怪的位賦值問題 出錯了

1 在51微控制器裡 下面這兩種操作方法都是一樣的,沒有什麼問題!1 out1 r1 是微控制器的乙個io口 dat是傳進來的乙個資料 if dat 0x80 0 out1 r1 0 0是不亮,1是亮 else out1 r1 1 2 out1 r1 dat 0x8000 stm32裡,這樣操作不行...

Python 迴圈語句 while語句的使用

python 中的迴圈語句有 for 和 while。python 迴圈語句的控制結構圖如下所示 while 迴圈 python 中 while 語句的一般形式 while 判斷條件 condition 執行語句 statements 另外,在 python 中沒有 do while 迴圈。例如下面...

python中的while語句

在 python 中,while else 在迴圈條件為 false 時執行 else 語句塊 usr bin python count 0 while count 5 print count,is less than 5 count count 1 else print count,is not ...