2
int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);
在使用armcc編譯器和-O0優化時,我應該聲明*Register
爲volatile
嗎?armcc是否使用-O0優化非易失性變量?
換句話說:-O0優化是否需要將那類變量限定爲volatile
? (這可能需要在-O2優化)
int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);
在使用armcc編譯器和-O0優化時,我應該聲明*Register
爲volatile
嗎?armcc是否使用-O0優化非易失性變量?
換句話說:-O0優化是否需要將那類變量限定爲volatile
? (這可能需要在-O2優化)
在我看來,你應該聲明Register
爲volatile
不管,因爲它是易變的。在標記volatile
時沒有什麼壞處,因爲你依賴於編譯器而不是通過指針優化訪問。
int volatile* Register = (int*) 0x00FF0000;
您不應該依賴編譯器優化設置來希望編譯正確。我猜想,忘記標記volatile
適當的東西是啓動嵌入式C代碼優化常常導致事情開始突破的主要原因。
事實上,你可能是對的。但作爲新手的一部分,我沒有注意到「volatile」問題而犯了一個錯誤。現在,我必須再次閱讀我的代碼,這是很多。我的項目測試截止日期很近,所以我沒有時間。所以我剩下的就是希望-O0能夠救我...... – Dor 2010-04-08 22:29:08
@Dor:我想你並不孤單(就像我在最後一句話中所暗示的那樣)。所以'-O0'可能會幫助你解救,但你應該真的試着把這些東西弄清楚。如果不是現在,那麼按照時間表安排截止日期。 – 2010-04-08 22:34:28
好的,謝謝:) – Dor 2010-04-08 22:43:06