noInterrupts()
noInterrupts()
Tem horas em que você não pode ser interrompido no meio de uma operação — por exemplo, ao ler uma variável de vários bytes que uma interrupção também altera. O noInterrupts() congela todas as interrupções por um instante, garantindo que aquele trecho rode do início ao fim sem ninguém "furar a fila". Assim que terminar, você chama interrupts() pra tudo voltar ao normal.
Sintaxe
noInterrupts();
Parâmetros
Nenhum.
Retorno
Nada (void).
Exemplo
volatile int leituraSensor = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
int valor;
noInterrupts(); // ninguem altera leituraSensor agora
valor = leituraSensor;
interrupts(); // libera de novo
Serial.println(valor);
delay(100);
}
Notas e cuidados
- Sempre acompanhe de um
interrupts()logo depois — deixar as interrupções desligadas por muito tempo quebra omillis(), a comunicação serial e o atendimento de eventos. - Serve pra criar uma "seção crítica": proteja apenas o mínimo necessário, poucas linhas.
- Nos bastidores equivale à instrução
cli()do AVR (desabilita as interrupções).