初始化和终止
启动时,每个 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 async-signal-safe。 具体而言,它们不得包含对 的
Log_Debug()
调用。 示例程序在错误和收到终止信号时退出。 因此,这些程序只需在终止处理程序中设置布尔值,然后在退出main循环后执行清理和关闭任务。初始化 GPIO 外围设备的句柄。
如果应用程序使用 Azure IoT 中心,请连接到 IoT 客户端并注册 IoT 功能的回调函数,例如云到设备的消息、设备孪生状态和直接方法调用。
终止时,应用程序应关闭外围设备、销毁句柄并释放分配的内存。 收到 SIGTERM 信号后,应用程序只有两秒钟的时间退出:如果应用程序尚未退出,则 Azure Sphere OS 会发送 SIGKILL 信号,该信号会立即终止应用程序。 应始终避免 SIGKILL 信号。 如果应用程序经常执行可能需要超过两秒才能完成的操作,请考虑向应用程序添加 延迟的更新循环 。 使用 Powerdown 功能 的应用程序应在调用关闭 API 之前执行任何必要的清理。