Как заставить неиспользованную память читать в C, которая не будет оптимизирована?

Микроконтроллеры часто требуют чтения регистра, чтобы очистить определенные условия состояния. Существует ли переносимый способ в C, чтобы гарантировать, что чтение не оптимизируется, если данные не используются? Достаточно ли того, чтобы указатель на регистр отображения памяти был объявлен как volatile? Другими словами, будет ли следующее работать на стандартных совместимых компиляторах?

void func(void)
{
   volatile unsigned int *REGISTER = (volatile unsigned int *) 0x12345678;

   *REGISTER;
}

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

Ответы на вопрос(5)

Ваш ответ на вопрос