Dela via


Rekommendationer för utveckling av produktionsklara 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).

När du utvecklar program för dina Azure Sphere-enheter finns det flera saker att tänka på som säkerställer att dina program är produktionsklara. Det här avsnittet innehåller en checklista med metodtips för att kontrollera att dina program är redo för pilot- eller produktionsdistribution. Om du bekräftar att de här objekten är klara kan du minska antalet problem som uppstår i produktionen och göra det enklare att diagnostisera eventuella problem som uppstår.

När du utvecklar ett Azure Sphere-program bestämmer du om det ska köras på hög nivå (HL), realtidskärnan (RT) eller en hybrid av båda. Högnivåprogram körs i container med Azure Sphere OS och realtidskompatibla program (RTApps) körs utan operativsystem eller med ett realtidsoperativsystem (RTOS) i realtidskärnorna.

Rekommendationerna här är avsedda att hjälpa dig att öka kvaliteten och produktiviteten i dina produktionsklara program. Checklistan nedan innehåller en kortfattad lista över designförslag för båda programtyperna, samt rekommenderade grunderna för kodning och designöverväganden för lösningar, inklusive länkar till ämnen som diskuterar varje punkt mer detaljerat. Dessa förslag härleds från våra samarbeten med kunder, inklusive fältanalys, kodgranskningar och stödinteraktioner av produktionsdistribuerade program i verkliga lösningar och enhetsdesign.

Grunderna för kodning

  • Vanliga problem

    • Se till att produktionsklara program inte använder betaverktyg.
    • När du riktar in dig på API-uppsättningen använder du de senaste CMake- och Azure Sphere-verktygen.
    • För att säkerställa fullständig kodoptimering och storlek bör du överväga att kompilera de sista avbildningspaketen i versionsläge innan du distribuerar ett program till produktion. Se till att skapa och testa versionspaketet innan du distribuerar det.
    • Använd en nollvarningsprincip när du utför en fullständig version för att säkerställa att kompilatorvarningar avsiktligt åtgärdas.
    • Konfigurera en konsekvent CI/CD-pipeline och använd en lämplig förgreningsstrategi.
  • Minnesrelaterade problem

    • När det är möjligt definierar du alla vanliga fasta strängar som global const char* i stället för hårdkodning, så att de kan användas som datapekare.
    • Om de globala datastrukturerna är relativt små kan du överväga att ge matrismedlemmarna fasta längder i stället för att använda pekare till dynamiskt allokerat minne.
    • Undvik dynamisk minnesallokering när det är möjligt.
    • För funktioner som returnerar en pekare till en minnesbuffert bör du överväga att konvertera till funktioner som returnerar en refererad buffertpekare och dess relaterade storlek till anroparna.
  • Dynamiska containrar och buffertar

    • Överväg att använda en inkrementell allokeringsmetod för containrar som listor och vektorer.

Designförslag för kärnprogram på hög nivå

  • Allmänna grunder

    • Initiera och förstör alla hanterare korrekt vid avslut eller fel.
    • Använd alltid slutkoder.
    • Om ett program upptäcker att det är i ett oåterkalleligt tillstånd och kräver en omstart kontrollerar du att det alltid hanteras som ett "rent" programavslut i stället för att riskera ett dödläge.
    • Implementera felhantering och loggning. Mer information finns i Felhantering och loggning.
    • Använd en systemtimer som en vakthund för att identifiera om programmet är i ett oåterkalleligt tillstånd eller ett stopp (till exempel dödläge, uttömt minne eller anslutning som inte återställs genom den implementerade logiken) och åstadkomma korrekt återställning. Mer information finns i Använda en systemtimer som en vakthund.
  • Hantera samtidighet

    • Använd EventLoop när det är möjligt.
    • Leta efter effektivitet för samtidiga uppgifter.
    • Utvärdera när du endast ska använda trådar och omfång för specifika uppgifter. Mer information om när du ska använda trådar finns i Hantera samtidighet.
  • Anslutningsövervakning

    • Implementera en korrekt hälsokontroll av anslutningen baserat på en robust tillståndsdator som regelbundet kontrollerar status för Internetanslutningen.
    • För lösningar som kräver energisparfunktioner kan du stänga av Azure Sphere-chipet efter att ha skickat data, spåra den totala drifttiden och ange en avstängningstimer.
    • cURL har nyligen uppdaterat återanropsbeteende och bästa praxis. Även om Azure Sphere har vidtagit åtgärder för att se till att äldre versioner av cURL-beteendet fortsätter att fungera som förväntat rekommenderar vi att du följer den senaste vägledningen för säkerhet och tillförlitlighet när du använder curl_multi, eftersom användningen av rekursiva motringningar kan leda till oväntade krascher, avbrott i anslutningen och potentiella säkerhetsrisker. Om en TimerCallback utlöses med en timeout på 0 ms behandlar du den som en timeout på 1 ms för att undvika rekursiva återanrop. Var noga med att också anropa curl_multi_socket_action explicit minst en gång efter anrop till curl_multi_add_handle.
  • Minneshantering och minnesanvändning

    • Spåra programminnesanvändningen med Api:erna för Azure Sphere OS och se till att programmen reagerar korrekt på oväntad minnesanvändning.

Designförslag för kärnprogram i realtid

  • Aktivera timern för MT3620-vakthunden för att identifiera dödläge och implementera korrekt återställningslogik.
  • Implementera kommunikation mellan kärnor för hybridprogram med HL-kärnor och RT-kärnor.

Designöverväganden för lösningar

  • Anslutningskrav och felsökning

    • Se till att alla nätverkskrav uppfylls. Mer information finns i Anslutningskrav och felsökning.
    • Felsöka anslutningsproblem med hjälp OSNetworkRequirementCheck-HLApp av och OSNetworkRequirementChecker-PC.

Ytterligare objekt att tänka på när du flyttar en IoT-lösning till en produktionsmiljö finns i Flytta en IoT-lösning från test till produktion.