Inizializzazione e terminazione
All'avvio, ogni applicazione Azure Sphere deve eseguire alcune inizializzazioni:
Registrare un gestore SIGTERM per le richieste di terminazione. Il sistema operativo del dispositivo Azure Sphere invia il segnale di terminazione SIGTERM per indicare che l'applicazione deve uscire, più frequentemente quando è in sospeso un aggiornamento, ma anche in risposta a una richiesta di sperizione del dispositivo. Nell'ambito del codice di inizializzazione, l'applicazione deve registrare un gestore per tali richieste. Per esempio:
#include <signal.h> ... // Register a SIGTERM handler for termination requests struct sigaction action; memset(&action, 0, sizeof(struct sigaction)); action.sa_handler = TerminationHandler; sigaction(SIGTERM, &action, NULL);
Nel gestore di terminazione, l'applicazione può eseguire le attività di arresto richieste. I gestori di terminazione devono essere POSIX async-signal-safe. In particolare, non devono contenere chiamate a
Log_Debug()
. I programmi di esempio escono dall'errore e alla ricezione del segnale di terminazione. Pertanto, questi programmi impostano semplicemente un valore booleano nel gestore di terminazione e quindi eseguono attività di pulizia e arresto dopo aver chiuso il ciclo principale.Handle di inizializzazione per le periferiche di GPIO.
Se l'applicazione utilizza hub IoT di Azure, connettersi al client IoT e registrare le funzioni di callback per le funzionalità IoT, ad esempio i messaggi da cloud a dispositivo, lo stato gemello del dispositivo e le chiamate dirette al metodo.
Al termine, l'applicazione deve chiudere le periferiche, distruggere gli handle e liberare memoria allocata. L'applicazione dispone solo di due secondi per uscire dopo aver ricevuto il segnale SIGTERM; se l'applicazione non è uscita da allora il sistema operativo Azure Sphere invia un segnale SIGKILL che termina immediatamente l'applicazione. Il segnale SIGKILL deve essere sempre evitato. Se l'applicazione esegue regolarmente azioni che potrebbero richiedere più di due secondi per il completamento, è consigliabile aggiungere un ciclo di aggiornamento posticipato all'applicazione. Le applicazioni che usano la funzionalità Powerdown devono eseguire tutte le operazioni di pulizia necessarie prima di chiamare le API di accensione.