2
int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);

armcc コンパイラと -O0 最適化を使用しているときに*Registerasを宣言する必要がありますか?volatile

つまり、-O0 最適化では、そのような変数を として修飾する必要がありますvolatileか? (これはおそらく -O2 最適化で必要です)

4

1 に答える 1

4

揮発性なので、関係なくRegister宣言する必要があるようです。ポインターを介したアクセスを最適化しないコンパイラーに依存しているため、volatileそれをマークしても害はありません。volatile

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

これが正しくコンパイルされることを期待するために、コンパイラの最適化設定に依存するべきではありません。volatile物事を適切にマークするのを忘れていることが、組み込み C コードの最適化を開始すると、多くの場合、問題が発生し始める主な理由であると思います。

于 2010-04-08T22:23:58.963 に答える