Поделиться через


Рекомендации по разработке готовых к работе приложений

Внимание

Это документация по Azure Sphere (устаревшая версия). Служба Azure Sphere (устаревшая версия) выходит на пенсию 27 сентября 2027 г., и к этому времени пользователи должны перейти в Azure Sphere (интегрированная). Используйте селектор версий, расположенный над toC, чтобы просмотреть документацию по Azure Sphere (интегрированная).

При разработке приложений для устройств Azure Sphere необходимо учитывать, что ваши приложения готовы к работе. В этом разделе содержится контрольный список рекомендаций по проверке готовности приложений к пилотной или рабочей развертыванию. Подтверждение того, что эти элементы завершены, может уменьшить количество проблем, возникающих в рабочей среде, и упростить диагностику всех возникающих проблем.

При разработке приложения Azure Sphere определите, будет ли оно выполняться на высоком уровне (HL), ядре реального времени (RT) или гибриде обоих. Высокоуровневые приложения выполняют контейнеры в ОС Azure Sphere и приложения с поддержкой реального времени (RTApps) выполняются на локальном компьютере или с операционной системой в режиме реального времени (ОСРВ) на ядрах реального времени.

Приведенные здесь рекомендации помогут повысить качество и производительность приложений, готовых к работе. Приведенный ниже контрольный список содержит краткий список предложений по проектированию для обоих типов приложений, а также рекомендации по написанию кода и рекомендации по проектированию решений, включая ссылки на разделы, которые подробно обсуждают каждую точку. Эти предложения являются производными от наших партнерских отношений с клиентами, включая анализ полей, проверки кода и поддержку взаимодействия рабочих приложений в реальных решениях и конструкциях устройств.

Основы программирования

  • Распространенные проблемы

    • Убедитесь, что готовые к работе приложения не используют наборы средств бета-версии.
    • При выборе набора API используйте последние средства CMake и Azure Sphere.
    • Чтобы обеспечить полную оптимизацию и размер кода, рассмотрите возможность компиляции окончательных пакетов образов в режиме выпуска перед развертыванием приложения в рабочей среде. Перед развертыванием пакета выпуска обязательно создайте и протестируйте его.
    • Используйте политику нулевого предупреждения при выполнении полной сборки, чтобы гарантировать, что предупреждения компилятора намеренно устраняются.
    • Настройте согласованный конвейер CI/CD и используйте правильную стратегию ветвления.
  • Проблемы, связанные с памятью

    • По возможности определите все общие фиксированные строки вместо global const char* жесткого написания кода, чтобы они могли использоваться в качестве указателей данных.
    • Если глобальные структуры данных достаточно малы, рассмотрите возможность предоставления фиксированных длин членам массива, а не использования указателей на динамически выделенную память.
    • Избегайте динамического выделения памяти каждый раз, когда это возможно.
    • Для функций, возвращающих указатель на буфер памяти, рекомендуется преобразовать в функции, возвращающие указатель на буфер со ссылкой и связанный с ним размер вызывающей стороны.
  • Динамические контейнеры и буферы

    • Рекомендуется использовать метод добавочного выделения для контейнеров, таких как списки и векторы.

Предложения по проектированию основных приложений высокого уровня

  • Общие основы

    • Правильно инициализировать и уничтожить все обработчики при выходе или ошибке.
    • Всегда используйте коды выхода.
    • Если приложение обнаруживает, что оно находится в неустранимом состоянии и требует перезапуска, убедитесь, что оно всегда обрабатывается как "чистый" выход приложения, а не рисковать состоянием взаимоблокировки.
    • Реализуйте обработку ошибок и ведение журнала. Дополнительные сведения см. в разделе об обработке ошибок и ведении журнала.
    • Используйте системный таймер в качестве сторожевой системы, чтобы определить, находится ли приложение в неустранимом состоянии или застойе (например, взаимоблокировка, исчерпанная память или подключение не восстанавливается, хотя реализованная логика), и повлияет на правильное восстановление. Дополнительные сведения см. в разделе "Использование системного таймера в качестве наблюдателя".
  • Обработка параллелизма

    • По возможности используйте EventLoop.
    • Найдите эффективность параллельных задач.
    • Оцените, когда следует использовать потоки и области только для конкретных задач. Дополнительные сведения об использовании потоков см. в разделе "Обработка параллелизма".
  • мониторинг подключений;

    • Реализуйте правильную задачу проверки работоспособности подключения на основе надежного компьютера состояния, который регулярно проверяет состояние подключения к Интернету.
    • Для решений, требующих управления питанием, выключите микросхему Azure Sphere после отправки данных, отслеживайте общее время работы и установите таймер завершения работы.
    • cURL недавно обновил поведение обратного вызова и рекомендации. Хотя Azure Sphere предприняла усилия по обеспечению работы более старых версий cURL, рекомендуется следовать последним рекомендациям по обеспечению безопасности и надежности при использовании curl_multi, так как использование рекурсивных обратных вызовов может привести к непредвиденным сбоям, сбоям подключения и потенциальным уязвимостям безопасности. Если таймерCallback запускается с тайм-аутом 0ms, обработайте его как время ожидания 1 мс, чтобы избежать рекурсивных обратных вызовов. Не забудьте также вызывать curl_multi_socket_action явно по крайней мере один раз после вызовов curl_multi_add_handle.
  • Управление памятью и использование

    • Отслеживайте использование памяти приложения с помощью API ОС Azure Sphere и убедитесь, что приложения реагируют соответствующим образом на непредвиденное использование памяти.

Рекомендации по проектированию основных приложений в режиме реального времени

  • Включите таймер watchdog MT3620, чтобы обнаружить взаимоблокировку и реализовать правильную логику восстановления.
  • Реализуйте межядерные коммуникации для гибридных приложений HL-core и RT-core.

Рекомендации по проектированию решений

  • Требования к подключению и устранение неполадок

Дополнительные элементы, которые следует учитывать при перемещении решения Интернета вещей в рабочую среду, см. в статье "Перемещение решения Интернета вещей из тестирования в рабочую среду".