Partager via


Tutoriel : Créer une application en temps réel

Important

Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).

Ce tutoriel montre comment créer un exemple d’application pour les cœurs en temps réel sur un appareil Azure Sphere. Consultez vue d’ensemble des applications Azure Sphere pour obtenir des informations de base sur les applications compatibles en temps réel.

Dans ce tutoriel, vous allez apprendre à :

  • Télécharger un exemple d’application
  • Installer la chaîne d’outils GNU Arm
  • Configurer le matériel pour afficher la sortie
  • Activer le développement et le débogage
  • Démarrer un émulateur de terminal pour afficher la sortie
  • Générer, exécuter et déboguer une application en temps réel

Important

Ces instructions partent du principe que vous utilisez du matériel conforme à la conception d’une carte de référence (RDB) MT3620, comme le kit de développement MT3620 de Seeed Studios. Si vous utilisez un autre matériel Azure Sphere, consultez la documentation du fabricant pour déterminer si l'UART est exposé et la manière d’y accéder. Vous devrez peut-être configurer le matériel pour afficher la sortie différemment et mettre à jour l’exemple de code et le champ « Uarts » du fichier app_manifest.json pour utiliser un autre UART.

Prérequis

Téléchargement de l'exemple d'application

Vous pouvez télécharger l’application HelloWorld comme suit :

  1. Pointez votre navigateur vers Microsoft Samples Browser.
  2. Tapez « Azure Sphere » dans la zone de recherche.
  3. Sélectionnez Azure Sphere - Hello World dans les résultats de la recherche.
  4. Sélectionnez Télécharger ZIP.
  5. Ouvrez le fichier téléchargé et extrayez dans un répertoire local.

Installer GNU Arm Embedded Toolchain

Vous pouvez télécharger et installer la chaîne d’outils GNU Arm Embedded à partir du site web du développeur Arm. Vous pouvez également utiliser des artefacts vcpkg pour installer et configurer automatiquement l’environnement de développement.

  • Visual Studio 2022 : Si vous utilisez Visual Studio 2022, installez la chaîne d’outils GNU Arm Embedded (arm-none-eabi) à partir du site web du développeur Arm.
  • Visual Studio 2019 : la chaîne d’outils est automatiquement installée avec l’extension Azure Sphere pour Visual Studio sur Visual Studio 2019. Si vous utilisez Visual Studio 2019, passez à la configuration du matériel pour afficher la sortie. Toutefois, si vous avez installé manuellement la chaîne d’outils GNU Arm Embedded, Visual Studio utilise la version que vous avez installée.

Pour installer la chaîne d’outils, sur le site web du développeur Arm, recherchez la chaîne d’outils GNU Arm Embedded (arm-none-eabi) qui inclut le compilateur pour le processeur ARM Cortex-M4. Suivez les instructions ci-dessous pour télécharger et installer le compilateur pour votre plateforme de système d’exploitation.

Par défaut, Visual Studio Code recherche la chaîne d’outils et doit trouver la version que vous avez installée. Si vous rencontrez des problèmes de génération liés à la chaîne d’outils, entrez le chemin d’accès comme suit :

  1. Sélectionnez Paramètres de préférences>>de fichier>Extensions>Azure Sphere.
  2. Entrez le chemin d’installation de la chaîne d’outils GNU Arm Embedded dans le paramètre Azure Sphere : Chemin d’accès Arm Gnu.

Pour installer la chaîne d’outils, sur le site web du développeur Arm, recherchez la chaîne d’outils GNU Arm Embedded (arm-none-eabi) qui inclut le compilateur pour le processeur ARM Cortex-M4. Suivez les instructions ci-dessous pour télécharger et installer le compilateur pour votre plateforme de système d’exploitation.

Configurer le matériel pour afficher la sortie

Actuellement, chaque cœur en temps réel prend en charge un UART TX uniquement. Les applications RTApp peuvent utiliser cet UART pour envoyer la sortie de journal à partir de l’appareil. Pendant le développement et le débogage des applications, vous avez généralement besoin d’un moyen de lire et d’afficher la sortie. L’exemple HelloWorld_RTApp_MT3620_BareMetal montre comment une application peut écrire dans l’UART.

Utilisez un adaptateur USB-série comme FTDI Friend pour connecter l’UART du cœur temps réel à un port USB de votre machine. Vous aurez également besoin d’un émulateur de terminal pour établir une connexion série avec les paramètres de terminal 115200-8-N-1 (115200 bps, 8 bits, pas de bits de parité, un bit d’arrêt) pour afficher la sortie.

Pour configurer le matériel afin d’afficher la sortie d’une application temps réel, suivez ces étapes. Vous devez consulter la documentation du fabricant de votre matériel pour déterminer les emplacements des broches. Si vous utilisez du matériel qui suit le matériel RDB (Reference Board Design) MT3620, comme le kit de développement MT3620 de Seeed Studios, examiner les barettes d’interface RDB peut vous aider à déterminer les emplacements des broches.

  1. Connectez GND sur l’adaptateur USB-série au GND sur votre kit de développement. Sur le matériel RDB MT3620, GND correspond à la barette 3, broche 2.
  2. Connectez RX sur l’adaptateur USB-série au IOM4-0 TX sur votre kit de développement. Sur le matériel RDB MT3620, IOM4-0 TX correspond à la barette 3, broche 6.
  3. Connectez l’adaptateur USB à série à un port USB gratuit sur votre ordinateur de développement et déterminez le port auquel l’appareil série est connecté. Sur Windows, démarrez Gestionnaire de périphériques, sélectionnez Afficher>les appareils par conteneur, puis recherchez « USB UART ». Par exemple, FT232R USB UART indique l’adaptateur FTDI Friend.
  4. Démarrez un programme d’émulateur de terminal et ouvrez un terminal 115200-8-N-1 sur le port COM utilisé par l’adaptateur. Consultez la documentation de l’émulateur de terminal pour savoir comment spécifier le port et la vitesse.

Configurer le matériel pour afficher la sortie

Actuellement, chaque cœur en temps réel prend en charge un UART TX uniquement. Les applications RTApp peuvent utiliser cet UART pour envoyer la sortie de journal à partir de l’appareil. Pendant le développement et le débogage des applications, vous avez généralement besoin d’un moyen de lire et d’afficher la sortie. L’exemple HelloWorld_RTApp_MT3620_BareMetal montre comment une application peut écrire dans l’UART.

Utilisez un adaptateur USB-série comme FTDI Friend pour connecter l’UART du cœur temps réel à un port USB de votre machine. Vous aurez également besoin d’un émulateur de terminal pour établir une connexion série avec les paramètres de terminal 115200-8-N-1 (115200 bps, 8 bits, pas de bits de parité, un bit d’arrêt) pour afficher la sortie.

Pour configurer le matériel afin d’afficher la sortie d’une application temps réel, suivez ces étapes. Vous devez consulter la documentation du fabricant de votre matériel pour déterminer les emplacements des broches. Si vous utilisez du matériel qui suit le matériel RDB (Reference Board Design) MT3620, comme le kit de développement MT3620 de Seeed Studios, examiner les barettes d’interface RDB peut vous aider à déterminer les emplacements des broches.

  1. Connectez GND sur l’adaptateur USB-série au GND sur votre kit de développement. Sur le matériel RDB MT3620, GND correspond à la barette 3, broche 2.

  2. Connectez RX sur l’adaptateur USB-série au IOM4-0 TX sur votre kit de développement. Sur le matériel RDB MT3620, IOM4-0 TX correspond à la barette 3, broche 6.

  3. Connectez l’adaptateur USB à série à un port USB gratuit sur votre ordinateur de développement et déterminez le port auquel l’appareil série est connecté.

    • Sur Windows, démarrez Gestionnaire de périphériques, sélectionnez Afficher>les appareils par conteneur, puis recherchez « USB UART ». Par exemple, FT232R USB UART indique l’adaptateur FTDI Friend.

    • Sur Linux, tapez la commande suivante :

      dmesg | grep ttyUSB
      

      Le port doit être nommé ttyUSBn, où n indique le numéro de port. Si la dmesg commande répertorie plusieurs ports USB, celui qui est connecté au dernier port signalé comme attaché. Par exemple, dans les éléments suivants, vous utiliseriez ttyUSB4 :

    ~$ dmesg | grep ttyUSB
    [  144.564350] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB0
    [  144.564768] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB1
    [  144.565118] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB2
    [  144.565593] usb 1-1.1.2: FTDI USB Serial Device converter now attached to ttyUSB3
    [  144.570429] usb 1-1.1.3: FTDI USB Serial Device converter now attached to ttyUSB4
    [  254.171871] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
    
  4. Démarrez un programme d’émulateur de terminal et ouvrez un terminal 115200-8-N-1 sur le port COM utilisé par l’adaptateur. Consultez la documentation de l’émulateur de terminal pour savoir comment spécifier le port et la vitesse.

Activer le développement et le débogage

Pour pouvoir générer un exemple d’application sur votre appareil Azure Sphere ou développer de nouvelles applications pour celui-ci, vous devez activer le développement et le débogage. Par défaut, les appareils Azure Sphere sont « verrouillés » ; autrement dit, ils ne permettent pas aux applications en cours de développement d’être chargées à partir d’un PC, et ils ne permettent pas le débogage d’applications. La préparation des appareils pour le débogage supprime cette restriction, charge les logiciels nécessaires au débogage et déverrouille les fonctionnalités des appareils, comme décrit dans Fonctionnalités et communication des appareils.

Pour déboguer sur les cœurs en temps réel, utilisez la commande azsphere device enable-development. Cette commande configure l’appareil pour qu’il accepte les applications d’un PC pour le débogage et affecte l’appareil au groupe d’appareils de développement, ce qui n’autorise pas les mises à jour des applications cloud. Pendant le développement et le débogage d’applications, vous devez laisser l’appareil dans ce groupe afin que les mises à jour d’applications cloud ne remplacent pas l’application en cours de développement.

Sur Windows, vous devez ajouter le --enable-rt-core-debugging paramètre, qui charge les serveurs de débogage et les pilotes requis pour chaque type de cœur sur l’appareil.

  1. Connectez-vous à Azure Sphere si vous ne l’avez pas déjà fait :

    azsphere login
    
  2. Ouvrez une interface de ligne de commande à l’aide de PowerShell ou d’une invite de commandes Windows avec des privilèges d’administrateur. Le --enable-rt-core-debugging paramètre nécessite des privilèges d’administrateur, car il installe des pilotes USB pour le débogueur.

  3. Entrez la commande suivante :

    azsphere device enable-development --enable-rt-core-debugging
    
  4. Le privilège d'administrateur n'étant plus nécessaire, fermez la fenêtre une fois la commande terminée. Une bonne pratique consiste à toujours utiliser le privilège le plus bas permettant d’effectuer une tâche.

Si la commande azsphere device enable-development échoue, consultez Résoudre les problèmes liés à Azure Sphere pour obtenir de l’aide.

Générer et exécuter l’application RTApp HelloWorld avec Visual Studio

  1. Démarrez Visual Studio. Sélectionnez Ouvrir un dossier local, accédez au dossier où vous avez extrait le fichier Azure_Sphere___Hello_World.zip téléchargé, puis sélectionnez le dossier HelloWorld_RTApp_MT3620_Baremetal.

  2. Si vous n’utilisez pas de base de données RDB MT3620, mettez à jour le fichier app_manifest.json et l’exemple de code pour spécifier l’UART approprié, par exemple ISU1.

  3. Si la génération CMake ne démarre pas automatiquement, sélectionnez le fichier CMakeLists.txt.

  4. Dans la fenêtre Sortie de Visual Studio, la sortie CMake doit afficher les messages CMake generation started. et CMake generation finished.

  5. Sélectionnez Générer>tout. Si le menu n’est pas présent, ouvrez Explorateur de solutions, cliquez avec le bouton droit sur le fichier CMakeLists.txt, puis sélectionnez Générer. L’emplacement de sortie de l’application HelloWorld_RTApp_MT3620_Baremetal s’affiche dans la fenêtre Sortie .

  6. Dans le menu Sélectionner un élément de démarrage, sélectionnez HelloWorld_RTApp_MT3620_Baremetal (RTCore).

  7. Appuyez sur F5 pour déployer l'application.

  8. L’émulateur de terminal connecté doit afficher la sortie du programme HelloWorld_RTApp_MT3620_Baremetal. Le programme envoie les mots suivants à des intervalles d’une seconde :

    Tick

    Tock

  9. Utilisez le débogueur pour définir des points d’arrêt, inspecter des variables et essayer d’autres tâches de débogage.

Générer et exécuter l’application RTApp HelloWorld avec Visual Studio Code

  1. Dans Visual Studio Code, ouvrez le dossier HelloWorld_RTApp_MT3620_BareMetal dans le dossier où vous avez extrait le fichier Azure_Sphere___Hello_World.zip téléchargé. Si vous êtes invité à sélectionner un kit : choisissez « Ne pas utiliser de kit ».

  2. Si vous n’utilisez pas un matériel RDB MT3620, mettez à jour le fichier app_manifest.json et l’exemple de code pour spécifier l’UART approprié, par exemple ISU1.

  3. Appuyez sur F5 pour démarrer le débogueur. Si le projet n’a pas été généré précédemment, ou si les fichiers ont été changés et qu’une regénération est nécessaire, Visual Studio Code génère le projet avant le démarrage du débogage.

  4. La fenêtre Sortie d’Azure Sphere doit afficher en principe « Déploiement de l’image... » suivi des chemins du kit SDK et du compilateur.

  5. L’émulateur de terminal connecté doit afficher la sortie du programme HelloWorld_RTApp_MT3620_Baremetal. Le programme envoie les mots suivants à des intervalles d’une seconde :

    Tick

    Tock

  6. Utilisez les fonctionnalités de débogage de Visual Studio Code pour définir des points d’arrêt, inspecter des variables et essayer d’autres tâches de débogage.

Dépannage

L’application peut commencer à s’exécuter avant qu’OpenOCD effectue une connexion. Par conséquent, les points d’arrêt définis tôt dans le code peuvent être manqués. Une solution de contournement simple pour ce problème consiste à retarder le démarrage de l’application jusqu’à ce qu’OpenOCD se connecte.

  1. Insérez le code suivant au début du point d’entrée de l’application RTCoreMain. Ceci fait que l’application entre et reste dans une boucle while jusqu’à ce que la variable f soit définie sur true.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Appuyez sur F5 pour démarrer l’application avec débogage (F5), puis lancez l’exécution.

  3. Dans le volet Debug Locals , remplacez la valeur de f zéro par une.

  4. Parcourez le code comme d’habitude.

Générer l’exemple

  1. Ouvrez une interface de ligne de commande à l’aide de PowerShell, de l’invite de commandes Windows ou de l’interpréteur de commandes Linux. Accédez au répertoire de build de votre projet.

  2. À partir du répertoire de build de votre projet, à l’invite de commandes, exécutez CMake avec les paramètres suivants :

    cmake --preset <preset-name> <source-path>
    
    • --preset <preset-name>

      Nom prédéfini de configuration de build tel que défini dans CMakePresets.json.

    • --build <cmake-path>

      Répertoire binaire qui contient le cache CMake. Par exemple, si vous exécutez CMake sur un exemple Azure Sphere, la commande de build serait cmake --build out/ARM-Debug.

    • <source-path>

      Chemin d’accès du répertoire qui contient les fichiers sources de l’exemple d’application. Dans l’exemple, le référentiel d’exemples Azure Sphere a été téléchargé dans un répertoire appelé AzSphere.

      Les paramètres CMake sont séparés par des espaces. Le caractère de continuation de ligne (^ pour la ligne de commande Windows, \ pour la ligne de commande Linux ou « pour PowerShell) peut être utilisé pour la lisibilité, mais n’est pas obligatoire.

    Les exemples suivants montrent les commandes CMake pour une application RTApp. Si indiqué, remplacez <le chemin d’accès> au fichier par le chemin d’installation de la chaîne d’outils GNU Arm Embedded sur votre système.

    Invite de commandes Windows

    cmake ^
    --preset "ARM-Debug" ^
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    

    Windows PowerShell

    cmake `
    --preset "ARM-Debug" `
    "C:\AzSphere\azure-sphere-samples\Samples\HelloWorld\HelloWorld_RTApp_MT3620_BareMetal"
    
  3. Exécutez Ninja pour générer l’application et créer le fichier de package d’images :

    ninja -C out/ARM-Debug
    

    Ninja place les fichiers .imagepackage et d’application résultants dans le répertoire spécifié.

    Vous pouvez également appeler Ninja via CMake avec la commande suivante :

    cmake --build out/<binary-dir>
    

    Définissez <binary-dir> le répertoire binaire qui contient le cache CMake. Par exemple, si vous exécutez CMake sur un exemple Azure Sphere, la commande de build serait cmake --build out/ARM-Debug.

Lors de la résolution des problèmes, en particulier après avoir apporté des modifications à vos commandes CMake, supprimez l’intégralité de la build et réessayez.

Exécution de l'exemple

  1. Supprimez toutes les applications déjà déployées sur l’appareil :

    azsphere device sideload delete
    
  2. À partir de votre répertoire de projet, à l’invite de commandes, chargez le package d’images créé par ninja :

    azsphere device sideload deploy --image-package <path-to-imagepackage>
    
  3. Obtenez l’ID de composant pour l’image :

    azsphere image-package show --image-package <path-to-imagepackage>
    

    La commande retourne toutes les métadonnées pour le package d’image. L’ID de composant pour l’application apparaît dans la section Identité du type d’image d’application. Par exemple :

    Image package metadata:
    Section: Identity
    Image Type:           Application
    Component ID:         <component id>
    Image ID:             <image id>
    

    Vous pouvez utiliser les commandes suivantes pour arrêter, démarrer et connaître l’état de l’application :

    azsphere device app stop --component-id <component id>
    
    azsphere device app start --component-id <component id>
    
    azsphere device app show-status --component-id <component id>
    

Déboguer l’exemple

  1. Arrêtez l’application si elle est en cours d’exécution.

    azsphere device app stop --component-id <component id>
    
  2. Réactivez l’application pour le débogage.

    azsphere device app start --component-id <component id>
    

    Cette commande retourne le cœur sur lequel l’application s’exécute.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Accédez au dossier Openocd pour le sysroot avec lequel l’application a été générée. Les sysroots sont installés dans le dossier d’installation du SDK Azure Sphere. Par exemple, sur Windows, le dossier est installé par défaut dans C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd et sur Linux, dans /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Exécutez openocd comme le montre l’exemple suivant. L’exemple suppose que l’application s’exécute sur le cœur 0. Si l’application s’exécute sur le cœur 1, remplacez « targets io0 » par « targets io1 ».

    openocd -f mt3620-rdb-ftdi.cfg -f mt3620-io0.cfg -c "gdb_memory_map disable" -c "gdb_breakpoint_override hard" -c init -c "targets io0" -c halt -c "targets"
    
  5. Accédez au dossier qui contient le fichier .out de l’application et démarrez arm-none-eabi-gdb, qui fait partie de la chaîne d’outils GNU Arm Embedded :

    Invite de commandes Windows

    "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" HelloWorld_RTApp_MT3620_BareMetal.out
    
  6. Le serveur OpenOCD fournit une interface de serveur GDB sur :4444. Définissez la cible pour le débogage.

    target remote :4444

  7. Vous pouvez maintenant exécuter des commandes gdb.

  8. L’émulateur de terminal connecté doit afficher la sortie de l’application.

Utiliser des applications partenaires

Quand vous chargez une application sur l’appareil Azure Sphere, les outils de déploiement Azure Sphere suppriment par défaut toutes les applications existantes. Pour éviter ce problème lorsque vous développez des applications qui communiquent entre elles, vous devez marquer les applications en tant que partenaires. Lorsque vous déployez l’une des applications, ses partenaires ne seront pas supprimés. Pour plus d’informations, consultez Marquer les applications comme partenaires.

Étapes suivantes