Мне кажется, что вы должны объявить Register
как volatile
независимо от того, что оно является изменчивым. Нет ничего плохого в том, чтобы пометить его volatile
, так как вы зависите от того, что компилятор не оптимизирует доступ через указатель.
int volatile* Register = (int*) 0x00FF0000;
Вы не должны зависеть от настроек оптимизации компилятора, чтобы надеяться, что это скомпилировано правильно. Я предполагаю, что забыв пометить вещи volatile
надлежащим образом, является основной причиной того, что запуск оптимизаций во встроенном коде C часто приводит к тому, что вещи начинают ломаться.