Routine di servizio dell'interrupt (ISR)
La funzione a cui il processore salta quando scatta un interrupt: codice che gira a tempo preso in prestito, nel bel mezzo di qualcos'altro.
Il suo indirizzo proviene dalla tabella dei vettori di interrupt. Su Cortex-M un'ISR è una normale funzione C, perché l'hardware salva da sé nello stack i registri del chiamante in un exception frame; le architetture più vecchie richiedevano un prologo in assembly o una parola chiave specifica del compilatore come __interrupt.
Le regole di base sono universali: essere brevi, non bloccarsi mai, azzerare il flag di interrupt prima di tornare (altrimenti scatta di nuovo subito) e condividere i dati con il programma principale tramite variabili volatile o una sezione critica. Il lavoro pesante si delega a un task: vedi la gestione differita degli interrupt. FreeRTOS ha chiamate …FromISR() separate proprio perché l'API normale potrebbe tentare di mettersi in attesa, cosa che un'ISR non deve mai fare.