Dela via


Hämta felsökningsresultat för Azure Sphere-enhet

När du utvecklar en IoT-lösning behöver du ofta ha åtkomst till felsökningsresultat från enheter. Detta kan uppnås genom en felsökningsanslutning till Visual Studio/Kod (men kan också uppnås från kommandoraden), men du kan också behöva visa felsökningsresultat för enheter som inte är anslutna till Visual Studio/Kod. Sådana enheter kan köra långsiktiga tester eller distribueras till produktion. Det finns flera alternativ för att få åtkomst till felsökningsdata:

  • Hämta felsökningsresultat från en enhet som är ansluten till en utvecklingsdator
  • Få felsökningsresultat för en enhet som inte är ansluten till en utvecklingsdator
  • Loggning till extern lagring
  • Logga in på Azure

Hämta felsökningsresultat från en enhet som är ansluten till en utvecklingsdator

Problem: Hur får du felsökningsresultat när du felsöker med Visual Studio/Visuell kod?

Alternativ:

  • Program på hög nivå

    Ett azure sphere-program på hög nivå kan använda Log_Debug-API :t för att skicka felsökningsresultat med formatering av printf-format till en bifogad dator vid felsökning. Det här utdata kan visas med felsökningsfönstret för Visual Studio - eller Visual Studio-kod , eller från kommandoraden.

    Du kanske vill konfigurera felsökningsflaggor för utförlighet i programmet och använda CMake-kompileringsdefinitioner för att styra hur mycket felsökningsresultat som visas när programmet körs. I den CMakeLists.txt filen kan du skapa en kompileringstidsdefinition:

    add_compile_definitions(DEBUG_FLAG)

    I programkoden på hög nivå kan du sedan öka eller minska mängden felsökningsresultat som visas i programmet med hjälp #ifdefav , till exempel:

    #ifdef DEBUG_FLAG
        Log_Debug("My Message\n");
    #endif
  • Program som kan användas i realtid

    Ett azure sphere-kompatibelt program (som körs på en av M4-kärnorna) kan skriva felsöknings-/logginformation till en dedikerad UART med endast M4-överföring. För detta krävs en USB/seriell adapter, till exempel en FTDI-vän, och en terminalemulator.

    Azure Sphere-Hello World-exemplet visar hur du skriver ut till M4-felsöknings-UART.

    Det finns även exempelprogram från CodeThink och MediaTek:

    Felsökningsflagga kompileringstidsdefinitioner kan också användas i M4-program (real-time capable).

  • Använda interkärniga kommunikationer för att skicka tillstånd från ett program som kan användas i realtid till ett program på hög nivå

    Om du skapar ett system som kombinerar ett kompatibelt program på hög nivå och i realtid kanske du vill använda högnivåprogrammet för att logga systemtillstånd för båda programmen. Inter-core-kommunikation kan användas för detta – Azure Sphere Inter-core Communication-exemplet implementerar ett enkelt gränssnitt för att skicka ett meddelande mellan ett program som kan användas på hög nivå och i realtid.

    Den här Azure Sphere-inlärningsmodulen visar hur du använder Azure Sphere och Azure RTOS, i kombination med en inter-core meddelandemodell för att överföra anpassade meddelanden mellan kärnorna.

Få felsökningsresultat för en enhet som inte är ansluten till en utvecklingsdator

Problem: Hur loggar du utdata när enheten inte är ansluten till en utvecklingsdator?

Alternativ:

  • Skicka felsökningsresultat över nätverket eller en UART

    Det är ganska enkelt att få felsökningslogginformation när en enhet är ansluten till en utvecklingsdator. Men du kanske också vill samla in felsöknings-/logginformation när en enhet inte är ansluten till en dator. Du kan till exempel ha en uppsättning enheter som kör långsiktiga tester.

    Om dina enheter är anslutna till ett nätverk kanske du vill skicka felsökningsresultatet via nätverket till ett program som kan samla in och analysera informationen. Det här Azure Sphere Gallery-programmet visar hur du åsidosätter standardbeteendet för Log_Debug för att skicka och ta emot utdata över ett UDP-uttag.

    Observera att den mekanism som används för att åsidosätta standardprogram med hög fasning Log_Debug beteende också kan användas för att skicka felsökningslogginformation till andra platser, till exempel för att mata ut data på någon av Azure Sphere UARTs. Du kan använda det här UART-exemplet som en referens för att kombinera med programmet UDPDebugLog Gallery för att logga dina meddelanden till en UART.

  • Skicka felsökningsresultat till Azure IoT Hub/Azure IoT Central

    Felsökning av utdata kan vara användbart för att diagnostisera problem när de uppstår, men det kan också vara användbart att lagra telemetri-/logginformation från en enhet för efterbearbetning.

    Genom att konfigurera en instans av Azure IoT Hub eller Azure IoT Central får du en slutpunkt för att skicka enhetstelemetridata som kan användas som en del av din affärslogik. Du kan också skicka information om enhetens tillstånd/logg som kan behandlas separat från telemetri-/affärsdata.

    • Azure IoT Hub

      Din Azure IoT Hub instans kan konfigureras för att skicka data till en Azure-databas för lagring/analys, du kanske också vill filtrera meddelandena, vilket kan uppnås via EventHub och en Azure-funktion.

      För Azure IoT Hub kan du skicka data till en Azure-funktion som sedan kan bearbeta meddelandena. I den Azure IoT Hub utlösaren för Azure Functions artikel förklaras hur du länkar en Azure-funktion till en Azure IoT Hub instans.

    • Azure IoT Central

      Azure IoT Central innehåller möjligheten att kontinuerligt exportera data till olika slutpunkter, inklusive:

      • Azure Event Hubs
      • Azure Service Bus kö
      • Azure Service Bus ämne
      • Azure Blob Storage
      • Webhook

      WebHook är en REST API-slutpunkt som du skapar, det kan vara en Azure-funktion.

    Observera att du kanske vill filtrera meddelanden i din Azure-funktion baserat på det enhets-ID som skickar data, du kan hämta enhets-ID:et med följande kod i Azure-funktionen:

    public static async Task Run(EventData message, ILogger log)
    {
        var deviceId=message.SystemProperties["iothub-connection-device-id"];

        // Code to filter the messages goes here...
    }

Azure IoT Hub och Azure IoT Central stöder Enhetstvillingar, som innehåller önskat tillstånd (anges i programmet IoT Hub/central) och rapporterat tillstånd (tillstånd från enheten). Du kan använda Azure IoT Hub/Central Device Twin för att ange ett önskat tillstånd för utförlighet av loggdata (öka/minska loggningsfrekvensen eller mängden loggningsdata). Azure IoT Sample visar hur du hanterar enhetstvillingsändringarDesired State.

Loggningsdata till lagring

Azure Sphere har stöd för upp till 64 KB av anpassningsbar lagring för ett program på hög nivå. Detta kan användas för att bevara inställningar, programtillstånd eller andra data, programutvecklare ansvarar för serialisering/avserialisering av data till anpassningsbar lagring – Azure Sphere Gallery innehåller ett projekt som visar hur du använder ett nyckel-/värdepar (ordlista) för att skriva/läsa tillstånd till mutabel lagring (upp till 64 KB beroende på hur programmanifestet konfigureras).

Du kanske vill skriva mer än 64 KB logg-/tillståndsdata till någon form av extern lagring, detta kan vara användbart för enheter som har intermittent anslutning eller behöver lagra/hämta mer än 64 KB data.

Ett alternativ är att lägga till extern lagring, kanske använda SPI Flash för att lagra data - det här projektet använder SPI Flash för att lagra en luftbaserad uppdatering för en nedströms enhet och kan ändras för att stödja loggningstelemetri/tillståndsdata från ett Azure Sphere-program.