Zelfstudie: Een toepassing bouwen die in realtime kan worden uitgevoerd

In deze zelfstudie leert u hoe u een voorbeeldtoepassing bouwt voor de realtime kernen op een Azure Sphere-apparaat. Zie Overzicht van Azure Sphere-toepassingen voor basisinformatie over toepassingen die in realtime kunnen worden gebruikt.

In deze zelfstudie leert u het volgende:

  • Een voorbeeldtoepassing downloaden
  • Installeer de GNU Arm-toolchain
  • Hardware instellen om uitvoer weer te geven
  • Ontwikkeling en foutopsporing inschakelen
  • Een terminalemulator starten om uitvoer weer te geven
  • Een realtime compatibele toepassing bouwen, uitvoeren en fouten opsporen

Belangrijk

In deze instructies wordt ervan uitgegaan dat u hardware gebruikt die de RDB-hardware (Reference Board Design) van MT3620 volgt, zoals de MT3620 Dev Kit van Seeed Studios. Als u verschillende Azure Sphere-hardware gebruikt, raadpleegt u de documentatie van de fabrikant om erachter te komen of de UART beschikbaar is en hoe u er toegang toe hebt. Mogelijk moet u hardware instellen om uitvoer anders weer te geven en de voorbeeldcode en het veld Uarts van het app_manifest.json-bestand bijwerken om een andere UART te gebruiken.

Voorwaarden

De voorbeeldtoepassing downloaden

U kunt de toepassing HelloWorld als volgt downloaden:

  1. Wijs uw browser naar Microsoft Samples Browser.
  2. Typ 'Azure Sphere' in het vak Search.
  3. Selecteer Azure Sphere - Hallo wereld in de zoekresultaten.
  4. Selecteer ZIP downloaden.
  5. Open het gedownloade bestand en pak het uit naar een lokale map.

Installeer de GNU Arm Embedded Toolchain

U kunt de GNU Arm Embedded Toolchain downloaden en installeren via de website van arm-ontwikkelaars. U kunt ook vcpkg-artefacten gebruiken om de ontwikkelomgeving automatisch te installeren en te configureren.

  • Visual Studio 2022: Als u Visual Studio 2022 gebruikt, installeert u de GNU Arm Embedded Toolchain (arm-none-eabi) vanaf de website van Arm-ontwikkelaars.
  • Visual Studio 2019: De hulpprogrammaketen wordt automatisch geïnstalleerd met de azure-sphere-extensie voor Visual Studio in Visual Studio 2019. Als u Visual Studio 2019 gebruikt, gaat u verder met Hardware instellen om uitvoer weer te geven. Als u de GNU Arm Embedded Toolchain echter handmatig hebt geïnstalleerd, gebruikt Visual Studio de versie die u hebt geïnstalleerd.

Om de hulpprogrammaketen te installeren, vindt u op de website van Arm-ontwikkelaars de GNU Arm Embedded Toolchain (arm-none-eabi) met de compiler voor de ARM Cortex-M4-processor. Volg de instructies daar om de compiler voor uw besturingssysteemplatform te downloaden en te installeren.

Visual Studio Code zoekt standaard naar de hulpprogrammaketen en moet de versie vinden die u hebt geïnstalleerd. Als u buildproblemen ondervindt met betrekking tot de hulpprogrammaketen, voert u het pad als volgt in:

  1. Selecteer Bestandsvoorkeuren>>Instellingen>Extensies>Azure Sphere.
  2. Voer het installatiepad voor GNU Arm Embedded Toolchain in de instelling Azure Sphere: Arm Gnu Path in.

Om de hulpprogrammaketen te installeren, vindt u op de website van Arm-ontwikkelaars de GNU Arm Embedded Toolchain (arm-none-eabi) met de compiler voor de ARM Cortex-M4-processor. Volg de instructies daar om de compiler voor uw besturingssysteemplatform te downloaden en te installeren.

Hardware instellen om uitvoer weer te geven

Momenteel ondersteunt elke realtime kern een TX-only UART. RTApps kan deze UART gebruiken om logboekuitvoer vanaf het apparaat te verzenden. Tijdens de ontwikkeling en foutopsporing van toepassingen hebt u meestal een manier nodig om de uitvoer te lezen en weer te geven. Het voorbeeld van HelloWorld_RTApp_MT3620_BareMetal laat zien hoe een toepassing naar de UART kan schrijven.

Gebruik een USB-naar-seriële adapter, zoals de FTDI Friend, om de UART op de realtime kern aan te sluiten op een USB-poort op uw computer. U hebt ook een terminalemulator nodig om een seriële verbinding tot stand te brengen met 115200-8-N-1-terminalinstellingen (115200 bps, 8 bits, geen pariteitsbits, één stop-bit) om de uitvoer weer te geven.

Volg deze stappen om de hardware in te stellen voor het weergeven van uitvoer van een RTApp. Raadpleeg de documentatie van de hardwarefabrikant om de locaties van de pincode te bepalen. Als u hardware gebruikt die de RDB-hardware (Reference Board Design) van MT3620 volgt, zoals de MT3620 Dev Kit van Seeed Studios, kunt u de RDB-interfaceheaders bekijken om de locaties van de pincode te bepalen.

  1. Sluit GND op de USB-naar-seriële adapter aan op GND op uw ontwikkelkit. Op MT3620 RDB-hardware is GND Header 3, pin 2.
  2. Sluit RX op de USB-naar-seriële adapter aan op IOM4-0 TX op uw ontwikkelkit. Op MT3620 RDB-hardware is IOM4-0 TX Header 3, pin 6.
  3. Sluit de USB-naar-seriële adapter aan op een vrije USB-poort op uw ontwikkelcomputer en bepaal op welke poort het seriële apparaat is aangesloten. Start in Windows Apparaatbeheer, selecteer Apparaten weergeven>per container en zoek naar 'USB UART'. FT232R USB UART geeft bijvoorbeeld de FTDI Friend-adapter aan.
  4. Start een terminalemulatorprogramma en open een terminal 115200-8-N-1 naar de COM-poort die door de adapter wordt gebruikt. Raadpleeg de documentatie voor de terminalemulator voor meer informatie over het opgeven van de poort en snelheid.

Hardware instellen om uitvoer weer te geven

Momenteel ondersteunt elke realtime kern een TX-only UART. RTApps kan deze UART gebruiken om logboekuitvoer vanaf het apparaat te verzenden. Tijdens de ontwikkeling en foutopsporing van toepassingen hebt u meestal een manier nodig om de uitvoer te lezen en weer te geven. Het voorbeeld van HelloWorld_RTApp_MT3620_BareMetal laat zien hoe een toepassing naar de UART kan schrijven.

Gebruik een USB-naar-seriële adapter, zoals de FTDI Friend, om de UART op de realtime kern aan te sluiten op een USB-poort op uw computer. U hebt ook een terminalemulator nodig om een seriële verbinding tot stand te brengen met 115200-8-N-1-terminalinstellingen (115200 bps, 8 bits, geen pariteitsbits, één stop-bit) om de uitvoer weer te geven.

Volg deze stappen om de hardware in te stellen voor het weergeven van uitvoer van een RTApp. Raadpleeg de documentatie van de hardwarefabrikant om de locaties van de pincode te bepalen. Als u hardware gebruikt die de RDB-hardware (Reference Board Design) van MT3620 volgt, zoals de MT3620 Dev Kit van Seeed Studios, kunt u de RDB-interfaceheaders bekijken om de locaties van de pincode te bepalen.

  1. Sluit GND op de USB-naar-seriële adapter aan op GND op uw ontwikkelkit. Op MT3620 RDB-hardware is GND Header 3, pin 2.

  2. Sluit RX op de USB-naar-seriële adapter aan op IOM4-0 TX op uw ontwikkelkit. Op MT3620 RDB-hardware is IOM4-0 TX Header 3, pin 6.

  3. Sluit de USB-naar-seriële adapter aan op een vrije USB-poort op uw ontwikkelcomputer en bepaal op welke poort het seriële apparaat is aangesloten.

    • Start in Windows Apparaatbeheer, selecteer Apparaten weergeven>per container en zoek naar 'USB UART'. FT232R USB UART geeft bijvoorbeeld de FTDI Friend-adapter aan.

    • Typ in Linux de volgende opdracht:

      dmesg | grep ttyUSB
      

      De poort moet de naam ttyUSBn hebben, waarbij n het poortnummer aangeeft. Als de dmesg opdracht meerdere USB-poorten vermeldt, wordt de poort die is aangesloten op de meestal de laatste poort gerapporteerd als gekoppeld. In het volgende gebruikt u bijvoorbeeld 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. Start een terminalemulatorprogramma en open een terminal 115200-8-N-1 naar de COM-poort die door de adapter wordt gebruikt. Raadpleeg de documentatie voor de terminalemulator voor meer informatie over het opgeven van de poort en snelheid.

Ontwikkeling en foutopsporing inschakelen

Voordat u een voorbeeldtoepassing kunt bouwen op uw Azure Sphere-apparaat of hiervoor nieuwe toepassingen kunt ontwikkelen, moet u ontwikkeling en foutopsporing inschakelen. Azure Sphere-apparaten zijn standaard 'vergrendeld'; Dat wil gezegd hebben dat toepassingen die in ontwikkeling zijn, niet vanaf een pc mogen worden geladen en dat er geen foutopsporing van toepassingen is toegestaan. Het apparaat voorbereiden op foutopsporing verwijdert deze beperking en laadt software die nodig is voor foutopsporing en ontgrendelt apparaatmogelijkheden .

Als u fouten wilt opsporen in de realtime kernen, gebruikt u de opdracht az sphere device enable-development . Met deze opdracht configureert u het apparaat om toepassingen van een pc te accepteren voor foutopsporing en wordt het apparaat toegewezen aan de apparaatgroep Ontwikkeling, die geen updates van cloudtoepassingen toestaat. Tijdens het ontwikkelen van toepassingen en foutopsporing moet u het apparaat in deze groep laten zodat cloudtoepassingsupdates de toepassing in ontwikkeling niet overschrijven.

In Windows moet u de --enable-rt-core-debugging parameter toevoegen, waarmee de foutopsporingsservers en vereiste stuurprogramma's voor elk type kern op het apparaat worden geladen.

  1. Meld u aan bij Azure Sphere als u dit nog niet hebt gedaan:

    az login
    
  2. Open een opdrachtregelinterface met behulp van PowerShell of Windows-opdrachtprompt met beheerdersbevoegdheden. Voor de --enable-rt-core-debugging parameter is beheerdersbevoegdheden vereist omdat er USB-stuurprogramma's voor het foutopsporingsprogramma worden geïnstalleerd.

  3. Voer de volgende opdracht in:

    az sphere device enable-development --enable-rt-core-debugging  --catalog <CatalogName>  --resource-group <ResourceGroupName>
    
  4. Sluit het venster nadat de opdracht is voltooid omdat er geen beheerdersbevoegdheden meer nodig zijn. Als best practice moet u altijd de laagste bevoegdheid gebruiken waarmee een taak kan worden uitgevoerd.

Als de opdracht az sphere device enable-development mislukt, raadpleegt u Problemen met Azure Sphere oplossen voor hulp.

De HelloWorld RTApp-toepassing bouwen en uitvoeren met Visual Studio

  1. Start Visual Studio. Selecteer Een lokale map openen, navigeer naar de map waarin u het gedownloade Azure_Sphere___Hello_World.zip-bestand hebt uitgepakt en selecteer vervolgens de map HelloWorld_RTApp_MT3620_Baremetal.

  2. Als u geen MT3620 RDB gebruikt, werkt u het app_manifest.json-bestand en de voorbeeldcode bij om de juiste UART op te geven, bijvoorbeeld ISU1.

  3. Als het genereren van CMake niet automatisch wordt gestart, selecteert u het CMakeLists.txt-bestand.

  4. In het venster Visual Studio Output moet de CMake-uitvoer de berichten CMake generation started. en CMake generation finished.weergeven.

  5. Selecteer Build>Alles bouwen. Als het menu niet aanwezig is, opent u Solution Explorer, klikt u met de rechtermuisknop op het bestand CMakeLists.txt en selecteert u Build. De uitvoerlocatie van de HelloWorld_RTApp_MT3620_Baremetal toepassing wordt weergegeven in het venster Uitvoer .

  6. Selecteer in het menu Opstartitemselecteren de optie HelloWorld_RTApp_MT3620_Baremetal (RTCore).

  7. Druk op F5 om de toepassing te implementeren.

  8. De verbonden terminalemulator moet uitvoer van het HelloWorld_RTApp_MT3620_Baremetal-programma weergeven. Het programma verzendt de volgende woorden met intervallen van één seconde:

    Tick

    Tock

  9. Gebruik het foutopsporingsprogramma om onderbrekingspunten in te stellen, variabelen te inspecteren en andere foutopsporingstaken uit te voeren.

De HelloWorld RTApp-toepassing bouwen en uitvoeren met Visual Studio Code

  1. Open in Visual Studio Code de map HelloWorld_RTApp_MT3620_BareMetal in de map waarin u het gedownloade Azure_Sphere___Hello_World.zip-bestand hebt uitgepakt. Als u wordt gevraagd een kit te selecteren, kiest u Geen kit gebruiken.

  2. Als u geen MT3620 RDB-hardware gebruikt, werkt u het app_manifest.json-bestand en de voorbeeldcode bij om de juiste UART op te geven, bijvoorbeeld ISU1.

  3. Druk op F5 om het foutopsporingsprogramma te starten. Als het project nog niet eerder is gebouwd of als bestanden zijn gewijzigd en opnieuw moeten worden opgebouwd, wordt het project door Visual Studio Code gebouwd voordat de foutopsporing wordt gestart.

  4. In het uitvoervenster van Azure Sphere wordt het volgende weergegeven: 'Installatiekopieën implementeren...' gevolgd door de paden naar de SDK en compiler.

  5. De verbonden terminalemulator moet uitvoer van het HelloWorld_RTApp_MT3620_Baremetal-programma weergeven. Het programma verzendt de volgende woorden met intervallen van één seconde:

    Tick

    Tock

  6. Gebruik de foutopsporingsfuncties van Visual Studio Code om onderbrekingspunten in te stellen, variabelen te inspecteren en andere foutopsporingstaken uit te voeren.

Probleemoplossing

De toepassing kan worden uitgevoerd voordat OpenOCD verbinding maakt. Hierdoor kunnen onderbrekingspunten die vroeg in de code zijn ingesteld, worden gemist. Een eenvoudige tijdelijke oplossing hiervoor is het starten van de app uit te stellen totdat OpenOCD verbinding maakt.

  1. Voeg de volgende code in aan het begin van het toepassingsinvoerpunt RTCoreMain. Hierdoor wordt de toepassing in een lus ingevoerd en blijft deze in een while lus totdat de variabele f is ingesteld op true.

     volatile bool f = false;
     while (!f) {
        // empty.
     }
    
  2. Druk op F5 om de app te starten met foutopsporing (F5) en begin vervolgens met de uitvoering.

  3. Wijzig in het deelvenster Lokale foutopsporing de waarde van f van nul in één.

  4. Doorloop de code zoals u gewend bent.

Het voorbeeld bouwen

  1. Open een opdrachtregelinterface met behulp van PowerShell, Windows-opdrachtprompt of Linux-opdrachtshell. Navigeer naar de map van uw projectbuild.

  2. Voer CMake uit vanuit de map van uw projectbuild, bij de opdrachtprompt, met de volgende parameters:

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

      De vooraf ingestelde naam van de buildconfiguratie zoals gedefinieerd in CMakePresets.json.

    • --build <cmake-path>

      De binaire map die de CMake-cache bevat. Als u bijvoorbeeld CMake uitvoert op een Azure Sphere-voorbeeld, is cmake --build out/ARM-Debugde build-opdracht .

    • <source-path>

      Het pad van de map met de bronbestanden voor de voorbeeldtoepassing. In het voorbeeld is de opslagplaats azure Sphere-voorbeelden gedownload naar een map met de naam AzSphere.

      CMake-parameters worden gescheiden door spaties. Het regel vervolgteken (^ voor Windows-opdrachtregel, \ voor Linux-opdrachtregel of ' voor PowerShell) kan worden gebruikt voor leesbaarheid, maar is niet vereist.

    In de volgende voorbeelden ziet u de CMake-opdrachten voor een RTApp. Vervang, waar aangegeven, bestandspad> door <het installatiepad voor de GNU Arm Embedded Toolchain op uw systeem.

    Windows-opdrachtprompt

    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. Voer Ninja uit om de toepassing te bouwen en het installatiekopieënpakketbestand te maken:

    ninja -C out/ARM-Debug
    

    Ninja plaatst de resulterende toepassings- en .imagepackage-bestanden in de opgegeven map.

    U kunt Ninja ook aanroepen via CMake met de volgende opdracht:

    cmake --build out/<binary-dir>
    

    Stel in <binary-dir> op de binaire map die de CMake-cache bevat. Als u bijvoorbeeld CMake uitvoert op een Azure Sphere-voorbeeld, is cmake --build out/ARM-Debugde build-opdracht .

Bij het oplossen van problemen, met name nadat u wijzigingen hebt aangebracht in uw CMake-opdrachten, verwijdert u de volledige build en probeert u het opnieuw.

Het voorbeeld uitvoeren

  1. Verwijder alle toepassingen die al op het apparaat zijn geïmplementeerd:

    az sphere device sideload delete
    
  2. Laad vanuit de projectmap bij de opdrachtprompt het installatiekopieënpakket dat Ninja heeft gemaakt:

    az sphere device sideload deploy --image-package <path-to-imagepackage>
    

    De toepassing wordt snel uitgevoerd nadat deze is geladen. Het volgende wordt weergegeven op de verbonden terminalemulator:

    Tick
    
    Tock
    
    Tick
    .
    .
    .
    
  3. Haal de onderdeel-id voor de installatiekopieën op:

    az sphere image-package show --image-package <path-to-imagepackage>
    

    De opdracht retourneert alle metagegevens voor het installatiekopieënpakket. De onderdeel-id voor de toepassing wordt weergegeven in de sectie Identiteit voor het type toepassingsafbeelding. Bijvoorbeeld:

    ...
      "Identity": {
        "ComponentId": "<component-id>",
        "ImageId": "<image-id>",
        "ImageType": "Application"
      },
    ...
    

    U kunt de volgende opdrachten gebruiken om de toepassing te stoppen, te starten en de status van de toepassing op te halen:

    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>
    

Fouten opsporen in het voorbeeld

  1. Stop de toepassing als deze wordt uitgevoerd.

    az sphere device app stop --component-id <component id>
    
  2. Start de toepassing opnieuw voor foutopsporing.

    az sphere device app start --debug-mode true  --component-id <component id>
    

    Met deze opdracht wordt de kern geretourneerd waarop de toepassing wordt uitgevoerd.

    <component id>
    App state   : running
    Core        : Real-time 0
    
  3. Navigeer naar de map Openocd voor de sysroot waarmee de toepassing is gebouwd. De sysroots worden geïnstalleerd in de installatiemap van de Azure Sphere SDK. In Windows wordt de map bijvoorbeeld standaard geïnstalleerd op C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd en in Linux, op /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Voer uit openocd zoals in het volgende voorbeeld wordt weergegeven. In het voorbeeld wordt ervan uitgegaan dat de app wordt uitgevoerd op core 0. Als de app wordt uitgevoerd op core 1, vervangt u 'targets io0' door '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. Navigeer naar de map met het .out-bestand van de toepassing en start arm-none-eabi-gdb, dat deel uitmaakt van de GNU Arm Embedded Toolchain:

    Windows-opdrachtprompt

    "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. De OpenOCD-server biedt een GDB-serverinterface op :4444. Stel het doel voor foutopsporing in.

    target remote :4444

  7. U kunt nu gdb-opdrachten uitvoeren.

  8. De verbonden terminalemulator moet uitvoer van de toepassing weergeven.

Partner-apps gebruiken

Wanneer u een toepassing op het Azure Sphere-apparaat laadt, worden met de Azure Sphere-implementatiehulpprogramma's standaard alle bestaande toepassingen verwijderd. Om dit te voorkomen wanneer u toepassingen ontwikkelt die met elkaar communiceren, moet u de toepassingen markeren als partners. Wanneer u een van de toepassingen implementeert, worden de bijbehorende partners niet verwijderd. Zie Toepassingen markeren als partners voor meer informatie.

Volgende stappen