Рекомендации по разработке приложений, готовых к работе
При разработке приложений для устройств 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.
Рекомендации по проектированию решений
Требования к подключению и устранение неполадок
- Убедитесь, что выполнены все предварительные требования к сети. Дополнительные сведения см. в разделе Требования к подключению и устранение неполадок.
- Устранение проблем с подключением с помощью
OSNetworkRequirementCheck-HLApp
иOSNetworkRequirementChecker-PC
.
Рекомендуемое содержимое
Дополнительные элементы, которые следует учитывать при перемещении решения Интернета вещей в рабочую среду, см. в разделе Перемещение решения Интернета вещей из тестового в рабочую среду.