Статические переменные внутри прерываний - PullRequest
0 голосов
/ 25 октября 2018

При работе с микроконтроллером, таким как PIC32MZ, допустимо ли использование статических переменных внутри прерывания?Это было бы для счетчика времени.Если прерывание срабатывает каждую мсекунду, а флаг необходим каждую секунду.

Также необходимо сделать эту переменную изменчивой или ее существование внутри прерывания делает ее изменчивой?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если переменная доступна как по прерыванию, так и по основному коду, то она должна быть видна обоим, как в области видимости файла, так и глобально между файлами.Объявление переменной как static не является проблемой.

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

например, ожидание в цикле флага, устанавливаемого прерыванием

while ( !Interrupt_Flag )
{
}

Если переменная Interrupt_Flag не объявлена ​​volatile, то компилятор может прочитать ее значение только один раз и либо выполнить цикл навсегда, либо пропустить цикл без входа в цикл.Если он объявлен volatile, то переменная будет считываться на каждой итерации цикла.

То, что переменная используется в функции прерывания, не делает ее изменчивой.

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

0 голосов
/ 26 октября 2018

Да, статические внутри подпрограммы прерывания не проблема.

По моему мнению, volatile не требуется, поскольку вы обращаетесь к переменной только из функции isr.

...