开发生产就绪应用程序的建议

重要

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

为 Azure Sphere 设备开发应用程序时,需要考虑一些事项,确保应用程序已准备好生产。 本主题包含一个最佳做法清单,用于验证应用程序是否已准备好进行试点或生产部署。 确认这些项目已完成可以减少生产中遇到的问题数量,并更轻松地诊断出现的问题。

开发 Azure Sphere 应用程序时,决定是否在高级(HL)实时(RT)核心或两者混合上运行。 高级应用程序在 Azure Sphere OS 上运行容器化,支持实时的应用程序(RTApps)在裸机上运行,或者在实时核心上使用实时操作系统(RTOS)运行。

此处提供的建议旨在帮助你在生产就绪应用程序中提高质量和工作效率。 以下清单提供了针对两种应用程序类型的设计建议的简明列表,以及建议的编码基础知识和解决方案设计注意事项,包括更详细地讨论每个要点的主题的链接。 这些建议派生自我们与客户的合作关系,包括现场分析、代码评审和支持在实际解决方案和设备设计中生产部署的应用程序交互。

编码基础知识

  • 常见问题

    • 确保生产就绪的应用程序不使用 beta 工具集。
    • 面向 API 集时,请使用最新的 CMake 和 Azure Sphere 工具。
    • 为了确保完整的代码优化和大小,请考虑在发布模式下编译最终映像包,然后再将应用程序部署到生产环境。 在部署发布包之前,请确保生成并测试发布包。
    • 执行完整生成时使用零警告策略,以确保有意解决编译器警告。
    • 设置一致的 CI/CD 管道并使用适当的分支策略。
  • 内存相关问题

    • 如果可能,请将所有常见的固定字符串定义为 global const char* 而不是硬编码,以便它们可用作数据指针。
    • 如果全局数据结构相当小,请考虑为数组成员提供固定长度,而不是使用指针动态分配内存。
    • 尽可能避免动态内存分配。
    • 对于返回指向内存缓冲区的指针的函数,请考虑转换为将引用的缓冲区指针及其相关大小返回到调用方的函数。
  • 动态容器和缓冲区

    • 请考虑对容器(如列表和向量)使用增量分配方法。

高级核心应用程序设计建议

  • 一般基础知识

    • 在退出或错误时正确初始化和销毁所有处理程序。
    • 始终使用退出代码。
    • 如果应用程序检测到它处于不可恢复状态并且需要重启,请确保始终将其作为“干净”应用程序退出进行处理,而不是冒死锁状态的风险。
    • 实现错误处理和日志记录。 有关详细信息,请参阅 错误处理和日志记录
    • 使用系统计时器作为监视器来检测应用程序是否处于不可恢复状态或停止状态(例如死锁、耗尽内存或连接未通过实现的逻辑恢复),并影响适当的恢复。 有关详细信息,请参阅 使用系统计时器作为监视器
  • 处理并发

    • 尽可能使用 EventLoop。
    • 查找并发任务的效率。
    • 评估何时仅使用线程和范围到特定任务。 有关何时使用线程的详细信息,请参阅 处理并发
  • 连接性监视

    • 根据定期检查 Internet 连接状态的可靠状态机实现适当的连接运行状况检查任务。
    • 对于需要电源管理的解决方案,在发送数据后关闭 Azure Sphere 芯片,跟踪总运行时间,并设置关闭计时器。
    • cURL 最近更新了回调行为和最佳做法。 尽管 Azure Sphere 已努力确保旧版 cURL 行为继续按预期工作,但建议遵循使用 curl_multi 时的安全性和可靠性的最新指南,因为使用递归回调可能会导致意外崩溃、连接中断和潜在的安全漏洞。 如果 TimerCallback 触发超时为 0 毫秒,则将其视为 1 毫秒的超时,以避免递归回调。 请确保在调用curl_multi_add_handle后至少显式调用curl_multi_socket_action一次。
  • 内存管理和使用情况

    • 使用 Azure Sphere OS API 跟踪应用程序内存使用情况,并确保应用程序对意外的内存使用做出适当的反应。

实时核心应用程序设计建议

  • 启用 MT3620 监视器计时器以检测死锁并实现正确的恢复逻辑。
  • 为混合 HL 核心和 RT 核心应用程序实现核心间通信。

解决方案设计注意事项

  • 连接要求和故障排除

    • 确保满足所有网络先决条件。 有关详细信息,请参阅 连接要求和故障排除
    • 使用 OSNetworkRequirementCheck-HLAppOSNetworkRequirementChecker-PC. 排查连接问题。

有关将 IoT 解决方案移动到生产环境时要考虑的其他项目,请参阅 将 IoT 解决方案从测试移动到生产环境。