PERO', stiamo lavorando su Arduino, ed il core di Arduino attiva gli interrupt globali SEMPRE perché da essi dipendono componenti fondamentali per il suo funzionamento. Come la seriale. O come delay(). Quindi è un problema che si pone il giusto, se ragioniamo di Arduino. Se invece parliamo di un altro ambiente, allora le cose possono cambiare.
mmmm...si e no, più che si, in ogni caso non ti dimenticare di questa cosa, potrebbe esserti di aiuto.
Anche per arduino ci sono RTOS e lo switch context con gli interrupt di abilitati non si fa.
Il C è statico, tuttavia non è detto che non si possa creare codice che si comporta dinamicamente e qui conviene
salvare SREG o usare la macro. Pensa ad un array di puntatori a funzione, ogni funzione può modificare i puntatori, ne viene fuori che in base alla evoluzione dinamica del codice si chiamerà una funzione anziché un'altra e chi mi dice che la funzione che mi ha chiamato ha disabilitato gli interrupt a fatto qualcosa e poi mi ha chiamato e io che sono la funzione chiamata ho porzioni di codice che devo eseguire atomicamente e non posso disabilitare e riabilitare gli interrupt devo salvare lo stato, altrimenti alla funzione che mi ha chiamato gli restituisco il controllo con gli interrupt abilitati. ps: ho preso le sembianze di una funzione, terrificante.
Forse messa in questi termini ti fa più simpatia salvare lo stato:
Onde evitare che il programma costato mal di testa si comporti correttamente ora si ora no, ti metti al sicuro e salvi sempre lo stato, cioè la prendi come buona e saggia abitudine, in questo modo quando ti ritroverai potenzialmente nelle condizioni di introdurre side effect, la ATOMIC.... ti salva.
Ciao.