Если переменная доступна как по прерыванию, так и по основному коду, то она должна быть видна обоим, как в области видимости файла, так и глобально между файлами.Объявление переменной как static
не является проблемой.
Что касается volatile
, если вы устанавливаете флаг в функции прерывания, который затем опрашивается основным кодом для обнаружения возникновения прерывания.событие, то вы должны объявить переменную как volatile
, или вы можете получить то, что выглядит как некорректная операция кода, но на самом деле полностью допустимо.
например, ожидание в цикле флага, устанавливаемого прерыванием
while ( !Interrupt_Flag )
{
}
Если переменная Interrupt_Flag
не объявлена volatile
, то компилятор может прочитать ее значение только один раз и либо выполнить цикл навсегда, либо пропустить цикл без входа в цикл.Если он объявлен volatile
, то переменная будет считываться на каждой итерации цикла.
То, что переменная используется в функции прерывания, не делает ее изменчивой.
Если выизмените значение переменной в функции прерывания и в главном коде, например, установите флаг в прерывании и очистите в основном коде, тогда вы должны не забыть отключать прерывания вокруг строк, где вы изменяете значение в основном коде или странных вещахслучится.