Цитата
Да, при выходе из функции прерывания будут разрешены. Для чего вы используете запрет прерываний?
Если переменные из основной программы используются и в прерываниях.
А как тогда грамотно организовать крит секцию в такой ситуации?
Просто я раньше работал с С51 и там использовал такую конструкцию:
Код
#define DISABLE_INTERRUPTS(ea_bit) ea_bit = 1; if (!_testbit_(EA)) ea_bit = 0
#define ENABLE_INTERRUPTS(ea_bit) if (ea_bit) EA = 1
//вызов в программе:
bit ea_bit;
DISABLE_INTERRUPTS(ea_bit);
func();
ENABLE_INTERRUPTS(ea_bit);
Справка:
Функция _testbit_ выполняет инструкцию процессора JBC в сгенерированном коде программы, что позволяет одновременно проверить бит b и очистить его. Эта функция может использоваться только с прямо адресуемыми битовыми переменными, и неприменима к любым другим типам выражений. Эта функция реализована в виде встроенной функции. Весь генерируемый код вставляется непосредственно в месте вызова функции, вместо использования обычного вызова подпрограммы.