初始化和终止

重要

这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。

在启动时,每个 Azure Sphere 应用程序都应执行一些初始化:

  • 为终止请求注册 SIGTERM 处理程序。 Azure Sphere 设备 OS 发送 SIGTERM 终止信号,以指示应用程序必须在更新挂起时最频繁地退出,但也是为了响应设备关闭请求。 作为其初始化代码的一部分,应用程序应为此类请求注册处理程序。 例如:

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

    在终止处理程序中,应用程序可执行其所需的任何关闭任务。 终止处理程序必须是 POSIX 异步信号安全的。 具体而言,它们不得包含对 . 的 Log_Debug()调用。 示例程序会在发生错误和收到终止信号时退出。 因此,这些程序只需在终止处理程序中设置布尔,然后在退出主循环后执行清理和关闭任务。

  • 初始化 GPIO 外围设备的句柄。

  • 如果应用程序使用 Azure IoT 中心,请连接到 IoT 客户端并注册 IoT 功能的回调函数,如云到设备消息、设备孪生状态和直接方法调用。

终止时,应用程序应关闭外围设备、销毁句柄和释放分配的内存。 收到 SIGTERM 信号后,应用程序只有两秒才能退出;如果应用程序尚未退出,则 Azure Sphere OS 会发送 SIGKILL 信号,该信号会立即终止应用程序。 应始终避免 SIGKILL 信号。 如果应用程序定期执行可能需要超过两秒才能完成的操作,请考虑向应用程序添加 延迟更新循环 。 使用 Powerdown 功能 的应用程序应在调用关机 API 之前执行任何必要的清理。