Lernprogramm: Erstellen einer Echtzeit-fähigen Anwendung
Wichtig
Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.
In diesem Lernprogramm wird gezeigt, wie Sie eine Beispielanwendung für die Echtzeitkerne auf einem Azure Sphere-Gerät erstellen. Siehe Übersicht über Azure Sphere-Anwendungen für grundlegende Informationen zu Echtzeitfähigen Anwendungen.
In diesem Tutorial lernen 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 echtzeitfähigen Anwendung
Wichtig
Diese Anweisungen setzen voraus, dass Sie dem MT3620-Referenzboard-Design (RDB) entsprechende Hardware verwenden, z.B. das MT3620 Development Kit von Seeed Studios. Lesen Sie bei Verwendung einer anderen Azure Sphere-Hardware in der Dokumentation des Herstellers nach, ob diese den UART verfügbar macht und wie Sie darauf zugreifen können. Unter Umständen müssen Sie beim Einrichten der Hardware zum Anzeigen der Ausgabe anders vorgehen und den Beispielcode sowie das Feld „Uarts“ in der Datei „app_manifest.json“ aktualisieren, um einen anderen UART zu verwenden.
Voraussetzungen
- Installieren Sie CMake und Ninja für Windows oder für Linux.
- Installieren Sie Visual Studio Code für Windows oder für Linux.
- Installieren Sie CMake und Ninja für Windows oder für Linux.
- Installieren des Azure Sphere SDK für Windows oder für Linux
- Wählen Sie einen Mandanten aus, und fordern Sie Ihr Gerät an
- Konfigurieren des Netzwerks und Aktualisieren des Gerätebetriebssystems
Herunterladen der Beispielanwendung
Sie können die HelloWorld-Anwendung wie folgt herunterladen:
- Verweisen Sie Ihren Browser auf den Microsoft Samples-Browser.
- Geben Sie "Azure Sphere" in das Suchfeld ein.
- Wählen Sie Azure Sphere – Hallo Welt aus den Suchergebnissen aus.
- Wählen Sie "ZIP herunterladen" aus.
- Öffnen Sie die heruntergeladene Datei, und extrahieren Sie sie in ein lokales Verzeichnis.
Installieren Sie die in ARM eingebettete GNU-Toolkette.
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 der Einrichtung der Hardware fort, um die Ausgabe anzuzeigen. Wenn Sie jedoch die GNU Arm Embedded Toolchain manuell installiert haben, verwendet Visual Studio die version, die Sie installiert haben.
Um die Toolkette zu installieren, finden 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 dort die Anweisungen, 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:
- Wählen Sie "Einstellungen für Dateieinstellungen>>">-Erweiterungen>in Azure Sphere aus.
- Geben Sie den Installationspfad der GNU Arm Embedded Toolchain in die Azure Sphere: Arm Gnu Path-Einstellung ein.
Um die Toolkette zu installieren, finden 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 dort die Anweisungen, um den Compiler für Ihre Betriebssystemplattform herunterzuladen und zu installieren.
Einrichten der Hardware zum Anzeigen der Ausgabe
Aktuell unterstützt jeder Echtzeitkern einen reinen TX-UART. RTApps können über diesen UART die Protokollausgabe vom Gerät senden. Während der Anwendungsentwicklung und des Debuggens benötigen Sie normalerweise eine Möglichkeit zum Lesen und Anzeigen der Ausgabe. Das Beispiel „HelloWorld_RTApp_MT3620_BareMetal“ zeigt, wie eine Anwendung in den UART schreiben kann.
Verwenden Sie einen USB/Seriell-Adapter (z.B. FTDI Friend), um den UART des Echtzeitkerns mit einem USB-Anschluss Ihres Computers zu verbinden. Außerdem benötigen Sie 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 diese Schritte aus, um die Hardware zum Anzeigen der Ausgabe einer Echtzeitanwendung einzurichten. Informationen dazu, wo sich die Pins befinden, finden Sie in der Dokumentation des Herstellers Ihrer Hardware. Wenn Sie Hardware verwenden, die sich an dem MT3620-Referenzentwicklungsboard (RDB, Reference Development Board) orientiert (z. B. das MT3620-DevKit von Seeed Studio), finden Sie die Pins möglicherweise mithilfe der RDB-Schnittstellensockel.
- Verbinden Sie die GND-Schnittstelle des USB-Seriell-Adapters mit der GND-Schnittstelle Ihres DevKits. Bei MT3620-RDB-Hardware befindet sich die GND-Schnittstelle bei Pin 2 von Sockel 3.
- Verbinden Sie die RX-Schnittstelle des USB-Seriell-Adapters mit der IOM4-0 TX-Schnittstelle Ihres DevKits. Bei MT3620-RDB-Hardware befindet sich die IOM4-0 TX-Schnittstelle bei Pin 6 von Sockel 3.
- Schließen Sie den USB-zu-seriellen Adapter an einen kostenlosen USB-Anschluss auf Ihrem Entwicklungscomputer an, und bestimmen Sie, mit welchem Anschluss das serielle Gerät verbunden ist. Starten Sie unter Windows Geräte-Manager, wählen Sie "Geräte nach Container anzeigen>" aus, und suchen Sie nach "USB UART". Beispielsweise gibt FT232R USB UART den FTDI Friend-Adapter an.
- Starten Sie ein Terminalemulatorprogramm, und öffnen Sie ein Terminal 115200-8-N-1 an den COM-Port, der vom Adapter verwendet wird. In der Dokumentation für den Terminal-Emulator erfahren Sie, wie Sie den Port und die Geschwindigkeit angeben.
Einrichten der Hardware zum Anzeigen der Ausgabe
Aktuell unterstützt jeder Echtzeitkern einen reinen TX-UART. RTApps können über diesen UART die Protokollausgabe vom Gerät senden. Während der Anwendungsentwicklung und des Debuggens benötigen Sie normalerweise eine Möglichkeit zum Lesen und Anzeigen der Ausgabe. Das Beispiel „HelloWorld_RTApp_MT3620_BareMetal“ zeigt, wie eine Anwendung in den UART schreiben kann.
Verwenden Sie einen USB/Seriell-Adapter (z.B. FTDI Friend), um den UART des Echtzeitkerns mit einem USB-Anschluss Ihres Computers zu verbinden. Außerdem benötigen Sie 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 diese Schritte aus, um die Hardware zum Anzeigen der Ausgabe einer Echtzeitanwendung einzurichten. Informationen dazu, wo sich die Pins befinden, finden Sie in der Dokumentation des Herstellers Ihrer Hardware. Wenn Sie Hardware verwenden, die sich an dem MT3620-Referenzentwicklungsboard (RDB, Reference Development Board) orientiert (z. B. das MT3620-DevKit von Seeed Studio), finden Sie die Pins möglicherweise mithilfe der RDB-Schnittstellensockel.
Verbinden Sie die GND-Schnittstelle des USB-Seriell-Adapters mit der GND-Schnittstelle Ihres DevKits. Bei MT3620-RDB-Hardware befindet sich die GND-Schnittstelle bei Pin 2 von Sockel 3.
Verbinden Sie die RX-Schnittstelle des USB-Seriell-Adapters mit der IOM4-0 TX-Schnittstelle Ihres DevKits. Bei MT3620-RDB-Hardware befindet sich die IOM4-0 TX-Schnittstelle bei Pin 6 von Sockel 3.
Schließen Sie den USB-zu-seriellen Adapter an einen kostenlosen USB-Anschluss auf Ihrem Entwicklungscomputer an, und bestimmen Sie, mit welchem Anschluss das serielle Gerät verbunden ist.
Starten Sie unter Windows Geräte-Manager, wählen Sie "Geräte nach Container anzeigen>" 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. n steht dabei für die Portnummer. Wenn der
dmesg
Befehl mehrere USB-Anschlüsse auflistet, ist der mit dem in der Regel letzten angeschlossenen Anschluss verbunden. In den folgenden Beispielen 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
Starten Sie ein Terminalemulatorprogramm, und öffnen Sie ein Terminal 115200-8-N-1 an den COM-Port, der vom Adapter verwendet wird. In der Dokumentation für den Terminal-Emulator erfahren Sie, wie Sie den Port und die Geschwindigkeit angeben.
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“, d. h. sie erlauben nicht, dass Anwendungen, die sich in der Entwicklung befinden, von einem PC geladen werden, und sie erlauben kein Debuggen von Anwendungen. Durch die Vorbereitung des Geräts für das Debuggen wird diese Einschränkung aufgehoben und für das Debuggen erforderliche Software geladen, und die Gerätefunktionen werden wie unter Gerätefunktionen und Kommunikation beschrieben entsperrt.
Verwenden Sie zum Debuggen auf den Echtzeitkernen den Befehl "azsphere device enable-development ". Mit diesem Befehl wird das Gerät so konfiguriert, dass Anwendungen von einem PC zum Debuggen akzeptiert werden, und das Gerät der Gerätegruppe "Entwicklung" zugewiesen wird, die keine Cloudanwendungsupdates zulässt. Während der Anwendungsentwicklung und des Debuggens sollten Sie das Gerät in dieser Gruppe belassen, damit Cloudanwendungsupdates die Anwendung in der Entwicklungsphase nicht überschreiben.
Unter Windows müssen Sie den --enable-rt-core-debugging
Parameter hinzufügen, der die Debugserver lädt und erforderliche Treiber für jeden Kerntyp auf dem Gerät benötigt.
Melden Sie sich bei Azure Sphere an, wenn Sie dies noch nicht getan haben:
azsphere login
Öffnen Sie eine Befehlszeilenschnittstelle mit PowerShell oder Windows-Eingabeaufforderung mit Administratorrechten. Der
--enable-rt-core-debugging
Parameter erfordert Administratorrechte, da er USB-Treiber für den Debugger installiert.Geben Sie den folgenden Befehl ein:
azsphere device enable-development --enable-rt-core-debugging
Warten Sie, bis der Befehl ausgeführt wurde, und schließen Sie dann das Fenster, da die Administratorrechte nicht mehr benötigt werden. Es empfiehlt sich grundsätzlich, immer nur die niedrigsten Rechte zu verwenden, die zum Ausführen einer Aufgabe erforderlich sind.
Wenn der Azsphere-Gerätebefehl zur Aktivierung der Entwicklung fehlschlägt, lesen Sie die Problembehandlung von Azure Sphere-Problemen, um Hilfe zu erhalten.
Erstellen und Ausführen der HelloWorld RTApp-Anwendung mit Visual Studio
Starten Sie Visual Studio. Wählen Sie "Lokalen Ordner öffnen" aus, navigieren Sie zu dem Ordner, in dem Sie die heruntergeladene Azure_Sphere___Hello_World.zip Datei extrahiert haben, und wählen Sie dann den ordner HelloWorld_RTApp_MT3620_Baremetal aus.
Wenn Sie kein MT3620 RDB verwenden, aktualisieren Sie die app_manifest.json Datei und den Beispielcode, um die richtige UART anzugeben, z. B. ISU1.
Sollte die CMake-Generierung nicht automatisch gestartet werden, wählen Sie die Datei „CMakeLists.txt“ aus.
Im Visual Studio-Ausgabefenster sollte die CMake-Ausgabe die Meldungen
CMake generation started.
undCMake generation finished.
Wählen Sie "Build alle erstellen>" 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. Die Ausgabeposition der HelloWorld_RTApp_MT3620_Baremetal Anwendung wird im Ausgabefenster angezeigt.
Wählen Sie im Menü "Startelement auswählen " HelloWorld_RTApp_MT3620_Baremetal (RTCore) aus.
Drücken Sie F5, um die Anwendung bereitzustellen.
Im verbundenen Terminalemulator sollte die Ausgabe des Programms „HelloWorld_RTApp_MT3620_Baremetal“ angezeigt werden. Das Programm sendet im Sekundentakt folgende Wörter:
Tick
Tock
Verwenden Sie den Debugger zum Festlegen von Breakpoints, Überprüfen von Variablen und Ausführen anderer Debugaufgaben.
Erstellen und Ausführen der HelloWorld RTApp-Anwendung mit Visual Studio Code
Öffnen Sie in Visual Studio Code den ordner HelloWorld_RTApp_MT3620_BareMetal in dem Ordner, in dem Sie die heruntergeladene Azure_Sphere___Hello_World.zip Datei extrahiert haben. Wählen Sie die Option „Kein Kit verwenden“ aus, wenn Sie zum Auswählen eines Kits aufgefordert werden.
Wenn Sie keine MT3620-RDB-Hardware verwenden, aktualisieren Sie die Datei app_manifest.json und den Beispielcode, um den richtigen UART festzulegen (z. B. ISU1).
Drücken Sie F5, um den Debugger zu starten. Wenn das Projekt vorher noch nicht erstellt wurde oder sich Dateien geändert haben und eine erneute Erstellung erforderlich ist, wird das Projekt von Visual Studio Code vor Beginn des Debugvorgangs erstellt.
Im Fenster für die Azure Sphere-Ausgabe sollte „Deploying image...“ (Bild wird bereitgestellt...) gefolgt von den Pfaden zum SDK und Compiler angezeigt werden.
Im verbundenen Terminalemulator sollte die Ausgabe des Programms „HelloWorld_RTApp_MT3620_Baremetal“ angezeigt werden. Das Programm sendet im Sekundentakt folgende Wörter:
Tick
Tock
Verwenden Sie die Debugfeatures von Visual Studio Code zum Festlegen von Breakpoints, Überprüfen von Variablen und Ausführen anderer Debugaufgaben.
Problembehandlung
Die Ausführung der Anwendung beginnt möglicherweise, bevor von OpenOCD eine Verbindung hergestellt wurde. Dies kann dazu führen, dass Breakpoints am Anfang des Codes nicht beachtet werden. Dieses Problem lässt sich ganz einfach umgehen, indem der Start der App so lange verzögert wird, bis von OpenOCD eine Verbindung hergestellt wird.
Fügen Sie am Anfang des Anwendungseinstiegspunkts „RTCoreMain“ den folgenden Code ein. Dadurch wird die Anwendung in eine
while
-Schleife versetzt, bis die Variablef
den Wert true hat.volatile bool f = false; while (!f) { // empty. }
Drücken Sie F5, um die App mit Debuggen (F5) zu starten, und unterbrechen Sie dann die Ausführung.
Ändern Sie im Debugbereich "Lokal" den Wert von
f
Null in 1.Durchlaufen Sie den Code wie gewohnt.
Erstellen des Beispiels
Öffnen Sie eine Befehlszeilenschnittstelle mit PowerShell, Windows-Eingabeaufforderung oder Linux-Befehlsshell. Navigieren Sie zu Ihrem Projektbuildverzeichnis.
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 Buildkonfigurationsname gemäß der Definition in CMakePresets.json.
--build <cmake-path>
Das Binärverzeichnis, das den CMake-Cache enthält. Wenn Sie beispielsweise CMake in einem Azure Sphere-Beispiel ausführen, lautet
cmake --build out/ARM-Debug
der 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 mit Leerzeichen voneinander 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 <dort den Dateipfad> durch den Installationspfad für die GNU Arm Embedded Toolchain auf Ihrem System.
Führen Sie Ninja aus, um die Anwendung zu erstellen und die Bildpaketdatei 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 diesen Wert
<binary-dir>
auf das Binärverzeichnis fest, das den CMake-Cache enthält. Wenn Sie beispielsweise CMake in einem Azure Sphere-Beispiel ausführen, lautetcmake --build out/ARM-Debug
der Buildbefehl .
Löschen Sie bei der Problembehandlung Ihren gesamten Build, und wiederholen Sie den Vorgang – vor allem nach dem Vornehmen von Änderungen an Ihren CMake-Befehlen.
Ausführen des Beispiels
Löschen Sie alle Anwendungen, die auf dem Gerät schon bereitgestellt wurden:
azsphere device sideload delete
Laden Sie in Ihrem Projektverzeichnis an der Eingabeaufforderung das von Ninja erstellte Bildpaket:
azsphere device sideload deploy --image-package <path-to-imagepackage>
Rufen Sie die Komponenten-ID für das Image ab:
azsphere 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 Anwendungsimagetyp angezeigt. Zum Beispiel:
Image package metadata: Section: Identity Image Type: Application Component ID: <component id> Image ID: <image id>
Sie können die folgenden Befehle verwenden, um die Anwendung zu beenden bzw. zu starten und ihren Status abzurufen:
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>
Debuggen des Beispiels
Beenden Sie die Anwendung, falls sie ausgeführt wird.
azsphere device app stop --component-id <component id>
Starten Sie die Anwendung für das Debuggen erneut.
azsphere device app start --component-id <component id>
Mit diesem Befehl wird der Kern zurückgegeben, in dem die Anwendung ausgeführt wird.
<component id> App state : running Core : Real-time 0
Navigieren Sie zum Ordner „Openocd“ für den Systemstamm (sysroot), mit dem die Anwendung erstellt wurde. Die sysroot-Verzeichnisse werden im Azure Sphere SDK-Installationsordner installiert. Für Windows wird der Ordner beispielsweise standardmäßig unter
C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd
und für Linux unter/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux
installiert.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“.Navigieren Sie zu dem Ordner, der die Anwendungs-OUT-Datei enthält, und starten
arm-none-eabi-gdb
Sie sie, 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" 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
Der OpenOCD-Server stellt unter „:4444“ eine GDB-Serverschnittstelle bereit. Legen Sie das Debugziel fest.
target remote :4444
Sie können jetzt gdb-Befehle ausführen.
Der verbundene Terminalemulator sollte die Ausgabe aus der Anwendung anzeigen.
Verwenden von Partner-Apps
Wenn Sie eine Anwendung auf das Azure Sphere-Gerät laden, werden standardmäßig alle vorhandenen Anwendungen von den Azure Sphere-Bereitstellungstools gelöscht. Um dies zu verhindern, wenn Sie Anwendungen entwickeln, die miteinander kommunizieren, müssen Sie die Anwendungen als Partner kennzeichnen. Wenn Sie eine der Anwendungen bereitstellen, werden die Partner nicht gelöscht. Ausführliche Informationen finden Sie unter Kennzeichnen von Anwendungen als Partner.
Nächste Schritte
- Erfahren Sie, wie Sie Azure RTOS mit Azure Sphere ausführen
- Erkunden Sie zusätzliche Beispiele für die echtzeitfähigen Kerne:
- Weitere Informationen zu Azure Sphere-Anwendungen