以STM32F205微控制器爲例。它具有硬件SPI接口。 SPI由多個寄存器組成。接收到的字節存儲在數據寄存器SPI-> DR中。當收到新字節時,硬件將SPI狀態寄存器SPI-> SR設置爲RXNE標誌(Rx not empy)。清除該標誌的正確方法是讀出數據寄存器SPI-> DR的內容。如果我使用臨時變量可以優化掉(因爲它不使用):如何確保微控制器外設寄存器已被讀取
uint8_t foo = SPI1->DR;
我看到了嵌入式軟件的另一個不尋常的事情,但我不知道它是否是正確的:
(void)SPI1->DR;
所以我正在尋找如何確保數據寄存器在高優化級別下被讀取的方法。
在這種情況下,我會得到一個不需要的編譯器的警告(foo是asigned value但未使用)。 – Max 2014-10-31 08:40:07
我更新了我的評論 – 2014-10-31 08:48:30
其實我並不需要數據庫的價值。我必須閱讀它才能使硬件清除RXNE標誌。賦值給一個變量只是一個最簡單的方法。 – Max 2014-10-31 08:50:38