@leo72
Non ho indagato di recente sul perché si usi salvare SREG, quello che al tempo lessi nella maillist di avr-libc e più o meno riassunto di seguito:
Serviva un modo per rendere atomica una porzione di codice, salvando SREG si risolve ma tutti gli RTOS usano delle macro per architettura per rendere atomica una porzione di codice e ci voleva qualcosa di semplice come START_ATOMIC(), END_ATOMIC(), l'obbiettivo alla fine la soluzione che ho mostrato è stata scelta.
Se apri il file atomic.h della librerie avr-libc trovi
#define ATOMIC_RESTORESTATE uint8_t sreg_save \
__attribute__((__cleanup__(__iRestore))) = SREG
L'obbiettivo quindi non è disabilitare a prescindere gli interrupt ma è salvare lo stato, disabilitare gli interrupt eseguire codice protetto e poi rendere attuale lo stato salvato in precedenza.
Capisci che se hai poche righe di codice sai che gli interrupt sono abilitati e quindi chiami cli(), ma potrebbero anche essere disabilitati, ci potrebbe essere qualche flag che serve, e potresti anche avere 20 o più moduli c,
potresti usare RTOS che internamente necessitano di eseguire codice atomico.
@ziooetzi
In effetti siamo andati in profondità e non ci aspettavamo proprio che ci seguissi nel dettaglio.
Sei all'inizio dell'apprendimento ed è naturale ritrovarsi a usare codice pur non sapendo cosa accade
dietro le quinte. Di guide in rete ne trovi in grande quantità, il problema è che non sai cosa cercare e se ti dessi
dei riferimenti finiresti per studiare quello che al momento non ti serve.
Ti serve una infarinatura sull'architettura Hardware dei microcontroller o CPU, prestando più attenzione
al meccanismo degli interrupt che è il motivo della tua domanda. Ti servono i concetti chiave, senza i quali non riesci a capire l'esempio del tizio al telefono.
A questo livello di apprendimento puoi chiedere e documentarti sui concetti chiave, andare oltre non è proficuo.
Inoltre da quello che hai scritto in merito a "uint8_t" deduco che ti serve studiare un poco meglio il C/C++, anzi le basi di C devi farle tue, capisci che non puoi confondere uint8_t, int16_t, byte, bool ecc per variabili.
Quindi affronta il C dalle basi.
Quante parole chiave ha il C++?
non mi ricordo 37 forse.
Che differenza c'è tra C e C++?
Sono molto simili, il C++ è una evoluzione del C
Quali sono le parole chiave?
auto, bool, char, if, while, for, switch ecc
Che tipo di linguaggio è?
Compilato, strutturato, procedurale, orientato agli oggetti (C++ solo)
Ciao.