Raccomandazioni per lo sviluppo di applicazioni pronte per la produzione
Importante
Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).
Man mano che si sviluppano applicazioni per i dispositivi Azure Sphere, è necessario considerare diversi aspetti per assicurarsi che le applicazioni siano pronte per la produzione. Questo argomento include un elenco di controllo delle procedure consigliate per verificare che le applicazioni siano pronte per la distribuzione pilota o di produzione. La conferma del completamento di questi elementi può ridurre il numero di problemi riscontrati nell'ambiente di produzione e semplificare la diagnosi di eventuali problemi che si verificano.
Quando si sviluppa un'applicazione Azure Sphere, decidere se verrà eseguita in HL (High-Level), il core RT (Real-Time) o un ibrido di entrambi. Le applicazioni di alto livello vengono eseguite in contenitori nel sistema operativo Azure Sphere e le applicazioni con funzionalità in tempo reale (RTApps) vengono eseguite in bare metal o con un sistema operativo in tempo reale (RTOS) nei core in tempo reale.
Le raccomandazioni fornite in questo articolo consentono di aumentare la qualità e la produttività nelle applicazioni pronte per la produzione. L'elenco di controllo riportato di seguito fornisce un elenco conciso di suggerimenti di progettazione per entrambi i tipi di applicazione, nonché le considerazioni consigliate sulla codifica e la progettazione delle soluzioni, inclusi i collegamenti ad argomenti che illustrano in modo più dettagliato ogni punto. Questi suggerimenti derivano dalle nostre partnership con i clienti, tra cui l'analisi sul campo, le revisioni del codice e supportano le interazioni delle applicazioni distribuite in produzione in soluzioni e progetti di dispositivi reali.
Nozioni fondamentali sulla codifica
Problemi comuni
- Assicurarsi che le applicazioni pronte per la produzione non usino set di strumenti beta.
- Quando la destinazione è il set di API, usare gli strumenti CMake e Azure Sphere più recenti.
- Per garantire l'ottimizzazione e le dimensioni complete del codice, è consigliabile compilare i pacchetti di immagini finali in modalità release prima di distribuire un'applicazione nell'ambiente di produzione. Assicurarsi di compilare e testare il pacchetto di versione prima di distribuirlo.
- Usare un criterio zero-warnings quando si esegue una compilazione completa per garantire che gli avvisi del compilatore vengano risolti intenzionalmente.
- Configurare una pipeline CI/CD coerente e usare una strategia di diramazione appropriata.
Problemi relativi alla memoria
- Quando possibile, definire tutte le stringhe fisse comuni come
global const char*
anziché hardcoded, in modo che possano essere usate come puntatori dati. - Se le strutture di dati globali sono ragionevolmente ridotte, è consigliabile assegnare lunghezze fisse ai membri della matrice anziché usare puntatori alla memoria allocata in modo dinamico.
- Evitare l'allocazione dinamica della memoria quando possibile.
- Per le funzioni che restituiscono un puntatore a un buffer di memoria, prendere in considerazione la conversione in funzioni che restituiscono un puntatore del buffer a cui si fa riferimento e le relative dimensioni ai chiamanti.
- Quando possibile, definire tutte le stringhe fisse comuni come
Contenitori dinamici e buffer
- Prendere in considerazione l'uso di un approccio di allocazione incrementale per contenitori come elenchi e vettori.
Suggerimenti di progettazione di applicazioni principali di alto livello
Nozioni fondamentali generali
- Inizializzare ed eliminare correttamente tutti i gestori all'uscita o all'errore.
- Usare sempre i codici di uscita.
- Se un'applicazione rileva che si trova in uno stato irreversibile e richiede un riavvio, assicurarsi che venga sempre gestita come uscita da un'applicazione "pulita", anziché rischiare uno stato di deadlock.
- Implementare la gestione e la registrazione degli errori. Per altre informazioni, vedere Gestione e registrazione degli errori.
- Usare un timer di sistema come watchdog per rilevare se l'applicazione si trova in uno stato irreversibile o in stallo (ad esempio deadlock, memoria esaurita o connettività che non viene ripristinata tramite la logica implementata) ed applicare il ripristino corretto. Per altre informazioni, vedere Usare un timer di sistema come watchdog.
Gestione della concorrenza
- Usare EventLoop ogni volta che è possibile.
- Cercare efficienza nelle attività simultanee.
- Valutare quando usare thread e ambito solo per attività specifiche. Per altre informazioni su quando usare i thread, vedere Gestione della concorrenza.
Monitoraggio connettività
- Implementare un'attività di controllo dell'integrità della connettività appropriata in base a una macchina a stati affidabile che controlla regolarmente lo stato della connessione Internet.
- Per le soluzioni che richiedono il risparmio energia, spegnere il chip Azure Sphere dopo l'invio dei dati, tenere traccia del tempo di attività totale e impostare un timer di arresto.
- cURL ha recentemente aggiornato il comportamento di callback e le migliori pratiche. Anche se Azure Sphere ha intrapreso sforzi per garantire che le versioni precedenti del comportamento cURL continuino a funzionare come previsto, è consigliabile seguire le indicazioni più recenti per la sicurezza e l'affidabilità quando si usano curl_multi, poiché l'uso di callback ricorsivi può causare arresti anomali imprevisti, interruzioni della connettività e potenziali vulnerabilità di sicurezza. Se un timerCallback viene attivato con un timeout di 0 ms, considerarlo come timeout di 1 ms per evitare callback ricorsivi. Assicurarsi di chiamare anche curl_multi_socket_action in modo esplicito almeno una volta che seguono le chiamate a curl_multi_add_handle.
Gestione e utilizzo della memoria
- Tenere traccia dell'utilizzo della memoria dell'applicazione con le API del sistema operativo Azure Sphere e assicurarsi che le applicazioni reagiscono in modo appropriato all'uso imprevisto della memoria.
Suggerimenti per la progettazione di applicazioni di base in tempo reale
- Abilitare il timer watchdog MT3620 per rilevare il deadlock e implementare la logica di ripristino appropriata.
- Implementare comunicazioni tra core per applicazioni HL-core ibride e RT-core.
Considerazioni sulla progettazione delle soluzioni
Requisiti di connettività e risoluzione dei problemi
- Verificare che tutti i prerequisiti di rete siano soddisfatti. Per altre informazioni, vedere Requisiti di connettività e risoluzione dei problemi.
- Risolvere i problemi di connettività usando
OSNetworkRequirementCheck-HLApp
eOSNetworkRequirementChecker-PC
.
Contenuti consigliati
Per altri elementi da considerare quando si sposta una soluzione IoT in un ambiente di produzione, vedere Spostare una soluzione IoT da test a produzione.