Självstudiekurs: Skapa och felsöka partnerprogram
Den här självstudiekursen visar hur du skapar och felsöker ett exempelprojekt som innehåller både ett program på hög nivå och ett kompatibelt program i realtid, där de två apparna kommunicerar mellan A7-kärnan på hög nivå och M4-kärnan i realtid. Se Översikt över Azure Sphere-program för grundläggande information om program på hög nivå och kompatibla program i realtid.
I den här självstudiekursen får du lära dig hur du:
- Installera GNU Arm toolchain
- Konfigurera maskinvara för visning av utdata
- Aktivera utveckling och felsökning
- Klona Azure Sphere-exempelrepo
- Starta en terminalemulator för att visa utdata
- Skapa, köra och felsöka ett par partnerprogram
Viktigt
De här anvisningarna förutsätter att du använder maskinvara som följer MT3620-maskinvaran för referenskortsdesign (RDB), till exempel MT3620 Dev Kit från Seeed Studios. Om du använder olika Azure Sphere-maskinvara kan du läsa tillverkarens dokumentation för att ta reda på om UART-objektet exponeras och hur du kommer åt det. Du kan behöva konfigurera maskinvaran för att visa utdata på ett annat sätt och uppdatera exempelkoden och Uarts-fältet i app_manifest.json-filen för att använda en annan UART.
Förutsättningar
- Installera CMake och Ninja för Windows eller linux.
- Installera Visual Studio-kod för Windows eller linux.
- Installera CMake och Ninja för Windows eller linux.
- Installera Azure Sphere SDK för Windows eller Linux.
- Välj en katalog och gör anspråk på din enhet.
- Konfigurera nätverk och uppdatera enhetens operativsystem.
Installera GNU Arm Embedded Toolchain
- Visual Studio 2022: Om du använder Visual Studio 2022 installerar du GNU Arm Embedded Toolchain (arm-none-eabi) från armutvecklarens webbplats.
- Visual Studio 2019: Verktygsringen installeras automatiskt med Azure Sphere-tillägget för Visual Studio i Visual Studio 2019. Om du använder Visual Studio 2019 går du till Konfigurera maskinvara för visning av utdata. Men om du har installerat GNU Arm Embedded Toolchain manuellt använder Visual Studio den version du har installerat.
Om du vill installera verktygsringen på armutvecklarens webbplats letar du reda på GNU Arm Embedded Toolchain (arm-none-eabi) som innehåller kompileraren för ARM Cerebral-M4-processorn. Följ anvisningarna där för att ladda ned och installera kompileraren för din OS-plattform.
Visual Studio Code söker som standard efter verktygsringen och bör hitta den version du har installerat. Om dustöter> på byggproblem relaterade till verktygsringen kan du läsa Inställningar>Inställningar> TilläggAzureSfär för att säkerställa att "Azure Sphere: Arm Gnu Path" identifierar GNU Arm Embedded Toolchain-installationskatalogen.
Konfigurera maskinvara för visning av utdata
För närvarande har varje kärnor i realtid stöd för en UART-fil med endast TX. RTApps kan använda denna UART för att skicka loggutdata från enheten. Under programutveckling och felsökning behöver du vanligtvis ett sätt att läsa och visa utdata. Det HelloWorld_RTApp_MT3620_BareMetal exemplet visar hur ett program kan skriva till UART.
Använd en USB-till-seriell adapter, till exempel FTDI Friend, för att ansluta UART-enheten i realtidskärnan till en USB-port på datorn. Du behöver också en terminalemulator för att upprätta en serieanslutning med 115200-8-N-1-terminalinställningar (115200 bps, 8 bitar, ingen paritetsbit, en stoppbit) för att visa utdata.
Följ de här stegen om du vill konfigurera maskinvaran för visning av utdata från en RTApp. Du måste läsa dokumentationen från maskinvarutillverkaren för att fastställa fästplatserna. Om du använder maskinvara som följer MT3620-maskinvaran för referenskortdesign (RDB), t.ex. MT3620 Dev Kit från Seeed Studios, kan du ta reda på pin-platserna genom att titta på RDB-gränssnittsrubrikerna .
Anslut GND på USB-to-serial-adaptern till GND på ditt dev kit. På MT3620 RDB-maskinvara är GND Header 3, pin 2.
Anslut RX på USB-to-serial-adaptern till IOM4-0 TX på din dev kit. På MT3620 RDB-maskinvara är IOM4-0 TX Header 3, pin 6.
Anslut USB-till-seriekortet till en kostnadsfri USB-port på utvecklingsdatorn och bestäm vilken port serieenheten är ansluten till.
I Windows startar du Enhetshanteraren, väljer Visa>enheter efter behållare och letar efter USB UART. FT232R USB UART anger till exempel FTDI Friend-adaptern.
Skriv följande kommando i Linux:
dmesg | grep ttyUSB
Porten ska heta ttyUSBn, där n anger portnumret.
dmesg
Om kommandot innehåller flera USB-portar rapporteras den som är ansluten till den vanligtvis sista som är ansluten. I följande exempel använder du 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
Starta ett terminalemulatorprogram och öppna en 115200-8-N-1-terminal i COM-porten som används av adaptern. I dokumentationen till terminalemulatorn finns information om hur du anger port och hastighet.
Aktivera utveckling och felsökning
Innan du kan skapa ett exempelprogram på din Azure Sphere-enhet eller utveckla nya program för den måste du aktivera utveckling och felsökning. Som standard är Azure Sphere-enheter "låsta". d.v.s. de tillåter inte att program under utveckling läses in från en dator, och de tillåter inte felsökning av program. När du förbereder enheten för felsökning tar du bort den här begränsningen och läser in programvara som krävs för felsökning och upplåsning av enhetsfunktioner .
Om du vill felsöka kärnor i realtid använder du kommandot az sphere device enable-development . Det här kommandot konfigurerar enheten så att den accepterar program från en dator för felsökning och tilldelar enheten till gruppen Utvecklingsenhet, som inte tillåter uppdateringar av molnprogram. Under programutveckling och felsökning bör du lämna enheten i den här gruppen så att molnprogramuppdateringar inte skriver över programmet under utveckling.
I Windows måste du lägga till parametern --enable-rt-core-debugging
som läser in felsökningsservrarna och nödvändiga drivrutiner för varje typ av kärna på enheten.
Logga in på Azure Sphere om du inte redan har gjort det:
az login
Öppna ett kommandoradsgränssnitt med PowerShell eller Kommandotolken i Windows med administratörsbehörighet. Parametern
--enable-rt-core-debugging
kräver administratörsbehörighet eftersom DEN installerar USB-drivrutiner för felsökaren.Ange följande kommando:
az sphere device enable-development --enable-rt-core-debugging --catalog <CatalogName> --resource-group <ResourceGroupName>
Stäng fönstret när kommandot har slutförts eftersom administratörsbehörighet inte längre krävs. Det bästa sättet är att alltid använda det lägsta privilegiet som kan utföra en uppgift.
Om az sphere device enable-development-kommandot misslyckas kan du läsa Felsöka Azure Sphere-problem för hjälp.
Ladda ned exempelprogrammet
Du kan ladda ned InterCore Communications-programmen på följande sätt:
- Rikta webbläsaren mot microsoft exempelwebbläsaren.
- Skriv "Azure Sphere" i rutan Search.
- Välj Azure Sphere – Inter-core Communications i sökresultaten.
- Välj Ladda ned ZIP.
- Öppna den nedladdade filen och extrahera den till en lokal katalog.
Skapa och köra partnerprogrammen
Starta Visual Studio. Välj Öppna en lokal mapp och gå till mappen där du extraherade IntercoreComms-programmen.
Viktigt
Om du använder Visual Studio 2022 version 17.1 eller senare och extraherade IntercoreComms-exemplet före 22.02 Azure Sphere-versionen måste du lägga till en CMakeWorkspaceSettings.json-fil i projektmappen på översta nivån.
Om du inte använder en MT3620 RDB uppdaterar du app_manifest.json-filerna för både program och maskinvarudefinitionsfilen och CMakeLists.txt fil för högnivåprogrammet så att de matchar maskinvaran.
Om CMake-generering inte startar automatiskt markerar du filen CMakeLists.txt.
I Visual Studio ska Visa>utdata>visa utdata från: CMake-utdata visa meddelanden
CMake generation started
ochCMake generation finished
.Välj Skapa>alla. Om menyn inte finns öppnar du Solution Explorer, högerklickar på filen CMakeLists.txt och väljer Skapa. Utdataplatsen för IntercoreComms_HL & IntercoreComms RT-program visas i fönstret Utdata .
Välj Välj IntercoreComms för startobjekt>(Alla kärnor).
Välj Felsöka> eller tryck på F5 för att distribuera och felsöka programmen.
I fönstret Utdataväljer du Utdata från-menyn och sedan Enhetsutdata. Fönstret Utdata ska visa programutdata på hög nivå:
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
Den anslutna terminalemulatorn ska visa utdata från det realtidsdugliga programmet:
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
Använd felsökaren för att ange brytpunkter, inspektera variabler och prova andra felsökningsuppgifter.
Öppna mappen där du extraherade IntercoreComms-programmen i Visual Studio-kod. Visual Studio Code identifierar filen intercore.code-workspace och frågar om du vill öppna arbetsytan. Välj Öppna arbetsyta om du vill öppna både realtidsprogrammet och programmet på hög nivå samtidigt.
Om du inte använder en MT3620 RDB uppdaterar du app_manifest.json-filerna för både program och maskinvarudefinitionsfilen och CMakeLists.txt fil för högnivåprogrammet så att de matchar maskinvaran.
Tryck på F5 för att starta felsökningen. Om projektet inte har skapats tidigare, eller om filer har ändrats och återskapats krävs, skapas projektet i Visual Studio Code innan felsökningen påbörjas.
Utdatafönstret för Azure Sphere ska visa "Distribuera avbildning..." följt av sökvägarna till SDK och kompileraren.
Utdatafönstret ska visa programutdata på hög nivå:
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
Den anslutna terminalemulatorn ska visa utdata från det realtidsdugliga programmet:
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
Använd felsökningsfunktioner för Visual Studio-kod för att ställa in brytpunkter, inspektera variabler och prova andra felsökningsuppgifter.
Felsökning
Programmet kan börja köras innan OpenOCD upprättar en anslutning. Därför kan brytpunkter som anges tidigt i koden missas. En enkel lösning är att fördröja starten av appen tills OpenOCD ansluter.
Infoga följande kod i början av programinmatningspunkten RTCoreMain. Detta gör att programmet kommer in i och förblir i en
while
slinga tills variabelnf
är inställd på sant.static _Noreturn void RTCoreMain(void) { . . . volatile bool f = false; while (!f) { // empty. } . . . }
Tryck på F5 för att starta appen med felsökning och starta sedan körningen.
I felsökningsfönstret Lokala inställningar ändrar du värdet
f
för från noll till ett.Stega igenom koden som vanligt.
När du skapar med CLI skapar och distribuerar du först det realtidsaktiverade programmet och bygger sedan upp och distribuerar det högnivåprogrammet.
Skapa och distribuera det realtidsstödande programmet
Gå till mappen där du extraherade IntercoreComms-programmen och välj sedan mappen IntercoreComms/IntercoreComms_RTApp_MT3620_BareMetal.
Öppna app_manifest.json-filen och kontrollera att komponent-ID för appen på hög nivå visas i funktionen AllowedApplicationConnections.
Öppna ett kommandoradsgränssnitt med PowerShell, Windows-kommandotolken eller Linux-kommandogränssnittet. Navigera till projektversionskatalogen.
Kör CMake med följande parametrar i kommandotolken från project build-katalogen:
cmake --preset <preset-name> <source-path>
--preset <preset-name>
Namnet på konfigurationsförinställningen som definierats i CMakePresets.json.
--build <cmake-path>
Den binära katalogen som innehåller CMake-cachen. Om du till exempel kör CMake på ett Azure Sphere-exempel blir
cmake --build out/ARM-Debug
build-kommandot .<source-path>
Sökvägen till katalogen som innehåller källfilerna för exempelprogrammet. I exemplet laddades Azure Sphere-exempellagringsplatsen ned till en katalog med namnet AzSfär.
CMake-parametrar avgränsas med blanksteg. Linjefortsättningstecknet (^ för Windows kommandorad, \ för Linux-kommandoraden eller ' för PowerShell) kan användas för läsbarhet, men krävs inte.
Följande exempel visar CMake-kommandona för IntercoreComms RTApp:
Kommandotolken i Windows
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"
I project build-katalogen kör du Ninja i kommandotolken för att skapa programmet och skapa avbildningspaketfilen.
ninja -C out/ARM-Debug
Ninja placerar de resulterande program- och .imagepackage-filerna i den angivna katalogen.
Du kan också anropa Ninja via CMake med följande kommando:
cmake --build out/<binary-dir>
Ange
<binary-dir>
den binära katalogen som innehåller CMake-cachen. Om du till exempel kör CMake på ett Azure Sphere-exempel blircmake --build out/ARM-Debug
build-kommandot .När du felsöker, särskilt när du har gjort ändringar i CMake-kommandon, tar du bort hela versionen och försöker igen.
Ta bort alla program som redan har distribuerats till enheten:
az sphere device sideload delete
Läs in avbildningspaketet som ninja skapade i project build-katalogen i kommandotolken:
az sphere device sideload deploy --image-package <path-to-imagepackage>
Programmet börjar köras strax efter att det har lästs in.
Hämta komponent-ID:t för avbildningen:
az sphere image-package show --image-package <path-to-imagepackage>
Kommandot returnerar alla metadata för avbildningspaketet. Programmets komponent-ID visas i avsnittet Identitet för programbildtypen. Till exempel:
... "Identity": { "ComponentId": "<component-id>", "ImageId": "<image-id>", "ImageType": "Application" }, ...
Skapa och distribuera högnivåprogrammet
Gå till mappen där du extraherade IntercoreComms-programmen och välj sedan mappen IntercoreComms/IntercoreComms_HighLevelApp.
Öppna app_manifest.json filen och kontrollera att RTApps komponent-ID visas i funktionen AllowedApplicationConnections.
Öppna ett kommandoradsgränssnitt med PowerShell, Windows-kommandotolken eller Linux-kommandogränssnittet. Navigera till projektversionskatalogen.
Kör CMake med följande parametrar i kommandotolken från project build-katalogen:
cmake --preset <preset-name> <source-path>
--preset <preset-name>
Namnet på konfigurationsförinställningen som definierats i CMakePresets.json.
--build <cmake-path>
Den binära katalogen som innehåller CMake-cachen. Om du till exempel kör CMake på ett Azure Sphere-exempel blir
cmake --build out/ARM-Debug
build-kommandot .<source-path>
Sökvägen till katalogen som innehåller källfilerna för exempelprogrammet. I exemplet laddades Azure Sphere-exempellagringsplatsen ned till en katalog med namnet AzSfär.
CMake-parametrar avgränsas med blanksteg. Linjefortsättningstecknet (^ för Windows kommandorad, \ för Linux-kommandoraden eller ' för PowerShell) kan användas för läsbarhet, men krävs inte.
Följande exempel visar CMake-kommandona för IntercoreComms-programmet på hög nivå.
I project build-katalogen kör du Ninja i kommandotolken för att skapa programmet och skapa avbildningspaketfilen.
ninja -C out/ARM-Debug
Ninja placerar de resulterande program- och .imagepackage-filerna i den angivna katalogen.
Du kan också anropa Ninja via CMake med följande kommando:
cmake --build out/<binary-dir>
Ange
<binary-dir>
den binära katalogen som innehåller CMake-cachen. Om du till exempel kör CMake på ett Azure Sphere-exempel blircmake --build out/ARM-Debug
build-kommandot .När du felsöker, särskilt när du har gjort ändringar i CMake-kommandon, tar du bort hela versionen och försöker igen.
Läs in avbildningspaketet som ninja skapade i project build-katalogen i kommandotolken:
az sphere device sideload deploy --image-package <package-name>
Programmet börjar köras strax efter att det har lästs in.
Hämta komponent-ID:t för avbildningen:
az sphere image-package show --image-package <path-to-imagepackage>
Kommandot returnerar alla metadata för avbildningspaketet. Programmets komponent-ID visas i avsnittet Identitet för programbildtypen. Till exempel:
... "Identity": { "ComponentId": "<component-id>", "ImageId": "<image-id>", "ImageType": "Application" }, ...
Kör partnerprogrammen med felsökning aktiverad
Stoppa realtidsprogrammet om det körs.
az sphere device app stop --component-id <component id>
Starta om programmet för felsökning.
az sphere device app start -- --debug-mode true --component-id <component id>
Det här kommandot returnerar kärnan som programmet körs på.
<component id> App state: running Core : Real-time 0
Navigera till openocd-mappen för den sysroot som programmet skapades med. Sysroots installeras i Azure Sphere SDK-installationsmappen. I Windows är mappen till exempel installerad som standard i
C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd
och på Linux, på/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux
.Kör
openocd
som i följande exempel. I exemplet förutsätts att appen körs på core 0. Om appen körs på core 1 ersätter du "targets io0" med "targets io1".Öppna en ny Azure Sphere-kommandotolk (Windows Azure Sphere klassisk CLI), standardkommandouppmaning eller PowerShell (Windows Azure CLI) eller terminalfönster (Linux).
Gå till mappen som innehåller den realtidsstödande .out-filen för programmet och starta
arm-none-eabi-gdb
, som är en del av GNU Arm Embedded Toolchain:Kommandotolken i Windows
"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
OpenOCD-servern har ett GDB-servergränssnitt på :4444. Ange målet för felsökning.
target remote :4444
Nu kan du köra gdb-kommandon till det program som kan användas i realtid. Lägga till en brytpunkt i funktionen HandleSendTimerDeferred:
break HandleSendTimerDeferred
Den anslutna terminalemulatorn ska visa utdata från ett program som kan användas i realtid.
Öppna en ny Azure Sphere-kommandotolk (Windows Azure Sphere klassisk CLI), standardkommandouppmaning eller PowerShell (Windows Azure CLI) eller terminalfönster (Linux).
Navigera till mappen som innehåller den avancerade programfilen .imagepackage.
Stoppa programmet på hög nivå om det körs.
az sphere device app stop --component-id <component id>
Starta om högnivåprogrammet med felsökning.
az sphere device app start --debug-mode true --component-id <component id> --debug-mode
Öppna en terminalemulator och upprätta en Telnet- eller TCP-anslutning till 192.168.35.2 vid port 2342 för att visa den högnivåappens utdata.
Starta gdb med följande kommando:
Kommandotolken i Windows
"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
Observera
Azure Sphere SDK levereras med flera sysroots så att program kan rikta olika API-uppsättningar enligt beskrivningen i Application Runtime-versionen, sysroots och Beta-API:er. Sysroots installeras i Azure Sphere SDK-installationsmappen under Sysroots.
Ställ in fjärrfelsökningsmålet på IP-adress 192.168.35.2 på port 2345:
target remote 192.168.35.2:2345
Lägga till en brytpunkt i funktionen SendMessageToRTApp:
break SendMessageToRTApp
Skriv
c
för att fortsätta, observera utdata i Telnet/TCP-terminalen och växla sedan till kommandotolken eller terminalfönstret som innehåller felsökningssessionen för realtidsappen.Skriv
c
för att fortsätta och observera resultatet i den anslutna seriesessionen.
Du kan arbeta fram och tillbaka mellan felsökningssessioner, växla mellan det realtidsstödjande programmet och högnivåprogrammet. Du bör se utdata som liknar följande i de två utdatafönstren:
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
Om du vill avsluta varje felsökningssession skriver q
du i gdb-kommandotolken.
Nästa steg
- Utforska ytterligare exempel för både högnivå- och realtids-kompatibla program
- Läs mer om Azure Sphere-program
- Läs mer om azure sphere-utvecklingsmiljön