Помогает ли armcc оптимизировать энергонезависимые переменные с -O0?

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

Должен ли я объявлять *Register как volatile при использовании компилятора armcc и -O0?

Другими словами: требует ли оптимизация -O0 квалифицировать такие переменные как volatile ? (что, вероятно, требуется при оптимизации -O2)

Мне кажется, что вы должны объявлять Register как volatile независимо, поскольку он изменчив. Нет никакого вреда в том, чтобы маркировать его volatile , поскольку вы зависите от компилятора, который не оптимизирует доступ через указатель.

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

Вы не должны зависеть от параметров оптимизации компилятора, чтобы надеяться, что это будет скомпилировано правильно. Я бы предположил, что забыть о том, как правильно отражать вещи, является основной причиной того, что оптимизация встроенного кода C часто приводит к тому, что вещи начинают ломаться.