stm32筆記 | 程式碼中的__IO是什麼東西?

2020-08-11 16:14:00

在構建暫存器組的結構體時,會在每個代表暫存器的成員前面加個「__IO」字首。這個符號我暫且認定爲行業內用的,語法上不一定要用這個名字,它的原型是是C語言中的關鍵字「volatile」,表示變數是易變的,要求編譯器不要優化。

這些結構體內的成員,都代表着暫存器,而暫存器很多時候是由外設或STM32 晶片狀態修改的,也就是說即使CPU 不執行程式碼修改這些變數,變數的值也有可能被外設修改、更新,所以每次使用這些變數的時候,我們都要求CPU 去該變數的地址重新存取。若沒有這個關鍵字修飾,在某些情況下,編譯器認爲沒有程式碼修改該變數,就直接從CPU 的某個快取獲取該變數值,這時可以加快執行速度,但該快取中的是陳舊數據,與我們要求的暫存器最新狀態可能會有出入。