Dela via


Självstudie: Skapa ett realtidskompatibelt program

Viktigt!

Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).

Den här självstudien visar hur du skapar ett exempelprogram för realtidskärnor på en Azure Sphere-enhet. Se Översikt över Azure Sphere-program för grundläggande information om realtidskompatibla program.

I den här självstudien lär du dig att:

  • Ladda ned ett exempelprogram
  • Installera GNU Arm-verktygskedjan
  • Konfigurera maskinvara för att visa utdata
  • Aktivera utveckling och felsökning
  • Starta en terminalemulator för att visa utdata
  • Skapa, köra och felsöka ett realtidskompatibelt program

Viktigt!

Dessa instruktioner förutsätter att du använder maskinvara som följer RDB-maskinvaran (MT3620 Reference Board Design), 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 är exponerad och hur du kommer åt den. Du kan behöva konfigurera maskinvara för att visa utdata på ett annat sätt och uppdatera exempelkoden och fältet "Uarts" i app_manifest.json-filen för att använda en annan UART.

Förutsättningar

Hämta exempelprogrammet

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

  1. Peka webbläsaren till Microsoft Samples Browser.
  2. Skriv "Azure Sphere" i sökrutan.
  3. Välj Azure Sphere – Hello World i sökresultaten.
  4. Välj Ladda ned ZIP.
  5. Öppna den nedladdade filen och extrahera till en lokal katalog.

Installera verktygskedjan GNU Arm Embedded

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: Verktygskedjan installeras automatiskt med Azure Sphere-tillägget för Visual Studio i Visual Studio 2019. Om du använder Visual Studio 2019 fortsätter du till Konfigurera maskinvara för att visa utdata. Men om du har installerat GNU Arm Embedded Toolchain manuellt använder Visual Studio den version som du har installerat.

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

Visual Studio Code söker som standard efter verktygskedjan och bör hitta den version som du har installerat. Om du stöter på byggproblem relaterade till verktygskedjan anger du sökvägen enligt följande:

  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 verktygskedjan på armutvecklarens webbplats hittar du GNU Arm Embedded Toolchain (arm-none-eabi) som innehåller kompilatorn för ARM Cortex-M4-processorn. Följ anvisningarna där för att ladda ned och installera kompilatorn för din OS-plattform.

Konfigurera maskinvara för att visa utdata

För närvarande har varje realtidskärna stöd för en UART 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-serieadapter, till exempel FTDI Friend, för att ansluta UART på realtidskärnan till en USB-port på datorn. Du behöver också en terminalemulator för att upprätta en seriell anslutning med terminalinställningarna 115200-8-N-1 (11 5200 bps, 8 bitar, inga paritetsbitar, en stoppbit) för att visa utdata.

Du konfigurerar maskinvaran att visa utdata från en RTApp genom att följa dessa steg. Du behöver läsa dokumentationen från tillverkaren av din maskinvara för att ta reda på stiftplatserna. Om du använder maskinvara som följer MT3620 RDB-maskinvaran (Reference Board Design), till exempel MT3620 Dev Kit från Seeed Studios, kan det vara värt att titta på RDB-gränssnittsrubrikerna för att ta reda på stiftplatserna.

  1. Anslut GND på USB-till-serie-adaptern till GND på din dev kit. På MT3620 RDB-maskinvara utgörs GND av rubrik 3, stift 2.
  2. Anslut RX på USB-till-serie-adaptern till IOM4-0 TX på din dev kit. På MT3620 RDB-maskinvara utgörs IOM4-0 TX av rubrik 3, stift 6.
  3. Anslut USB-till-serieadaptern till en kostnadsfri USB-port på utvecklingsdatorn och ta reda på vilken port serieenheten är ansluten till. I Windows startar du Enhetshanteraren, väljer Visa>enheter efter container och letar efter USB UART. Ft232R USB UART anger t.ex. FTDI Friend-adaptern.
  4. Starta ett terminalemulatorprogram och öppna en 115200-8-N-1-terminal till COM-porten som används av adaptern. Se dokumentationen för terminalemulatorn för att ta reda på hur du anger port och hastighet.

Konfigurera maskinvara för att visa utdata

För närvarande har varje realtidskärna stöd för en UART 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-serieadapter, till exempel FTDI Friend, för att ansluta UART på realtidskärnan till en USB-port på datorn. Du behöver också en terminalemulator för att upprätta en seriell anslutning med terminalinställningarna 115200-8-N-1 (11 5200 bps, 8 bitar, inga paritetsbitar, en stoppbit) för att visa utdata.

Du konfigurerar maskinvaran att visa utdata från en RTApp genom att följa dessa steg. Du behöver läsa dokumentationen från tillverkaren av din maskinvara för att ta reda på stiftplatserna. Om du använder maskinvara som följer MT3620 RDB-maskinvaran (Reference Board Design), till exempel MT3620 Dev Kit från Seeed Studios, kan det vara värt att titta på RDB-gränssnittsrubrikerna för att ta reda på stiftplatserna.

  1. Anslut GND på USB-till-serie-adaptern till GND på din dev kit. På MT3620 RDB-maskinvara utgörs GND av rubrik 3, stift 2.

  2. Anslut RX på USB-till-serie-adaptern till IOM4-0 TX på din dev kit. På MT3620 RDB-maskinvara utgörs IOM4-0 TX av rubrik 3, stift 6.

  3. Anslut USB-till-serieadaptern till en kostnadsfri USB-port på utvecklingsdatorn och ta reda på vilken port serieenheten är ansluten till.

    • I Windows startar du Enhetshanteraren, väljer Visa>enheter efter container och letar efter USB UART. Ft232R USB UART anger t.ex. FTDI Friend-adaptern.

    • I Linux skriver du följande kommando:

      dmesg | grep ttyUSB
      

      Porten ska ha namnet ttyUSBn, där n anger portnumret. dmesg Om kommandot visar flera USB-portar, den som är ansluten till den vanligtvis den sista som rapporteras som 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 till COM-porten som används av adaptern. Se dokumentationen för terminalemulatorn för att ta reda på 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"; De tillåter alltså 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 låser upp enhetsfunktioner enligt beskrivningen i Enhetsfunktioner och kommunikation.

Om du vill felsöka realtidskärnor använder du kommandot azsphere device enable-development. Det här kommandot konfigurerar enheten för att acceptera 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:

    azsphere login
    
  2. Öppna ett kommandoradsgränssnitt med PowerShell eller Windows-kommandotolken med administratörsbehörighet. Parametern --enable-rt-core-debugging kräver administratörsbehörighet eftersom den installerar USB-drivrutiner för felsökningsprogrammet.

  3. Ange följande kommando:

    azsphere device enable-development --enable-rt-core-debugging
    
  4. Stäng fönstret när kommandot har slutförts eftersom administratörsbehörighet inte längre krävs. Som bästa praxis bör du alltid använda den lägsta behörighet som kan utföra en uppgift.

Om kommandot azsphere device enable-development misslyckas kan du läsa Felsöka Azure Sphere-problem för hjälp.

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

  1. Starta Visual Studio. Välj Öppna en lokal mapp, navigera 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 app_manifest.json-filen och exempelkoden för att ange rätt UART, till exempel ISU1.

  3. Om CMake-genereringen inte startas automatiskt väljer du filen CMakeLists.txt.

  4. I fönstret Visual Studio-utdata ska CMake-utdata visa meddelandena CMake generation started. ochCMake 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 bör visa utdata från HelloWorld_RTApp_MT3620_Baremetal-programmet. Programmet skickar följande ord med en sekunds intervall:

    Tick

    Tock

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

Skapa och kör HelloWorld RTApp-programmet med Visual Studio Code

  1. I Visual Studio Code ö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 filen app_manifest.json och exempelkoden för att ange korrekt UART, till exempel ISU1.

  3. Tryck på F5 för att starta felsökningsprogrammet. Om projektet inte har skapats tidigare, eller om filer har ändrats och återskapats krävs, skapar Visual Studio Code projektet innan felsökningen startar.

  4. Azure Sphere-utdatafönstret bör visa "Distribuerar bild..." följt av sökvägarna till SDK och kompilatorn.

  5. Den anslutna terminalemulatorn bör visa utdata från HelloWorld_RTApp_MT3620_Baremetal-programmet. Programmet skickar följande ord med en sekunds intervall:

    Tick

    Tock

  6. Använd Visual Studio Code-felsökningsfunktioner för att ange 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 för detta är att fördröja starten av appen tills OpenOCD ansluter.

  1. Infoga följande kod i början av programmets startpunkt RTCoreMain. Detta gör att programmet anger och förblir i en while loop tills variabeln f har angetts till true.

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

  3. Ändra värdet f för från noll till ett i felsökningsfönstret Lokalt.

  4. Gå igenom koden som vanligt.

Skapa exemplet

  1. Öppna ett kommandoradsgränssnitt med hjälp av PowerShell, Windows-kommandotolken eller Linux-kommandogränssnittet. Gå till din projektversionskatalog.

  2. Kör CMake i kommandotolken i projektversionskatalogen med följande parametrar:

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

      Förinställningsnamnet för byggkonfigurationen enligt definitionen i CMakePresets.json.

    • --build <cmake-path>

      Binärkatalogen som innehåller CMake-cachen. Om du till exempel kör CMake i 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 AzSphere.

      CMake-parametrar avgränsas med blanksteg. Radfortsättningstecknet (^ för Windows-kommandoraden, \ 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-kommandona för en RTApp. <Ersätt då 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 det resulterande programmet 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> till den binära katalog som innehåller CMake-cachen. Om du till exempel kör CMake i 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-kommandona, tar du bort hela bygget och försöker igen.

Kör exemplet

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

    azsphere device sideload delete
    
  2. I projektkatalogen läser du in avbildningspaketet som ninja skapade i kommandotolken:

    azsphere device sideload deploy --image-package <path-to-imagepackage>
    
  3. Hämta komponent-ID:t för avbildningen:

    azsphere image-package show --image-package <path-to-imagepackage>
    

    Kommandot returnerar alla metadata för avbildningspaketet. Komponent-ID:t för programmet visas i avsnittet Identitet för programbildtypen. Till exempel:

    Image package metadata:
    Section: Identity
    Image Type:           Application
    Component ID:         <component id>
    Image ID:             <image id>
    

    Du kan använda följande kommandon för att stoppa, starta och hämta programmets status:

    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>
    

Felsöka exemplet

  1. Stoppa programmet om det körs.

    azsphere device app stop --component-id <component id>
    
  2. Starta om programmet för felsökning.

    azsphere device app start --component-id <component id>
    

    Det här kommandot returnerar den kärna som programmet körs på.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Gå till mappen Openocd för den sysroot som programmet skapades med. Sysroots installeras i installationsmappen för Azure Sphere SDK. I Windows är mappen till exempel installerad som standard på 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. Exemplet förutsätter 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. Gå till mappen som innehåller programmets .out-fil 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 tillhandahåller 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 bör 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 inte dess partner bort. Mer information finns i Markera program som partner .

Nästa steg