Delen via


Aanbevelingen voor het ontwikkelen van productieklare toepassingen

Bij het ontwikkelen van toepassingen voor uw Azure Sphere-apparaten moet u rekening houden met verschillende dingen om ervoor te zorgen dat uw toepassingen gereed zijn voor productie. Dit onderwerp bevat een controlelijst met best practices om te controleren of uw toepassingen klaar zijn voor test- of productie-implementatie. Als u bevestigt dat deze items zijn voltooid, kunt u het aantal problemen dat u ondervindt in de productie verminderen en het gemakkelijker maken om eventuele problemen die zich voordoen, te diagnosticeren.

Wanneer u een Azure Sphere-toepassing ontwikkelt, moet u beslissen of deze wordt uitgevoerd op hoog niveau (HL), de realtime kern (RT) of een hybride van beide. Toepassingen op hoog niveau worden in containers uitgevoerd in het Azure Sphere-besturingssysteem en realtime compatibele toepassingen (RTApps) worden uitgevoerd op bare metal of met een realtime besturingssysteem (RTOS) op de realtime kernen.

De aanbevelingen die hier worden gegeven, zijn bedoeld om u te helpen de kwaliteit en productiviteit van uw productieklare toepassingen te verhogen. De onderstaande controlelijst bevat een beknopte lijst met ontwerpsuggesties voor beide toepassingstypen, evenals aanbevolen basisprincipes voor codering en overwegingen bij het ontwerpen van oplossingen, inclusief koppelingen naar onderwerpen waarin elk punt gedetailleerder wordt besproken. Deze suggesties zijn afgeleid van onze partnerschappen met klanten, waaronder veldanalyse, codebeoordelingen en ondersteuning van interacties van in productie geïmplementeerde toepassingen in praktijkoplossingen en apparaatontwerpen.

Basisprincipes van coderen

  • Veelvoorkomende problemen

    • Zorg ervoor dat toepassingen die gereed zijn voor productie geen bètahulpprogrammasets gebruiken.
    • Gebruik de nieuwste hulpprogramma's voor CMake en Azure Sphere om de API-set te gebruiken.
    • Voor volledige optimalisatie van code en grootte kunt u overwegen om de uiteindelijke installatiekopieënpakketten te compileren in de releasemodus voordat u een toepassing implementeert in productie. Zorg ervoor dat u het Release-pakket bouwt en test voordat u het implementeert.
    • Gebruik een zero-warnings-beleid bij het uitvoeren van een volledige build om ervoor te zorgen dat compilerwaarschuwingen opzettelijk worden aangepakt.
    • Stel een consistente CI/CD-pijplijn in en gebruik een juiste vertakkingsstrategie.
  • Geheugengerelateerde problemen

    • Definieer indien mogelijk alle algemene vaste tekenreeksen als global const char* in plaats van harde codering, zodat ze kunnen worden gebruikt als gegevenspointers.
    • Als globale gegevensstructuren redelijk klein zijn, kunt u overwegen om vaste lengten toe te staan aan de matrixleden in plaats van aanwijzers te gebruiken voor dynamisch toegewezen geheugen.
    • Vermijd waar mogelijk dynamische geheugentoewijzing.
    • Voor functies die een aanwijzer naar een geheugenbuffer retourneren, kunt u overwegen om te converteren naar functies die een bufferpointer waarnaar wordt verwezen en de bijbehorende grootte naar de aanroepers retourneren.
  • Dynamische containers en buffers

    • Overweeg het gebruik van een methode voor incrementele toewijzing voor containers, zoals lijsten en vectoren.

Ontwerpsuggesties voor kerntoepassingen op hoog niveau

  • Algemene basisprincipes

    • Initialiseer en vernietig alle handlers op de juiste manier bij het afsluiten of bij een fout.
    • Gebruik altijd afsluitcodes.
    • Als een toepassing detecteert dat deze zich in een niet-herstelbare status bevindt en opnieuw moet worden opgestart, moet u ervoor zorgen dat deze altijd wordt verwerkt als een 'schone' toepassing, in plaats van een impassestatus te riskeren.
    • Foutafhandeling en logboekregistratie implementeren. Zie Foutafhandeling en logboekregistratie voor meer informatie.
    • Gebruik een systeemtimer als waakhond om te detecteren of de toepassing zich in een onherstelbare status bevindt of vaststaat (zoals impasse, uitgeput geheugen of connectiviteit die niet wordt hersteld via de geïmplementeerde logica), en zorg voor een goed herstel. Zie Een systeemtimer gebruiken als watchdog voor meer informatie.
  • Gelijktijdigheid verwerken

    • Gebruik EventLoop waar mogelijk.
    • Zoek naar efficiëntie bij gelijktijdige taken.
    • Evalueer wanneer threads en het bereik alleen voor specifieke taken moeten worden gebruikt. Zie Gelijktijdigheid verwerken voor meer informatie over het gebruik van threads.
  • Connectiviteitscontrole

    • Implementeer een juiste statuscontroletaak voor de connectiviteit op basis van een robuuste statuscomputer die regelmatig de status van de internetverbinding controleert.
    • Voor oplossingen waarvoor energiebeheer is vereist, schakelt u de Azure Sphere-chip uit na het verzenden van gegevens, houdt u de totale up-time bij en stelt u een afsluittimer in.
    • cURL heeft onlangs het callback-gedrag en de best practices bijgewerkt. Hoewel Azure Sphere zich heeft ingespannen om ervoor te zorgen dat oudere versies van cURL-gedrag blijven werken zoals verwacht, wordt het aanbevolen om de meest recente richtlijnen voor beveiliging en betrouwbaarheid te volgen bij het gebruik van curl_multi, omdat het gebruik van recursieve callbacks kan leiden tot onverwachte crashes, connectiviteitsproblemen en potentiële beveiligingsproblemen. Als een TimerCallback wordt geactiveerd met een time-out van 0 ms, behandelt u deze als een time-out van 1 ms om recursieve callbacks te voorkomen. Zorg ervoor dat u curl_multi_socket_action ook minstens één keer expliciet aanroept na aanroepen naar curl_multi_add_handle.
  • Geheugenbeheer en -gebruik

    • Houd het geheugengebruik van de toepassing bij met de Azure Sphere-API's van het besturingssysteem en zorg ervoor dat toepassingen op de juiste manier reageren op onverwacht geheugengebruik.

Ontwerpsuggesties voor realtime kerntoepassingen

  • Schakel de MT3620-watchdogtimer in om een impasse te detecteren en de juiste herstellogica te implementeren.
  • Implementeer communicatie tussen kernen voor hybride HL-core- en RT-core-toepassingen.

Overwegingen voor oplossingsontwerp

  • Connectiviteitsvereisten en probleemoplossing

    • Zorg ervoor dat aan alle netwerkvereisten wordt voldaan. Zie Connectiviteitsvereisten en probleemoplossing voor meer informatie.
    • Los verbindingsproblemen op met behulp van OSNetworkRequirementCheck-HLApp en OSNetworkRequirementChecker-PC.

Zie Een IoT-oplossing verplaatsen van test naar productie voor aanvullende items waar u rekening mee moet houden bij het verplaatsen van een IoT-oplossing naar een productieomgeving.