2010-04-08 25 views
2
int* Register = 0x00FF0000; // Address of micro-seconds timer 
while(*Register != 0); 

在使用armcc編譯器和-O0優化時,我應該聲明*Registervolatile嗎?armcc是否使用-O0優化非易失性變量?

換句話說:-O0優化是否需要將那類變量限定爲volatile? (這可能需要在-O2優化)

回答

4

在我看來,你應該聲明Registervolatile不管,因爲它是易變的。在標記volatile時沒有什麼壞處,因爲你依賴於編譯器而不是通過指針優化訪問。

int volatile* Register = (int*) 0x00FF0000; 

您不應該依賴編譯器優化設置來希望編譯正確。我猜想,忘記標記volatile適當的東西是啓動嵌入式C代碼優化常常導致事情開始突破的主要原因。

+0

事實上,你可能是對的。但作爲新手的一部分,我沒有注意到「volatile」問題而犯了一個錯誤。現在,我必須再次閱讀我的代碼,這是很多。我的項目測試截止日期很近,所以我沒有時間。所以我剩下的就是希望-O0能夠救我...... – Dor 2010-04-08 22:29:08

+0

@Dor:我想你並不孤單(就像我在最後一句話中所暗示的那樣)。所以'-O0'可能會幫助你解救,但你應該真的試着把這些東西弄清楚。如果不是現在,那麼按照時間表安排截止日期。 – 2010-04-08 22:34:28

+0

好的,謝謝:) – Dor 2010-04-08 22:43:06