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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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