Я программирую микроконтроллер на языке Си, и я столкнулся со следующей ситуацией: чтобы включить / отключить внутренний генератор тактовых импульсов, мне нужно сначала записать ключ защиты в определенный регистр, а затем выполнить операцию включения / выключения, запись в другом реестре.
В руководстве пользователя указано следующее об этой операции:
отрывок из руководства пользователя
Как видно из выделенной части текста, фрагмент кода, который выполняет эти две операции (ключ защиты от записи и включение генератора), очень чувствителен, потому что любая операция должна выполняться между этими двумя доступом к регистру. Поэтому я начинаю беспокоиться о любой ситуации, которая может привести к непоследовательному выполнению этих двух операций.
Я знаю, что обычно временно отключать прерывание при выполнении чувствительного фрагмента кода, но мне было интересно, есть ли какая-либо оптимизация компилятора, которая могла бы вставить другую операцию между этими двумя доступом к регистру. Итак, в программировании на C есть какая-либо директива компилятора, чтобы гарантировать, что это не произойдет?
На самом деле, я даже не знаю, имеет ли смысл думать, что компилятор будет смешивать последовательность инструкций, написанных на языке Си. Я помню, что уже слышал, что это может происходить иногда, в процессе оптимизации скорости. Если я не прав, прошу прощения и заранее спасибо за разъяснения.