Självstudiekurs: Skapa ett program som kan användas i realtid

Den här självstudiekursen visar hur du skapar ett exempelprogram för kärnor i realtid på en Azure Sphere-enhet. Se Översikt över Azure Sphere-program för grundläggande information om kompatibla program i realtid.

I den här självstudiekursen får du lära dig hur du:

  • Ladda ned ett exempelprogram
  • Installera GNU Arm toolchain
  • Konfigurera maskinvara för visning av utdata
  • Aktivera utveckling och felsökning
  • Starta en terminalemulator för att visa utdata
  • Skapa, köra och felsöka ett program som kan användas i realtid

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

Ladda ned exempelprogrammet

Du kan ladda ned HelloWorld-programmet på följande sätt:

  1. Rikta webbläsaren mot microsoft exempelwebbläsaren.
  2. Skriv "Azure Sphere" i rutan Search.
  3. Välj Azure Sphere – Hello World i sökresultaten.
  4. Välj Ladda ned ZIP.
  5. Öppna den nedladdade filen och extrahera den till en lokal katalog.

Installera GNU Arm Embedded Toolchain

Du kan ladda ned och installera GNU Arm Embedded Toolchain från armutvecklarens webbplats. Eller så kan du använda vcpkg artefakter för att automatiskt installera och konfigurera utvecklingsmiljön.

  • 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 går du till armutvecklarens webbplats och letar reda på GNU Arm Embedded Toolchain (arm-none-eabi) som innehåller kompilatorn 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 du stöter på problem med verktygsringen anger du sökvägen så här:

  1. Välj Filinställningar>>Inställningar>Tillägg>Azure Sphere.
  2. Ange installationssökvägen för GNU Arm Embedded Toolchain i inställningen Azure Sphere: Arm Gnu Path .

Om du vill installera verktygsringen går du till armutvecklarens webbplats och letar reda på GNU Arm Embedded Toolchain (arm-none-eabi) som innehåller kompilatorn för ARM Cerebral-M4-processorn. Följ anvisningarna där för att ladda ned och installera kompileraren för din OS-plattform.

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 .

  1. Anslut GND på USB-to-serial-adaptern till GND på ditt dev kit. På MT3620 RDB-maskinvara är GND Header 3, pin 2.
  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.
  3. 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.
  4. 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.

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 .

  1. Anslut GND på USB-to-serial-adaptern till GND på ditt dev kit. På MT3620 RDB-maskinvara är GND Header 3, pin 2.

  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.

  3. 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
    
  4. 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.

  1. Logga in på Azure Sphere om du inte redan har gjort det:

    az login
    
  2. Ö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.

  3. Ange följande kommando:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. 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.

Skapa och köra HelloWorld RTApp-programmet med Visual Studio

  1. Starta Visual Studio. Välj Öppna en lokal mapp, gå till mappen där du extraherade den nedladdade Azure_Sphere___Hello_World.zip filen och välj sedan mappen HelloWorld_RTApp_MT3620_Baremetal.

  2. Om du inte använder en MT3620 RDB uppdaterar du den app_manifest.json filen och exempelkoden för att ange rätt UART, till exempel ISU1.

  3. Om CMake-generering inte startar automatiskt markerar du filen CMakeLists.txt.

  4. I fönstret Visual Studio-utdata ska CMake-utdata visa meddelanden CMake generation started. och CMake generation finished..

  5. 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 HelloWorld_RTApp_MT3620_Baremetal-programmet visas i fönstret Utdata .

  6. På menyn Välj startobjekt väljer du HelloWorld_RTApp_MT3620_Baremetal (RTCore).

  7. Tryck på F5 för att distribuera programmet.

  8. Den anslutna terminalemulatorn ska visa utdata från HelloWorld_RTApp_MT3620_Baremetal programmet. Följande ord skickas med en sekunds intervall:

    Tick

    Tock

  9. Använd felsökaren för att ange brytpunkter, inspektera variabler och prova andra felsökningsuppgifter.

Skapa och köra HelloWorld RTApp-programmet med Visual Studio-kod

  1. I Visual Studio-kod öppnar du mappen HelloWorld_RTApp_MT3620_BareMetal i mappen där du extraherade den nedladdade Azure_Sphere___Hello_World.zip filen. Om du uppmanas att välja ett kit väljer du Använd inte ett kit.

  2. Om du inte använder MT3620 RDB-maskinvara uppdaterar du den app_manifest.json filen och exempelkoden för att ange rätt UART, till exempel ISU1.

  3. 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.

  4. Utdatafönstret för Azure Sphere ska visa "Distribuera avbildning..." följt av sökvägarna till SDK och kompileraren.

  5. Den anslutna terminalemulatorn ska visa utdata från HelloWorld_RTApp_MT3620_Baremetal programmet. Följande ord skickas med en sekunds intervall:

    Tick

    Tock

  6. 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.

  1. 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 variabeln f är inställd på sant.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Tryck på F5 för att starta appen med felsökning (F5) och dela sedan upp i körningen.

  3. I felsökningsfönstret Lokala inställningar ändrar du värdet f för från noll till ett.

  4. Stega igenom koden som vanligt.

Skapa exemplet

  1. Öppna ett kommandoradsgränssnitt med PowerShell, Windows-kommandotolken eller Linux-kommandogränssnittet. Navigera till projektversionskatalogen.

  2. 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-Debugbuild-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.

    I följande exempel visas CMake-kommandon för en RTApp. <Ersätt filsökvägen> med installationssökvägen för GNU Arm Embedded Toolchain i systemet.

    Kommandotolken i 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. Kör Ninja 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 blir cmake --build out/ARM-Debugbuild-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.

Kör exemplet

  1. Ta bort alla program som redan har distribuerats till enheten:

    az sphere device sideload delete
    
  2. I projektkatalogen läser du in avbildningspaketet som ninja skapade 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. Följande visas på den anslutna terminalemulatorn:

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

    Du kan använda följande kommandon för att stoppa, starta och få status för programmet:

    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>
    

Felsöka exemplet

  1. Stoppa programmet om det körs.

    az sphere device app stop --component-id <component id>
    
  2. 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
    
  3. 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.

  4. 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".

    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. Navigera till mappen som innehåller .out-filen 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" 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. OpenOCD-servern har ett GDB-servergränssnitt på :4444. Ange målet för felsökning.

    target remote :4444

  7. Nu kan du köra gdb-kommandon.

  8. Den anslutna terminalemulatorn ska visa utdata från programmet.

Använda partnerappar

När du läser in ett program på Azure Sphere-enheten tar Azure Sphere-distributionsverktygen som standard bort alla befintliga program. För att förhindra att detta händer när du utvecklar program som kommunicerar med varandra måste du markera programmen som partner. När du distribuerar ett av programmen tas dess partner inte bort. Mer information finns i Markera program som partner .

Nästa steg