Comment déployer une application de capteur temps réel Azure RTOS pour surveiller l’environnement de la pièce

Effectué

Le laboratoire de microbiologie va effectuer un ensemble d’expériences pour un nouveau client. Les expériences demandent que la température, l’humidité et la pression du laboratoire soient très stables. Après beaucoup de recherches, un nouveau capteur d’environnement répondant aux besoins du client est trouvé. Cependant, il apparaît qu’il est soumis à une forte contrainte de temps et qu’il doit être déployé sur un des cœurs temps réel d’Azure Sphere.

Dans cette unité, vous allez découvrir comment déployer une application temps réel sur l’appareil Azure Sphere pour prendre en charge le nouveau capteur de température, d’humidité et de pression.

Architecture Azure Sphere

L’unité de microcontrôleur Azure Sphere (MCU) a trois cœurs accessibles aux développeurs : un Cortex-A7 qui exécute un noyau Linux, et deux cœurs Cortex-M4 qui peuvent exécuter directement du code ou un système d’exploitation temps réel, comme Azure RTOS ou FreeRTOS.

Les applications de haut niveau qui s’exécutent sur le noyau Linux Cortex-A7 sont utilisées pour des tâches moins sensibles au temps, comme l’établissement de connexions réseau, la négociation de la sécurité, la mise à jour de l’état de l’appareil, la communication avec les applications temps réel principales et l’envoi de messages de télémétrie aux passerelles cloud, comme IoT Hub.

Azure Sphere architecture.

Qu’est-ce qu’un système d’exploitation temps réel (RTOS, Real-Time Operating System) ?

Un système est considéré comme étant « temps réel » si l’exactitude complète d’une opération dépend non seulement de son exactitude logique, mais aussi du délai dans lequel elle est effectuée Lien vers l’article de Wikipédia.

Un système d’exploitation temps réel est un logiciel système qui fournit des services et gère les ressources du processeur pour les applications. Ces ressources incluent les cycles du processeur, la mémoire, les périphériques et les interruptions. L’objectif principal d’un système d’exploitation temps réel est d’allouer du temps de traitement entre les différentes tâches que le logiciel incorporé doit effectuer.

Ceci implique généralement une division du logiciel en éléments, communément appelés « tâches » ou « threads », et la création d’un environnement d’exécution qui fournit à chaque thread son propre microprocesseur virtuel (« multithreading »). Un microprocesseur virtuel consiste en un ensemble virtuel de ressources du microprocesseur, par exemple un ensemble de registres, un compteur de programme, une zone de mémoire de pile et un pointeur de pile. Ce n’est que quand il s’exécute qu’un thread utilise les ressources du microprocesseur physique, mais chaque thread conserve sa propre copie du contenu de ces ressources comme s’il s’agissait de ses propres ressources privées (le « contexte » du thread).

Présentation d’Azure RTOS

Azure RTOS est un système d’exploitation temps réel disponible auprès de Microsoft. Azure RTOS est une suite de développement incorporée comprenant un système d’exploitation petit mais puissant appelé ThreadX, qui offre des performances fiables et ultra-rapides pour les appareils à ressources restreintes. La suite Azure RTOS comprend d’autres composants, comme des bibliothèques et des outils de conception d’interface graphique. Dans cette unité, nous allons utiliser Azure RTOS ThreadX.

Azure RTOS ThreadX est un système d’exploitation temps réel avancé, conçu spécifiquement pour les applications fortement incorporées. Parmi les nombreux avantages qu’il offre, citons le multithreading temps réel, la communication et la synchronisation entre threads, et la gestion de la mémoire. Azure RTOS ThreadX offre de nombreuses fonctionnalités avancées, notamment l’architecture picokernel, le seuil de préemption, le chaînage d’événements et un ensemble complet de services système.

Pourquoi créer et déployer des applications temps réel ?

Les raisons d’exécuter du code sur les cœurs temps réel Cortex M4 sont les suivantes :

  1. Vous migrez du code Cortex M4 existant vers un appareil Azure Sphere.
  2. Votre application nécessite un minutage précis ou déterministe qui ne peut pas être garanti sur le cœur Cortex-A7 avec noyau Linux où elle devrait s’exécuter avec d’autres services.
  3. Votre application peut bénéficier d’une exécution sur plusieurs cœurs pour tirer parti de la totalité de la mémoire et des ressources de traitement sur l’appareil Azure Sphere.

Pour plus d’informations, consultez le guide Real-Time Operating System - What it is and why you might want to use one.

Communications inter-cœurs

Pour des raisons de sécurité, les applications qui s’exécutent sur les cœurs temps réel ne peuvent accéder à aucune des ressources réseau. Les applications peuvent cependant communiquer avec les applications qui s’exécutent sur d’autres cœurs via un mécanisme de boîte aux lettres sécurisé. Une entente partagée ou un contrat doit également décrire la forme des données passées entre les cœurs. Là où c’est possible, décrivez la forme des messages de données en utilisant des types de base C, comme les entiers, les flottants, les énumérations et les caractères. Pour des besoins plus complexes, comme passer un tableau d’objets, vous devez implémenter un schéma de sérialisation.

La structure suivante déclare le contrat inter-cœurs utilisé dans cette unité. Vous pouvez trouver ce contrat dans le répertoire 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;

Architecture de solution

Inter-core communications architecture.

L’architecture de la solution est la suivante :

  1. Le thread du capteur d’environnement temps réel Azure RTOS s’exécute toutes les 2 secondes. Le thread stocke en mémoire les dernières données de température, d’humidité et de pression de l’environnement.
  2. L’application de streaming de télémétrie de haut niveau demande au cœur temps réel les dernières données de l’environnement.
  3. Le thread du service de l’environnement temps réel Azure RTOS répond avec les données les plus récentes de l’environnement.
  4. L’application de haut niveau sérialise les données de l’environnement au format JSON et envoie le message de télémétrie à IoT Hub.
  5. Azure IoT Explorer s’abonne aux messages de télémétrie envoyés à IoT Hub par l’appareil et présente les données de télémétrie à l’utilisateur.
  6. Vous pouvez également régler la température souhaitée pour la pièce en définissant une propriété. La propriété est définie sur l’appareil via un message de jumeau d’appareil IoT Hub.
  7. L’appareil Azure Sphere définit ensuite le mode de fonctionnement de l’unité HVAC pour atteindre la température souhaitée.

Sécurité et communications principales du cœur temps réel

À l’instar des applications de haut niveau, les applications temps réel sont sécurisées par défaut et vous devez déclarer toutes les ressources nécessaires à l’application. Ceci comprend l’accès aux périphériques et les applications avec lesquelles le cœur temps réel peut communiquer. Pour communiquer, les applications qui s’exécutent sur plusieurs cœurs doivent être configurées avec des ID de composant correspondants.

Fonctionnalités inter-cœurs temps réel

Pour communiquer, les applications qui s’exécutent sur plusieurs cœurs doivent être configurées avec des ID de composant correspondants.

L’ID de composant pour l’application de haut niveau se trouve dans son fichier app_manifest.json.

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

La propriété AllowedApplicationConnections dans le fichier app_manifest.json de l’application temps réel est définie sur l’ID du composant de l’application de haut niveau Azure Sphere.

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