Armcc оптимизирует энергонезависимые переменные с -O0? - PullRequest
2 голосов
/ 09 апреля 2010
int* Register = 0x00FF0000; // Address of micro-seconds timer
while(*Register != 0);

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

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

1 Ответ

4 голосов
/ 09 апреля 2010

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

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

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

...