Inicialización y finalización

En el inicio, cada aplicación Azure Sphere debe realizar alguna inicialización:

  • Registre un controlador SIGTERM para las solicitudes de terminación. El sistema operativo del dispositivo Azure Sphere envía la señal de terminación SIGTERM para indicar que la aplicación debe salir, con frecuencia cuando hay una actualización pendiente, pero también en respuesta a una solicitud de apagado del dispositivo. Como parte de su código de inicialización, la aplicación debe registrar un controlador para dichas solicitudes. Por ejemplo:

      #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);
    

    En el controlador de terminación, la aplicación puede realizar las tareas de apagado que necesite. Los controladores de terminación deben ser posix async-signal-safe. En particular, no deben contener llamadas a Log_Debug(). Los programas de muestra se cierran por error, así como al recibir la señal de finalización. Por lo tanto, estos programas simplemente establecen un booleano en el controlador de terminación y luego realizar tareas de limpieza y apagado después de salir del bucle principal.

  • Inicializa los controladores de periféricos de GPIO.

  • Si la aplicación usa Azure IoT Hub, conéctese al cliente de IoT y registre funciones de devolución de llamada para características de IoT, como mensajes de nube a dispositivo, estado de dispositivo doble y llamadas de método directo.

Al terminar, la aplicación debe cerrar periféricos, destruir controladores y liberar memoria asignada. La aplicación sólo tiene dos segundos para salir al recibir la señal SIGTERM; si la aplicación no ha salido para entonces el Azure Sphere OS envía una señal SIGKILL que termina inmediatamente la aplicación. Siempre se debe evitar la señal SIGKILL. Si la aplicación realiza de forma rutinaria acciones que pueden tardar más de dos segundos en completarse, considere la posibilidad de agregar un bucle de actualización diferido a la aplicación. Las aplicaciones que usan la función Powerdown deben realizar cualquier limpieza necesaria antes de llamar a las API de apagado.