Tutorial: Erstellen einer Echtzeitanwendung

In diesem Tutorial erfahren Sie, wie Sie eine Beispielanwendung für die Echtzeitkerne auf einem Azure Sphere-Gerät erstellen. Grundlegende Informationen zu Echtzeitanwendungen finden Sie unter Übersicht über Azure Sphere-Anwendungen .

In diesem Tutorial erfahren Sie Folgendes:

  • Herunterladen einer Beispielanwendung
  • Installieren der GNU Arm-Toolkette
  • Einrichten der Hardware zum Anzeigen der Ausgabe
  • Aktivieren der Entwicklung und des Debuggens
  • Starten eines Terminalemulators zum Anzeigen der Ausgabe
  • Erstellen, Ausführen und Debuggen einer Echtzeitanwendung

Wichtig

In diesen Anweisungen wird davon ausgegangen, dass Sie Hardware verwenden, die der MT3620-RdB-Hardware (Reference Board Design) folgt, z. B. das MT3620 Dev Kit von Seeed Studios. Wenn Sie unterschiedliche Azure Sphere-Hardware verwenden, lesen Sie die Dokumentation des Herstellers, um herauszufinden, ob der UART verfügbar gemacht wird und wie sie darauf zugreifen können. Möglicherweise müssen Sie hardware so einrichten, dass die Ausgabe anders angezeigt wird , und den Beispielcode und das Feld Uarts der app_manifest.json-Datei aktualisieren, um einen anderen UART zu verwenden.

Voraussetzungen

Herunterladen der Beispielanwendung

Sie können die HelloWorld-Anwendung wie folgt herunterladen:

  1. Verweisen Sie in Ihrem Browser auf Microsoft Samples Browser.
  2. Geben Sie "Azure Sphere" in das Feld Search ein.
  3. Wählen Sie azure Sphere – Hallo Welt aus den Suchergebnissen aus.
  4. Wählen Sie ZIP herunterladen aus.
  5. Öffnen Sie die heruntergeladene Datei, und extrahieren Sie sie in ein lokales Verzeichnis.

Installieren der GNU Arm Embedded Toolchain

Sie können die GNU Arm Embedded Toolchain von der Arm-Entwicklerwebsite herunterladen und installieren. Sie können auch vcpkg-Artefakte verwenden, um die Entwicklungsumgebung automatisch zu installieren und zu konfigurieren.

  • Visual Studio 2022: Wenn Sie Visual Studio 2022 verwenden, installieren Sie die GNU Arm Embedded Toolchain (arm-none-eabi) von der Arm-Entwicklerwebsite.
  • Visual Studio 2019: Die Toolkette wird automatisch mit der azure-sphere-Erweiterung für Visual Studio in Visual Studio 2019 installiert. Wenn Sie Visual Studio 2019 verwenden, fahren Sie mit Einrichten von Hardware zum Anzeigen der Ausgabe fort. Wenn Sie die GNU Arm Embedded Toolchain jedoch manuell installiert haben, verwendet Visual Studio die version, die Sie installiert haben.

Um die Toolkette zu installieren, suchen Sie auf der Arm-Entwicklerwebsite die GNU Arm Embedded Toolchain (arm-none-eabi), die den Compiler für den ARM Cortex-M4-Prozessor enthält. Befolgen Sie die Anweisungen dort, um den Compiler für Ihre Betriebssystemplattform herunterzuladen und zu installieren.

Standardmäßig sucht Visual Studio Code nach der Toolkette und sollte die installierte Version finden. Wenn Buildprobleme im Zusammenhang mit der Toolkette auftreten, geben Sie den Pfad wie folgt ein:

  1. Wählen Sie Dateieinstellungen>>Einstellungen>Erweiterungen>Azure Sphere aus.
  2. Geben Sie den Installationspfad der GNU Arm Embedded Toolchain in der Einstellung Azure Sphere: Arm Gnu Path ein.

Um die Toolkette zu installieren, suchen Sie auf der Arm-Entwicklerwebsite die GNU Arm Embedded Toolchain (arm-none-eabi), die den Compiler für den ARM Cortex-M4-Prozessor enthält. Befolgen Sie die Anweisungen dort, um den Compiler für Ihre Betriebssystemplattform herunterzuladen und zu installieren.

Einrichten der Hardware zum Anzeigen der Ausgabe

Derzeit unterstützt jeder Echtzeitkern einen reinen TX-UART. RTApps kann diesen UART verwenden, um die Protokollausgabe vom Gerät zu senden. Während der Anwendungsentwicklung und beim Debuggen benötigen Sie in der Regel eine Möglichkeit, die Ausgabe zu lesen und anzuzeigen. Das HelloWorld_RTApp_MT3620_BareMetal Beispiel zeigt, wie eine Anwendung in den UART schreiben kann.

Verwenden Sie einen USB-zu-seriell-Adapter wie den FTDI Friend, um den UART am Echtzeitkern mit einem USB-Anschluss ihres Computers zu verbinden. Sie benötigen auch einen Terminalemulator , um eine serielle Verbindung mit 115200-8-N-1-Terminaleinstellungen (115200 Bps, 8 Bit, keine Paritätsbits, ein Stoppbit) herzustellen, um die Ausgabe anzuzeigen.

Führen Sie die folgenden Schritte aus, um die Hardware so einzurichten, dass die Ausgabe einer RTApp angezeigt wird. Sie müssen in der Dokumentation Ihres Hardwareherstellers nachlesen, um die Pinpositionen zu ermitteln. Wenn Sie Hardware verwenden, die der MT3620-RDB-Hardware (Reference Board Design) folgt, wie z. B. das MT3620 Dev Kit von Seeed Studios, können Sie sich die RDB-Schnittstellenheader ansehen, um die Pinpositionen zu bestimmen.

  1. Verbinden Sie GND über den USB-zu-Seriell-Adapter mit GND auf Ihrem Dev Kit. Auf MT3620 RDB-Hardware ist GND Header 3, Pin 2.
  2. Verbinden Sie RX über den USB-zu-Serial-Adapter mit IOM4-0 TX auf Ihrem Dev Kit. Auf MT3620 RDB-Hardware ist IOM4-0 TX Header 3, Pin 6.
  3. Schließen Sie den USB-zu-Seriell-Adapter an einen freien USB-Anschluss ihres Entwicklungscomputers an, und bestimmen Sie, an welchen Port das serielle Gerät angeschlossen ist. Starten Sie unter Windows Geräte-Manager, wählen SieGeräte nach Containeranzeigen> aus, und suchen Sie nach "USB UART". Beispielsweise gibt FT232R USB UART den FTDI Friend-Adapter an.
  4. Starten Sie ein Terminalemulatorprogramm, und öffnen Sie ein Terminal 115200-8-N-1 mit dem com-Port, der vom Adapter verwendet wird. Informationen zum Angeben des Ports und der Geschwindigkeit finden Sie in der Dokumentation für den Terminalemulator.

Einrichten der Hardware zum Anzeigen der Ausgabe

Derzeit unterstützt jeder Echtzeitkern einen reinen TX-UART. RTApps kann diesen UART verwenden, um die Protokollausgabe vom Gerät zu senden. Während der Anwendungsentwicklung und beim Debuggen benötigen Sie in der Regel eine Möglichkeit, die Ausgabe zu lesen und anzuzeigen. Das HelloWorld_RTApp_MT3620_BareMetal Beispiel zeigt, wie eine Anwendung in den UART schreiben kann.

Verwenden Sie einen USB-zu-seriell-Adapter wie den FTDI Friend, um den UART am Echtzeitkern mit einem USB-Anschluss ihres Computers zu verbinden. Sie benötigen auch einen Terminalemulator , um eine serielle Verbindung mit 115200-8-N-1-Terminaleinstellungen (115200 Bps, 8 Bit, keine Paritätsbits, ein Stoppbit) herzustellen, um die Ausgabe anzuzeigen.

Führen Sie die folgenden Schritte aus, um die Hardware so einzurichten, dass die Ausgabe einer RTApp angezeigt wird. Sie müssen in der Dokumentation Ihres Hardwareherstellers nachlesen, um die Pinpositionen zu ermitteln. Wenn Sie Hardware verwenden, die der MT3620-RDB-Hardware (Reference Board Design) folgt, wie z. B. das MT3620 Dev Kit von Seeed Studios, können Sie sich die RDB-Schnittstellenheader ansehen, um die Pinpositionen zu bestimmen.

  1. Verbinden Sie GND über den USB-zu-Seriell-Adapter mit GND auf Ihrem Dev Kit. Auf MT3620 RDB-Hardware ist GND Header 3, Pin 2.

  2. Verbinden Sie RX über den USB-zu-Serial-Adapter mit IOM4-0 TX auf Ihrem Dev Kit. Auf MT3620 RDB-Hardware ist IOM4-0 TX Header 3, Pin 6.

  3. Schließen Sie den USB-zu-Seriell-Adapter an einen freien USB-Anschluss ihres Entwicklungscomputers an, und bestimmen Sie, an welchen Port das serielle Gerät angeschlossen ist.

    • Starten Sie unter Windows Geräte-Manager, wählen SieGeräte nach Containeranzeigen> aus, und suchen Sie nach "USB UART". Beispielsweise gibt FT232R USB UART den FTDI Friend-Adapter an.

    • Geben Sie unter Linux den folgenden Befehl ein:

      dmesg | grep ttyUSB
      

      Der Port sollte den Namen ttyUSBn haben, wobei n die Portnummer angibt. Wenn der dmesg Befehl mehrere USB-Anschlüsse auflistet, wird der mit dem in der Regel als zuletzt als angeschlossen gemeldete usb-Anschluss verbunden. Im folgenden Beispiel würden Sie ttyUSB4 verwenden:

    ~$ 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. Starten Sie ein Terminalemulatorprogramm, und öffnen Sie ein Terminal 115200-8-N-1 mit dem com-Port, der vom Adapter verwendet wird. Informationen zum Angeben des Ports und der Geschwindigkeit finden Sie in der Dokumentation für den Terminalemulator.

Aktivieren der Entwicklung und des Debuggens

Bevor Sie eine Beispielanwendung auf Ihrem Azure Sphere-Gerät erstellen oder neue Anwendungen dafür entwickeln können, müssen Sie die Entwicklung und das Debuggen aktivieren. Standardmäßig sind Azure Sphere-Geräte "gesperrt". Das heißt, sie lassen nicht zu, dass Anwendungen, die sich in der Entwicklung befinden, von einem PC geladen werden, und sie lassen das Debuggen von Anwendungen nicht zu. Durch das Vorbereiten des Geräts für das Debuggen wird diese Einschränkung entfernt, und es wird software geladen, die für das Debuggen erforderlich ist, und die Gerätefunktionen werden entsperrt.

Verwenden Sie zum Debuggen auf den Echtzeitkernen den Befehl az sphere device enable-development . Dieser Befehl konfiguriert das Gerät so, dass es Anwendungen von einem PC zum Debuggen akzeptiert, und weist das Gerät der Gerätegruppe Entwicklung zu, die keine Cloudanwendungsupdates zulässt. Während der Anwendungsentwicklung und beim Debuggen sollten Sie das Gerät in dieser Gruppe belassen, damit Cloudanwendungsupdates die Anwendung in der Entwicklung nicht überschreiben.

Unter Windows müssen Sie den --enable-rt-core-debugging Parameter hinzufügen, der die Debugserver und die erforderlichen Treiber für jeden Kerntyp auf das Gerät lädt.

  1. Melden Sie sich bei Azure Sphere an, wenn Sie dies noch nicht getan haben:

    az login
    
  2. Öffnen Sie eine Befehlszeilenschnittstelle mithilfe von PowerShell oder der Windows-Eingabeaufforderung mit Administratorrechten. Der --enable-rt-core-debugging Parameter erfordert Administratorrechte, da er USB-Treiber für den Debugger installiert.

  3. Geben Sie den folgenden Befehl ein:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. Schließen Sie das Fenster, nachdem der Befehl abgeschlossen wurde, da keine Administratorrechte mehr erforderlich sind. Als bewährte Methode sollten Sie immer die niedrigste Berechtigung verwenden, mit der eine Aufgabe ausgeführt werden kann.

Wenn der Befehl az sphere device enable-development fehlschlägt, finden Sie weitere Informationen unter Behandeln von Azure Sphere-Problemen .

Erstellen und Ausführen der RtApp-Anwendung HelloWorld mit Visual Studio

  1. Starten Sie Visual Studio. Wählen Sie Lokalen Ordner öffnen aus, navigieren Sie zu dem Ordner, in den Sie die heruntergeladene Azure_Sphere___Hello_World.zip Datei extrahiert haben, und wählen Sie dann den Ordner HelloWorld_RTApp_MT3620_Baremetal aus.

  2. Wenn Sie kein MT3620-RDB verwenden, aktualisieren Sie die app_manifest.json-Datei und den Beispielcode, um den richtigen UART anzugeben, z. B. ISU1.

  3. Wenn die CMake-Generierung nicht automatisch gestartet wird, wählen Sie die CMakeLists.txt Datei aus.

  4. Im Visual Studio-Ausgabefenster sollten in der CMake-Ausgabe die Meldungen CMake generation started. und CMake generation finished.angezeigt werden.

  5. Wählen Sie Build>Build All aus. Wenn das Menü nicht vorhanden ist, öffnen Sie Projektmappen-Explorer, klicken Sie mit der rechten Maustaste auf die CMakeLists.txt Datei, und wählen Sie Erstellen aus. Der Ausgabespeicherort der HelloWorld_RTApp_MT3620_Baremetal Anwendung wird im Fenster Ausgabe angezeigt.

  6. Wählen Sie im Menü Startelement auswählendie Option HelloWorld_RTApp_MT3620_Baremetal (RTCore) aus.

  7. Drücken Sie F5 , um die Anwendung bereitzustellen.

  8. Der verbundene Terminalemulator sollte die Ausgabe des HelloWorld_RTApp_MT3620_Baremetal Programms anzeigen. Das Programm sendet die folgenden Wörter in Intervallen von einer Sekunde:

    Tick

    Tock

  9. Verwenden Sie den Debugger, um Haltepunkte festzulegen, Variablen zu untersuchen und andere Debugaufgaben zu testen.

Erstellen und Ausführen der RtApp-Anwendung HelloWorld mit Visual Studio Code

  1. Öffnen Sie in Visual Studio Code den Ordner HelloWorld_RTApp_MT3620_BareMetal in dem Ordner, in den Sie die heruntergeladene Azure_Sphere___Hello_World.zip Datei extrahiert haben. Wenn Sie aufgefordert werden, ein Kit auszuwählen, wählen Sie Kein Kit verwenden aus.

  2. Wenn Sie keine MT3620 RDB-Hardware verwenden, aktualisieren Sie die app_manifest.json-Datei und den Beispielcode, um den richtigen UART anzugeben, z. B. ISU1.

  3. Drücken Sie F5 , um den Debugger zu starten. Wenn das Projekt noch nicht erstellt wurde oder dateien geändert wurden und eine Neuerstellung erforderlich ist, erstellt Visual Studio Code das Projekt, bevor das Debuggen gestartet wird.

  4. Im Azure Sphere-Ausgabefenster sollte "Bereitstellungsimage..." angezeigt werden. gefolgt von den Pfaden zum SDK und Compiler.

  5. Der verbundene Terminalemulator sollte die Ausgabe des HelloWorld_RTApp_MT3620_Baremetal Programms anzeigen. Das Programm sendet die folgenden Wörter in Intervallen von einer Sekunde:

    Tick

    Tock

  6. Verwenden Sie Visual Studio Code-Debugfeatures, um Haltepunkte festzulegen, Variablen zu untersuchen und andere Debugaufgaben auszuprobieren.

Problembehandlung

Möglicherweise beginnt die Anwendung mit der Ausführung, bevor OpenOCD eine Verbindung herstellt. Daher werden breakpoints, die zu einem frühen Zeitpunkt im Code festgelegt wurden, möglicherweise übersehen. Eine einfache Problemumgehung hierfür besteht darin, den Start der App zu verzögern, bis OpenOCD eine Verbindung herstellt.

  1. Fügen Sie den folgenden Code am Anfang des Anwendungseinstiegspunkts RTCoreMain ein. Dies führt dazu, dass die Anwendung in eine Schleife eintritt und in einer while Schleife verbleibt, bis die Variable f auf true festgelegt ist.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Drücken Sie F5 , um die App mit Debuggen zu starten (F5), und unterbrechen Sie dann die Ausführung.

  3. Ändern Sie im Debugbereich Lokal den Wert von f von 0 in 1.

  4. Führen Sie den Code wie gewohnt durch.

Erstellen des Beispiels

  1. Öffnen Sie eine Befehlszeilenschnittstelle mithilfe von PowerShell, der Windows-Eingabeaufforderung oder der Linux-Befehlsshell. Navigieren Sie zu Ihrem Projektbuildverzeichnis.

  2. Führen Sie in Ihrem Projektbuildverzeichnis an der Eingabeaufforderung CMake mit den folgenden Parametern aus:

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

      Der voreingestellte Name der Buildkonfiguration, wie in CMakePresets.json definiert.

    • --build <cmake-path>

      Das Binärverzeichnis, das den CMake-Cache enthält. Wenn Sie z. B. CMake in einem Azure Sphere-Beispiel ausführen, lautet cmake --build out/ARM-Debugder Buildbefehl .

    • <source-path>

      Der Pfad des Verzeichnisses, das die Quelldateien für die Beispielanwendung enthält. Im Beispiel wurde das Azure Sphere-Beispielrepository in ein Verzeichnis namens AzSphere heruntergeladen.

      CMake-Parameter werden durch Leerzeichen getrennt. Das Zeilenfortsetzungszeichen (^ für Windows-Befehlszeile, \ für Linux-Befehlszeile oder ' für PowerShell) kann zur Lesbarkeit verwendet werden, ist jedoch nicht erforderlich.

    Die folgenden Beispiele zeigen die CMake-Befehle für eine RTApp. Ersetzen Sie <, wo angegeben, file-path> durch den Installationspfad für die GNU Arm Embedded Toolchain auf Ihrem System.

    Windows-Eingabeaufforderung

    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. Führen Sie Ninja aus, um die Anwendung zu erstellen und die Imagepaketdatei zu erstellen:

    ninja -C out/ARM-Debug
    

    Ninja platziert die resultierenden Anwendungs- und IMAGEPACKAGE-Dateien im angegebenen Verzeichnis.

    Sie können Ninja auch über CMake mit dem folgenden Befehl aufrufen:

    cmake --build out/<binary-dir>
    

    Legen Sie <binary-dir> auf das Binärverzeichnis fest, das den CMake-Cache enthält. Wenn Sie z. B. CMake in einem Azure Sphere-Beispiel ausführen, lautet cmake --build out/ARM-Debugder Buildbefehl .

Löschen Sie bei der Problembehandlung ihren gesamten Build, insbesondere nachdem Sie Änderungen an Ihren CMake-Befehlen vorgenommen haben, und versuchen Sie es erneut.

Ausführen des Beispiels

  1. Löschen Sie alle Anwendungen, die bereits auf dem Gerät bereitgestellt wurden:

    az sphere device sideload delete
    
  2. Laden Sie aus Ihrem Projektverzeichnis an der Eingabeaufforderung das von Ninja erstellte Imagepaket:

    az sphere device sideload deploy --image-package <path-to-imagepackage>
    

    Die Ausführung der Anwendung beginnt kurz nach dem Laden. Im verbundenen Terminalemulator wird Folgendes angezeigt:

    Tick
    
    Tock
    
    Tick
    .
    .
    .
    
  3. Rufen Sie die Komponenten-ID für das Image ab:

    az sphere image-package show --image-package <path-to-imagepackage>
    

    Der Befehl gibt alle Metadaten für das Imagepaket zurück. Die Komponenten-ID für die Anwendung wird im Abschnitt Identität für den Anwendungsbildtyp angezeigt. Zum Beispiel:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    

    Sie können die folgenden Befehle verwenden, um die status der Anwendung zu beenden, zu starten und abzurufen:

    az sphere device app stop --component-id <component id>
    
    az sphere device app start --component-id <component id>
    
    az sphere device app show-status --component-id <component id>
    

Debuggen des Beispiels

  1. Beenden Sie die Anwendung, wenn sie ausgeführt wird.

    az sphere device app stop --component-id <component id>
    
  2. Starten Sie die Anwendung zum Debuggen neu.

    az sphere device app start --debug-mode true  --component-id <component id>
    

    Dieser Befehl gibt den Kern zurück, auf dem die Anwendung ausgeführt wird.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Navigieren Sie zum Ordner Openocd für die sysroot-Datei, mit der die Anwendung erstellt wurde. Die sysroots werden im Installationsordner des Azure Sphere SDK installiert. Unter Windows wird der Ordner beispielsweise standardmäßig unter C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd und unter Linux unter /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linuxinstalliert.

  4. Führen Sie openocd wie im folgenden Beispiel gezeigt aus. Im Beispiel wird davon ausgegangen, dass die App auf Kern 0 ausgeführt wird. Wenn die App auf Kern 1 ausgeführt wird, ersetzen Sie "targets io0" durch "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. Navigieren Sie zu dem Ordner, der die .out-Datei der Anwendung enthält, und starten Sie arm-none-eabi-gdb, der Teil der GNU Arm Embedded Toolchain ist:

    Windows-Eingabeaufforderung

    "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. Der OpenOCD-Server stellt eine GDB-Serverschnittstelle unter :4444 bereit. Legen Sie das Ziel für das Debuggen fest.

    target remote :4444

  7. Sie können jetzt gdb-Befehle ausführen.

  8. Der verbundene Terminalemulator sollte die Ausgabe der Anwendung anzeigen.

Verwenden von Partner-Apps

Wenn Sie eine Anwendung auf das Azure Sphere-Gerät laden, löschen die Azure Sphere-Bereitstellungstools standardmäßig alle vorhandenen Anwendungen. Um dies zu verhindern, wenn Sie Anwendungen entwickeln, die miteinander kommunizieren, müssen Sie die Anwendungen als Partner markieren. Wenn Sie eine der Anwendungen bereitstellen, werden die zugehörigen Partner nicht gelöscht. Weitere Informationen finden Sie unter Markieren von Anwendungen als Partner .

Nächste Schritte