Tutorial: Erstellen und Debuggen von Partneranwendungen

In diesem Tutorial wird gezeigt, wie Sie ein Beispielprojekt erstellen und debuggen, das sowohl eine allgemeine Anwendung als auch eine Echtzeitanwendung enthält, bei der die beiden Apps zwischen dem allgemeinen A7-Kern und dem M4-Echtzeitkern kommunizieren. Grundlegende Informationen zu allgemeinen Anwendungen und Echtzeitanwendungen finden Sie unter Übersicht über Azure Sphere-Anwendungen .

In diesem Tutorial erfahren Sie Folgendes:

  • Installieren der GNU Arm-Toolkette
  • Einrichten der Hardware zum Anzeigen der Ausgabe
  • Aktivieren der Entwicklung und des Debuggens
  • Klonen des Azure Sphere-Beispielrepositorys
  • Starten eines Terminalemulators zum Anzeigen der Ausgabe
  • Erstellen, Ausführen und Debuggen eines Paars von Partneranwendungen

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

Installieren der GNU Arm Embedded Toolchain

  • 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 auf der Arm-Entwicklerwebsite zu installieren, suchen Sie 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, aktivieren Sie Einstellungen>Einstellungen>Erweiterungen>AzureSphere , um sicherzustellen, dass "Azure Sphere: Arm Gnu Path" das Installationsverzeichnis der GNU Arm Embedded Toolchain identifiziert.

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 .

Herunterladen der Beispielanwendung

Sie können die InterCore Communications-Anwendungen 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 in den Suchergebnissen Azure Sphere – Kernübergreifende Kommunikation aus.
  4. Wählen Sie ZIP herunterladen aus.
  5. Öffnen Sie die heruntergeladene Datei, und extrahieren Sie sie in ein lokales Verzeichnis.

Erstellen und Ausführen der Partneranwendungen

  1. Starten Sie Visual Studio. Wählen Sie Lokalen Ordner öffnen aus, und navigieren Sie zu dem Ordner, in den Sie die IntercoreComms-Anwendungen extrahiert haben.

    Wichtig

    Wenn Sie Visual Studio 2022 Version 17.1 oder höher verwenden und das IntercoreComms-Beispiel vor der Azure Sphere-Version 22.02 extrahiert haben, müssen Sie dem Projektordner der obersten Ebene eine CMakeWorkspaceSettings.json-Datei hinzufügen.

  2. Wenn Sie kein MT3620-RDB verwenden, aktualisieren Sie die app_manifest.json Dateien sowohl für Anwendungen als auch für die Hardwaredefinitionsdatei und CMakeLists.txt Datei für die allgemeine Anwendung entsprechend Ihrer Hardware.

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

  4. In Visual Studio sollten unter Ausgabe anzeigen>>Ausgabe anzeigen von: CMake-Ausgabe die Meldungen CMake generation started und CMake generation finishedanzeigen.

  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 datei CMakeLists.txt, und wählen Sie Erstellen aus. Der Ausgabespeicherort der IntercoreComms_HL & IntercoreComms RT-Anwendungen wird im Ausgabefenster angezeigt.

  6. Wählen Sie Startelement>intercoreComms (Alle Kerne) auswählen aus.

  7. Wählen Sie Debuggen>Debuggen aus, oder drücken Sie F5, um die Anwendungen bereitzustellen und zu debuggen.

  8. Wählen Sie im Fenster Ausgabe im Menü Ausgabe auswählen die Option Geräteausgabe aus. Im Ausgabefenster sollte die allgemeine Anwendungsausgabe angezeigt werden:

    Remote debugging from host 192.168.35.1, port 58817
    High-level intercore comms application
    Sends data to, and receives data from a real-time capable application.
    Received 19 bytes: rt-app-to-hl-app-07
    Sending: hl-app-to-rt-app-00
    Sending: hl-app-to-rt-app-01
    
  9. Der verbundene Terminalemulator sollte die Ausgabe des Echtzeitprogramms anzeigen:

    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
    Text: hl-app-to-rt-app-00
    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:31
    Text: hl-app-to-rt-app-01
    
  10. Verwenden Sie den Debugger, um Haltepunkte festzulegen, Variablen zu untersuchen und andere Debugaufgaben zu testen.

  1. Öffnen Sie in Visual Studio Code den Ordner, in den Sie die IntercoreComms-Anwendungen extrahiert haben. Visual Studio Code erkennt die Datei intercore.code-workspace und fragt Sie, ob Sie den Arbeitsbereich öffnen möchten. Wählen Sie Arbeitsbereich öffnen aus, um die Echtzeitanwendung und die allgemeine Anwendung gleichzeitig zu öffnen.

  2. Wenn Sie kein MT3620-RDB verwenden, aktualisieren Sie die app_manifest.json Dateien sowohl für Anwendungen als auch für die Hardwaredefinitionsdatei und CMakeLists.txt Datei für die allgemeine Anwendung entsprechend Ihrer Hardware.

  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. Im Ausgabefenster sollte die allgemeine Anwendungsausgabe angezeigt werden:

    Remote debugging from host 192.168.35.1, port 58817
    High-level intercore comms application
    Sends data to, and receives data from a real-time capable application.
    Received 19 bytes: rt-app-to-hl-app-07
    Sending: hl-app-to-rt-app-00
    Sending: hl-app-to-rt-app-01
    
  6. Der verbundene Terminalemulator sollte die Ausgabe des Echtzeitprogramms anzeigen:

    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
    Text: hl-app-to-rt-app-00
    Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
    Message size: 19 bytes:
    Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:31
    Text: hl-app-to-rt-app-01
    
  7. 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.

    static _Noreturn void RTCoreMain(void)
    {
      .
      .
      .
     volatile bool f = false;
     while (!f) {
        // empty.
     }
      .
      .
      .
    }
    
  2. Drücken Sie F5 , um die App mit dem Debuggen zu starten, 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.

Beim Erstellen mit der CLI erstellen Sie zuerst die Echtzeitanwendung und stellen sie bereit. Anschließend erstellen Sie die allgemeine Anwendung und stellen sie bereit.

Erstellen und Bereitstellen der Echtzeitanwendung

  1. Navigieren Sie zu dem Ordner, in den Sie die IntercoreComms-Anwendungen extrahiert haben, und wählen Sie dann den Ordner IntercoreComms/IntercoreComms_RTApp_MT3620_BareMetal aus.

  2. Öffnen Sie die app_manifest.json-Datei, und überprüfen Sie, ob die Komponenten-ID der allgemeinen App in der AllowedApplicationConnections-Funktion angezeigt wird.

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

  4. 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 die IntercoreComms RTApp:

    Windows-Eingabeaufforderung

     cmake ^
    --preset "ARM-Debug" ^
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_RTApp_MT3620_BareMetal"
    

    Windows PowerShell

     cmake `
    --preset "ARM-Debug" `
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_RTApp_MT3620_BareMetal"
    
  5. Führen Sie in Ihrem Projektbuildverzeichnis an der Eingabeaufforderung 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.

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

    az sphere device sideload delete
    
  7. Laden Sie aus Ihrem Projektbuildverzeichnis 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.

  8. 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"
      },
    ...
    

Erstellen und Bereitstellen der allgemeinen Anwendung

  1. Navigieren Sie zu dem Ordner, in den Sie die IntercoreComms-Anwendungen extrahiert haben, und wählen Sie dann den Ordner IntercoreComms/IntercoreComms_HighLevelApp aus.

  2. Öffnen Sie die app_manifest.json-Datei, und überprüfen Sie, ob die Komponenten-ID der RTApp in der AllowedApplicationConnections-Funktion angezeigt wird.

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

  4. 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 die allgemeine IntercoreComms-Anwendung.

    Windows-Eingabeaufforderung

     cmake ^
     --preset "ARM-Debug" ^
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_HighLevelApp"
    

    Windows PowerShell

     cmake `
     --preset "ARM-Debug" `
     "C:\AzSphere\azure-sphere-samples\Samples\IntercoreComms\IntercoreComms_HighLevelApp"
    
  5. Führen Sie in Ihrem Projektbuildverzeichnis an der Eingabeaufforderung 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.

  6. Laden Sie aus Ihrem Projektbuildverzeichnis an der Eingabeaufforderung das von Ninja erstellte Imagepaket:

    az sphere device sideload deploy --image-package <package-name>
    

    Die Ausführung der Anwendung beginnt kurz nach dem Laden.

  7. 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"
      },
    ...
    

Ausführen der Partneranwendungen mit aktiviertem Debuggen

  1. Beenden Sie die Echtzeitanwendung, 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. Öffnen Sie eine neue Azure Sphere-Eingabeaufforderung (klassische Windows Azure Sphere-CLI), eine Standardeingabeaufforderung oder PowerShell (Windows Azure CLI) oder ein Terminalfenster (Linux).

  6. Navigieren Sie zu dem Ordner, der die .out-Datei der Echtzeitanwendung enthält, und starten Sie arm-none-eabi-gdb, die 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" IntercoreComms_RTApp_MT3620_BareMetal.out
    

    Windows PowerShell

     & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
    
  7. Der OpenOCD-Server stellt eine GDB-Serverschnittstelle unter :4444 bereit. Legen Sie das Ziel für das Debuggen fest.

    target remote :4444

  8. Sie können jetzt gdb-Befehle für die Echtzeitanwendung ausführen. Fügen Sie einen Haltepunkt an der Funktion HandleSendTimerDeferred hinzu:

    break HandleSendTimerDeferred
    
  9. Der verbundene Terminalemulator sollte die Ausgabe der Echtzeitanwendung anzeigen.

  10. Öffnen Sie eine neue Azure Sphere-Eingabeaufforderung (klassische Windows Azure Sphere-CLI), eine Standardeingabeaufforderung oder PowerShell (Windows Azure CLI) oder ein Terminalfenster (Linux).

  11. Navigieren Sie zu dem Ordner, der die imagepackage-Datei der allgemeinen Anwendung enthält.

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

    az sphere device app stop --component-id <component id>
    
  13. Starten Sie die allgemeine Anwendung mit Debuggen neu.

    az sphere device app start --debug-mode true --component-id <component id> --debug-mode
    
  14. Öffnen Sie einen Terminalemulator , und stellen Sie eine Telnet- oder TCP-Verbindung mit 192.168.35.2 an Port 2342 her, um die Ausgabe der allgemeinen App anzuzeigen.

  15. Starten Sie gdb mit dem folgenden Befehl:

    Windows-Eingabeaufforderung

    "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
    

    Hinweis

    Das Azure Sphere SDK wird mit mehreren Sysroots ausgeliefert, sodass Anwendungen verschiedene API-Sätze als Ziel verwenden können, wie unter Anwendungslaufzeitversion, Sysroots und Beta-APIs beschrieben. Die Sysroots werden im Installationsordner des Azure Sphere SDK unter Sysroots installiert.

  16. Legen Sie das Remotedebuggingziel auf Port 2345 auf die IP-Adresse 192.168.35.2 fest:

    target remote 192.168.35.2:2345

  17. Fügen Sie einen Haltepunkt an der Funktion SendMessageToRTApp hinzu:

    break SendMessageToRTApp

  18. Geben Sie c ein, um fortzufahren, beobachten Sie die Ausgabe in Ihrem Telnet/TCP-Terminal, und wechseln Sie dann zur Eingabeaufforderung oder zum Terminalfenster, das Ihre Echtzeit-Anwendungsdebugsitzung enthält.

  19. Geben Sie ein c , um fortzufahren und die Ausgabe in Der verbundenen seriellen Sitzung zu beobachten.

Sie können zwischen Debugsitzungen hin- und herarbeiten und zwischen der echtzeitfähigen Anwendung und der allgemeinen Anwendung wechseln. In den beiden Ausgabefenstern sollte eine Ausgabe ähnlich der folgenden angezeigt werden:

Starting debugger....
                     Process /mnt/apps/25025d2c-66da-4448-bae1-ac26fcdd3627/bin/app created; pid = 40
                     Listening on port 2345
                                           Remote debugging from host 192.168.35.1, port 56522
              High-level intercore comms application
                                                    Sends data to, and receives data from a real-time capable application.
                                          Sending: hl-app-to-rt-app-00
                                                                      Sending: hl-app-to-rt-app-01
IntercoreComms_RTApp_MT3620_BareMetal
App built on: Nov 17 2020, 09:25:19
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
Message size: 19 bytes:
Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
Text: hl-app-to-rt-app-00

Um jede Debugsitzung zu beenden, geben Sie q an der gdb-Eingabeaufforderung ein.

Nächste Schritte