Если я в коде по прерыванию отключаю обработку этого самого прерывания, например на пару секунд, то прерывание действительно не будет обрабатываться эти две секунды, но если оно было, то будет обработано сразу же после следующего подключения прерывания. Верно ли я понимаю, что микроконтроллер запоминает факт прерывания, а поскольку мой вектор единственен для данной обработки, и он выключен, то не может этот флаг скинуть, пока как раз таки я снова не подключу прерывание и он тут же радостно мне его передает? Возможно ли как-то переопределить данное поведение? Или скинуть каким-то другим способом этот флаг? Я хочу в какой-то момент полностью отключать обработку, чтобы если прерывания и были за время отсутствия обработчика (а они я так понимаю есть всегда), то мне о них докладывать не нужно.
volatile bool interrupt;
bool process;
void isr() {
interrupt = true;
digitalWrite(13, HIGH);
delayMicroseconds(10000);
digitalWrite(13, LOW);
}
void setup() {
pinMode(3, INPUT_PULLUP);
attachInterrupt(1, isr, FALLING);
}
void loop() {
if (interrupt) {
detachInterrupt(1);
interrupt = false;
process = true;
}
if (process) {
delay(2000);
process = false;
attachInterrupt(1, isr, FALLING);
}
}