int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);
armcc コンパイラと -O0 最適化を使用しているときに*Register
asを宣言する必要がありますか?volatile
つまり、-O0 最適化では、そのような変数を として修飾する必要がありますvolatile
か? (これはおそらく -O2 最適化で必要です)
揮発性なので、関係なくRegister
宣言する必要があるようです。ポインターを介したアクセスを最適化しないコンパイラーに依存しているため、volatile
それをマークしても害はありません。volatile
int volatile* Register = (int*) 0x00FF0000;
これが正しくコンパイルされることを期待するために、コンパイラの最適化設定に依存するべきではありません。volatile
物事を適切にマークするのを忘れていることが、組み込み C コードの最適化を開始すると、多くの場合、問題が発生し始める主な理由であると思います。