Развертывание приложения датчика реального времени ОСРВ Azure для мониторинга окружающей среды в помещении

Завершено

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

В этом уроке вы узнаете, как развернуть приложение реального времени на Azure Sphere для поддержки нового датчика температуры, влажности и давления.

Архитектура Azure Sphere

Микроконтроллер Azure Sphere предоставляет разработчикам три ядра: Cortex-A7, на котором выполняется ядро Linux, и два ядра Cortex-M4, которые могут выполнять код без операционной системы, или операционную систему реального времени, такую как ОСРВ Azure или FreeRTOS.

Высокоуровневые приложения, работающие в ядре Linux Cortex-A7, используются для менее чувствительных ко времени задач, таких как установка сетевых подключений, согласование безопасности, изменение состояния устройства, взаимодействие с основными приложениями реального времени и отправка сообщений телеметрии в облачные шлюзы, такие как Центр Интернета вещей.

Azure Sphere architecture.

Что такое ОСРВ (операционная система реального времени)

Говорят, что система работает в режиме реального времени, если общая правильность операции зависит не только от ее логической правильности, но и от времени ее выполнения. Статья в Википедии.

Операционная система реального времени — это системное программное обеспечение, которое предоставляет службы и управляет ресурсами процессора для приложений. К этим ресурсам относятся циклы процессора, память, периферийные устройства и прерывания. Основной целью операционной системы реального времени является распределение времени обработки между различными задачами, которые должно выполнять встроенное программное обеспечение.

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

Основные сведения об ОСРВ Azure

ОСРВ Azure — это операционная система реального времени, предоставляемая корпорацией Майкрософт. ОСРВ Azure — это встроенный набор средств разработки, включающий в себя небольшую, но мощную операционную систему под названием ThreadX, обеспечивающую надежную и сверхбыструю производительность для устройств с ограниченными ресурсами. Набор средств ОСРВ Azure включает другие компоненты, такие как средства и библиотеки разработки графического пользовательского интерфейса. В этом уроке мы будем использовать ОСРВ Azure ThreadX.

ОСРВ Azure ThreadX — это передовая операционная система реального времени (ОСРВ), разработанная специально для глубоко встраиваемых приложений. Многие ее преимущества включают многопоточность в реальном времени, межпоточную связь и синхронизацию, а также управление памятью. В ОСРВ Azure ThreadX реализовано множество дополнительных функций, включая архитектуру пикоядра, порог вытеснения, цепочки событий и богатый набор системных служб.

Зачем создавать и развертывать приложения реального времени

Причины запуска кода в ядрах реального времени Cortex M4:

  1. Миграция существующего кода Cortex M4 в Azure Sphere.
  2. Приложение требует точного или детерминированного времени, которое нельзя гарантировать в ядре Linux Cortex-A7, где необходимо конкурировать за ресурсы с другими службами.
  3. Приложение может выиграть от работы на нескольких ядрах за счет использования всей памяти и вычислительных ресурсов Azure Sphere.

Дополнительные сведения см. в руководстве Операционная система реального времени: что это такое и зачем вам это нужно.

Взаимодействие между ядрами

По соображениям безопасности приложения, работающие в ядрах реального времени, не могут получить доступ к сетевым ресурсам. Однако приложения могут взаимодействовать с приложениями, работающими на других ядрах, с помощью механизма защищенного почтового ящика. Также необходимо общее понимание или контракт, который описывает форму данных, передаваемых между ядрами. Там, где возможно, опишите форму сообщений данных с использованием базовых типов, таких как типы int, float, enum и char языка C. В более сложных случаях, например для передачи массива объектов, необходимо реализовать схему сериализации.

Следующая структура объявляет контракт между ядрами, используемый в данном уроке. Этот контракт расположен в каталоге IntercoreContract.

typedef enum
{
    LP_IC_UNKNOWN,
    LP_IC_HEARTBEAT,
    LP_IC_ENVIRONMENT_SENSOR,
    LP_IC_SAMPLE_RATE
} LP_INTER_CORE_CMD;

typedef struct
{
    LP_INTER_CORE_CMD cmd;
    float temperature;
    float pressure;
    float humidity;
    int sample_rate;
} LP_INTER_CORE_BLOCK;

Архитектура решения

Inter-core communications architecture.

Архитектура решения выглядит следующим образом.

  1. Поток датчика среды реального времени ОСРВ Azure запускается каждые 2 секунды. Поток сохраняет в памяти последние данные о температуре, влажности и давлении в окружающей среде.
  2. Высокоуровневое приложение потоковой передачи данных телеметрии запрашивает от ядра реального времени самые свежие данные об окружающей среде.
  3. Ответный поток службы среды реального времени ОСРВ Azure сообщает эти данные.
  4. Высокоуровневое приложение сериализует эти данные об условиях среды в помещении в формат JSON и отправляет сообщение телеметрии в Центр Интернета вещей.
  5. Обозреватель Интернета вещей Azure подписывается на сообщения телеметрии, отправляемые устройством в Центр Интернета вещей, и отображает данные телеметрии.
  6. Кроме того, вы можете установить желаемую температуру в помещении, задав соответствующее свойство. Свойство задается на устройстве через сообщение двойника устройства Центра Интернета вещей.
  7. Затем Azure Sphere устанавливает режим работы системы кондиционирования, позволяющий обеспечить желаемую температуру.

Безопасность и взаимодействие ядер реального времени

Как и высокоуровневые приложения, приложения реального времени защищены по умолчанию, поэтому вы должны объявить все ресурсы, необходимые приложению. Сюда входят доступ к периферийным устройствам и приложения, с которыми может взаимодействовать ядро реального времени. Для взаимодействия необходимо настроить приложения, работающие в ядрах, с соответствующими идентификаторами компонентов.

Возможности взаимодействия между ядрами реального времени

Для взаимодействия необходимо настроить приложения, работающие в ядрах, с соответствующими идентификаторами компонентов.

Идентификатор компонента для приложения высокого уровня можно найти в файле app_manifest.json.

{
  "SchemaVersion": 1,
  "Name": "AzureSphereIoTCentral",
  "ComponentId": "25025d2c-66da-4448-bae1-ac26fcdd3627",
  ...
}

В качестве значения свойства AllowedApplicationConnections в файле app_manifest.json приложения реального времени задается идентификатор компонента приложения высокого уровня ОСРВ Azure.

{
    ...
    "AllowedApplicationConnections": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
    ...
}