Inizializzazione e terminazioneInitialization and termination

All'avvio, ogni applicazione di Azure Sphere deve eseguire alcune operazioni di inizializzazione:At start-up, every Azure Sphere application should perform some initialization:

  • Registrare un gestore SIGTERM per le richieste di terminazione.Register a SIGTERM handler for termination requests. Il sistema operativo del dispositivo Azure Sphere invia il segnale di terminazione SIGTERM per indicare che l'applicazione deve essere chiusa, con la maggior frequenza quando un aggiornamento è in sospeso, ma anche in risposta a una richiesta di spegnimento del dispositivo.The Azure Sphere device OS sends the SIGTERM termination signal to indicate that that application must exit, most frequently when an update is pending, but also in response to a device power down request. Come parte del relativo codice di inizializzazione, l'applicazione deve registrare un gestore per queste richieste.As part of its initialization code, the application should register a handler for such requests. Ad esempio:For example:

      #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 qualsiasi attività di arresto richiesta.In the termination handler, the application can perform whatever shutdown tasks it requires. Gestori di terminazione devono essere POSIX async-segnale-safe.Termination handlers must be POSIX async-signal-safe. In particolare, non devono contenere chiamate a Log_Debug() .In particular, they must not contain calls to Log_Debug(). I programmi di esempio escono sia in caso di errore che alla ricezione del segnale di terminazione.The sample programs exit on error as well as on receipt of the termination signal. Di conseguenza, questi programmi impostano semplicemente un valore booleano nel gestore di terminazione, quindi eseguono attività di pulizia e di arresto dopo l'uscita dal ciclo principale.Therefore, these programs simply set a Boolean in the termination handler and then perform cleanup and shutdown tasks after exiting the main loop.

  • Inizializzare i punti di controllo per le periferiche GPIO.Initialize handles for GPIO peripherals.

  • Se l'applicazione usa l'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 del dispositivo gemello e le chiamate con metodo diretto.If the application uses Azure IoT Hub, connect to the IoT client and register callback functions for IoT features such as cloud-to-device messages, device twin status, and direct method calls.

Al momento dell'arresto, l'applicazione deve chiudere le periferiche, eliminare definitivamente i punti di controllo e liberare memoria allocata.At termination, the application should close peripherals, destroy handles, and free allocated memory. L'applicazione ha solo due secondi per l'uscita alla ricezione del segnale SIGTERM; Se l'applicazione non è stata chiusa da, il sistema operativo Azure Sphere Invia un segnale SIGKILL che termina immediatamente l'applicazione.The application has only two seconds to exit upon receipt of the SIGTERM signal; if the application has not exited by then the Azure Sphere OS sends a SIGKILL signal which immediately terminates the application. Il segnale SIGKILL deve sempre essere evitato.The SIGKILL signal should always be avoided. 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.If the application routinely performs actions that might take longer than two seconds to complete, consider adding a deferred update loop to the application. Le applicazioni che usano la funzionalità powerdown devono eseguire tutte le operazioni di pulizia necessarie prima di chiamare le API di spegnimento.Applications that use the Powerdown feature should do any necessary cleanup before calling the power-down APIs.