Bereitstellen einer Azure RTOS-Echtzeitsensoranwendung zum Überwachen der Raumumgebung

Abgeschlossen

Das Mikrobiologielabor führt eine Reihe von Experimenten für einen neuen Kunden durch. Die Experimente erfordern, dass die Temperatur, die Luftfeuchtigkeit und der Druck im Laborraum sehr stabil sind. Nach intensiver Untersuchung wurde ein neuer Umgebungssensor gefunden, der den Kundenanforderungen entspricht. Es wird jedoch festgestellt, dass der neue Sensor sehr zeitempfindlich ist und auf einem der Echtzeitkerne von Azure Sphere bereitgestellt werden muss.

In dieser Lerneinheit erfahren Sie, wie Sie eine Echtzeitanwendung auf einem Azure Sphere-Gerät bereitstellen, damit der neue Temperatur-, Luftfeuchtigkeits- und Drucksensor unterstützt werden kann.

Azure Sphere-Architektur

Der Azure Sphere-Mikrocontroller (MCU) verfügt über drei für Entwickler zugängliche Kerne, einen Cortex-A7-Kern, der einen Linux-Kernel ausführt, und zwei Cortex-M4-Kerne, die Bare-Metal-Code oder ein Echtzeitbetriebssystem wie Azure RTOS oder FreeRTOS ausführen können.

Allgemeine Anwendungen, die auf dem Cortex-A7-Linux-Kernel ausgeführt werden, werden für weniger timingempfindliche Aufgaben wie das Einrichten von Netzwerkverbindungen, das Verwalten der Sicherheit, das Aktualisieren des Gerätestatus, das Kommunizieren mit Echtzeitkernanwendungen und das Senden von Telemetriedatennachrichten an Cloudgateways wie IoT Hub verwendet.

Azure Sphere architecture.

Was ist ein Echtzeitbetriebssystem (RTOS)?

Ein System wird als Echtzeitsystem bezeichnet, wenn die gesamte Richtigkeit eines Vorgangs nicht nur von der logischen Richtigkeit, sondern auch von der Zeit abhängt, in der der Vorgang ausgeführt wird. Link zu Wikipedia-Artikel

Bei einem Echtzeitbetriebssystem handelt es sich um Systemsoftware, die Dienste bereitstellt und Prozessorressourcen für Anwendungen verwaltet. Zu diesen Ressourcen zählen Prozessorzyklen, Arbeitsspeicher, Peripheriegeräte und Unterbrechungen. Der Hauptzweck eines Echtzeitbetriebssystems besteht darin, die Verarbeitungszeit im Zusammenhang mit verschiedenen Tasks zuzuordnen, die die eingebettete Software ausführen muss.

Dies umfasst in der Regel eine Aufteilung der Software in verschiedene Teile, die häufig als „Tasks“ oder „Threads“ bezeichnet werden, und das Erstellen einer Laufzeitumgebung, die jedem Thread einen eigenen virtuellen Mikroprozessor („Multithreading“) bereitstellt. Im Grunde besteht ein virtueller Mikroprozessor aus einer virtuellen Gruppe von Mikroprozessorressourcen (z. B. Registergruppe, Programmzähler, Stapelspeicherbereich und Stapelzeiger). Nur während der Ausführung verwendet ein Thread die physischen Mikroprozessorressourcen, aber jeder Thread behält seine eigene Kopie des Inhalts dieser Ressourcen bei, so als würde es sich um eine private Ressource handeln („Kontext“ des Threads).

Einführung in Azure RTOS

Azure RTOS ist ein Echtzeitbetriebssystem von Microsoft. Azure RTOS ist eine eingebettete Entwicklungssuite einschließlich eines kleinen aber leistungsstarken Betriebssystems namens ThreadX, das eine zuverlässige und sehr hohe Leistungsfähigkeit für Geräte mit eingeschränkten Ressourcen bietet. Die Azure RTOS-Suite enthält andere Komponenten (z. B. GUI-Entwurfstools und -Bibliotheken). In dieser Lerneinheit verwenden Sie Azure RTOS ThreadX.

Azure RTOS ThreadX ist ein erweitertes Echtzeitbetriebssystem (RTOS), das speziell für tief eingebettete Anwendungen entwickelt wurde. Zu den zahlreichen Vorteilen zählen das Multithreading in Echtzeit, die threadübergreifende Kommunikation und Synchronisierung sowie die Speicherverwaltung. Azure RTOS ThreadX umfasst viele erweiterte Features einschließlich einer Picokernelarchitektur, Schwellenwerte für die vorzeitige Entfernung, Ereignisverkettung und vieler verschiedener Systemdienste.

Gründe für das Erstellen und Bereitstellen von Echtzeitanwendungen

Dies sind die Gründe für die Ausführung von Code auf den Cortex-M4-Echtzeitkernen:

  1. Sie migrieren vorhandenen Cortex-M4-Code zu einem Azure Sphere-Gerät.
  2. Ihre Anwendung erfordert ein präzises oder deterministisches Timing, das auf dem Cortex-A7-Linux-Kernelkern nicht garantiert werden kann, wo die Anwendung mit anderen Diensten fertiggestellt werden müssten.
  3. Die Anwendung kann von der Ausführung auf mehreren Kernen profitieren, indem alle Arbeitsspeicher- und Prozessressourcen auf dem Azure Sphere-Gerät genutzt werden.

Weitere Informationen finden Sie in der Anleitung Echtzeitbetriebssystem: Was ist das und warum Sie eines verwenden sollten.

Kernübergreifende Kommunikation

Aus Sicherheitsgründen können Anwendungen, die auf den Echtzeitkernen ausgeführt werden, nicht auf Netzwerkressourcen zugreifen. Anwendungen können jedoch über einen sicheren Postfachmechanismus mit Anwendungen kommunizieren, die auf anderen Kernen ausgeführt werden. Außerdem muss ein gemeinsames Verständnis oder ein gemeinsamer Vertrag vorhanden sein, der die Form der Daten beschreibt, die zwischen den Kernen weitergegeben werden. Beschreiben Sie nach Möglichkeit die Form der Datennachrichten mithilfe von grundlegenden Typen wie C-Integern, Gleitkommazahlen, Enumerationen und Zeichen. Für komplexere Anforderungen wie die Übergabe eines Arrays von Objekten müssen Sie ein Serialisierungsschema implementieren.

Die folgende Struktur deklariert den kernübergreifenden Vertrag, der in dieser Lerneinheit verwendet wird. Sie finden diesen Vertrag im Verzeichnis 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;

Lösungsarchitektur

Inter-core communications architecture.

Die Lösungsarchitektur lautet wie folgt:

  1. Der Azure RTOS-Echtzeitumgebungssensorthread wird alle zwei Sekunden ausgeführt. Der Thread speichert die neuesten Umgebungstemperatur-, Luftfeuchtigkeits- und Luftdruckdaten im Arbeitsspeicher.
  2. Die Streaming-App für allgemeine Telemetriedaten fordert vom Echtzeitkern die neuesten Umgebungsdaten an.
  3. Der Azure RTOS-Echtzeitumgebungsdienstthread sendet die neuesten Umgebungsdaten als Antwort.
  4. Die allgemeine Anwendung serialisiert die Umgebungsdaten als JSON und sendet die Telemetriedatennachricht an IoT Hub.
  5. Azure IoT-Explorer abonniert die Telemetrienachrichten, die vom Gerät an IoT Hub gesendet werden, und zeigt die Telemetriedaten an.
  6. Sie können die gewünschte Raumtemperatur auch bestimmen, indem Sie eine Eigenschaft festlegen. Die Eigenschaft wird auf dem Gerät über eine IoT Hub-Gerätezwillingsnachricht festgelegt.
  7. Das Azure Sphere-Gerät legt dann den Betriebsmodus der HVAC-Einheit in Abhängigkeit von der gewünschten Temperatur fest.

Sicherheit und Kommunikation von Echtzeitkernen

Echtzeitanwendungen sind wie allgemeine Anwendungen standardmäßig sicher, und Sie müssen alle Ressourcen deklarieren, die für die Anwendung erforderlich sind. Dies schließt den Zugriff auf Peripheriegeräte und die Anwendungen ein, mit denen der Echtzeitkern kommunizieren kann. Für die Kommunikation müssen kernübergreifend ausgeführte Anwendungen mit den entsprechenden Komponenten-IDs konfiguriert werden.

Kernübergreifende Echtzeitfunktionen

Für die Kommunikation müssen kernübergreifend ausgeführte Anwendungen mit den entsprechenden Komponenten-IDs konfiguriert werden.

Die Komponenten-ID für die allgemeine Anwendung befindet sich in der app_manifest.json-Datei.

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

Die AllowedApplicationConnections-Eigenschaft in der app_manifest.json-Echtzeitdatei wird auf die Komponenten-ID der allgemeinen Azure Sphere-Anwendung festgelegt.

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