Una guida professionale agli strumenti e alle tecniche di debug per i dispositivi IoT
Contributo di Editori nordamericani di DigiKey
2021-03-23
Lo sviluppo di un sistema embedded, dove il software e l'hardware lavorano in sinergia, è ora molto complesso e impegnativo, anche per quello che può sembrare il più semplice dei dispositivi Internet delle cose (IoT). Tanto che, quando qualcosa va storto - e inevitabilmente succede - i tempi di debug di solito non sono di poche ore, ma addirittura di settimane o mesi. Questi ritardi aggiungono costi di sviluppo, impediscono a un prodotto di arrivare sul mercato in tempo, ritardano i programmi di produzione e ledono le supply chain e i piani aziendali.
Il modo migliore per ridurre il tempo speso nel debug e per mantenere un progetto in carreggiata è quello di usare una combinazione di strumenti di debug hardware e software per capire come stia funzionando un sistema e dove siano i problemi. Sia per i professionisti che per gli hobbisti, avere gli strumenti giusti aiuta enormemente a completare il lavoro in modo rapido e corretto.
Questo articolo discuterà gli strumenti di sviluppo e il software utili per eseguire il debug e analizzare le prestazioni di un dispositivo IoT. Utilizzerà una scheda di sviluppo di STMicroelectronics come dispositivo IoT di esempio e strumenti e software di SEGGER Microcontroller Systems per capire come eseguire il debug del sistema. Verranno anche discussi alcuni suggerimenti su come ridurre al minimo il tempo di debug e realizzare un progetto IoT nei tempi previsti.
Il tipico dispositivo IoT per il debug
I dispositivi IoT sono ormai prevalenti in quasi tutti i settori, dalla casa intelligente al controllo del monitoraggio industriale. Nonostante la varietà di applicazioni, un dispositivo IoT avrà diversi componenti tipici, tra cui:
- Un microprocessore
- Una radio per la connettività
- Sensori
Uno sviluppatore non avrà il tempo di sviluppare una scheda personalizzata per esplorare le tecniche di debug o per testare frammenti del codice applicativo, perché tutto ciò richiede troppo tempo. Invece, è più saggio lavorare su una scheda di sviluppo a basso costo come il kit Discovery per nodo IoT B-L4S5I-IOT01A di STMicroelectronics. Questa offre quasi tutto l'occorrente per un tipico dispositivo IoT (Figura 1).
Figura 1: Il kit Discovery per nodo IoT B-L4S5I-IOT01A di STMicroelectronics include tutti i componenti tipicamente necessari in un dispositivo IoT. (Immagine per gentile concessione di STMicroelectronics)
La scheda include STM32L4S5VIT6, un microcontroller Arm® Cortex®-M4 che funziona a 120 MHz. Questo è supportato da un massimo di 2 MB di flash e 640 kB di RAM. Importante per le finalità di questo articolo, la scheda include Wi-Fi e molti sensori che possono essere utilizzati per creare rapidamente il prototipo di un dispositivo di test IoT.
Strumenti hardware professionali per il debug
Quasi tutte le schede di sviluppo sono dotate di un'interfaccia JTAG/SWD, in modo che gli sviluppatori abbiano già a disposizione un programmatore. In questo modo, possono lavorare con la scheda di sviluppo non appena la ricevono. Se è una cosa ideale per scopi di marketing, non lo è per l'ingegneria reale: i debugger su scheda spesso sono versioni molto ridimensionate e limitate, con un basso numero di punti di interruzione e e bassa velocità baud dell'interfaccia. Per i non addetti ai lavori, queste limitazioni possono non sembrare un grosso problema, ma avere punti di interruzione illimitati evita di doverli costantemente abilitare e disabilitare e le alte velocità di trasmissione sono necessarie per il tracciamento delle applicazioni (vedere la sezione sugli strumenti software).
Sono disponibili diversi strumenti che possono fornire un'esperienza di debug professionale, ma gli strumenti sono solo metà della soluzione. Gli strumenti devono essere supportati da un buon software. Una serie di strumenti che si distingue sia da un punto di vista hardware che software è la serie SEGGER J-Link. Questa serie ha una versione di debugger per quasi ogni tipo di sviluppatore, da studenti e hobbisti a professionisti hardcore.
Sono due i modelli che l'esperienza ha dimostrato essere i più utili per lo sviluppatore generale: J-Link Base e J-Link Ultra+ (Figura 2). Dal punto di vista del fattore di forma, le due unità sono identiche, ma J-Link Ultra+ fornisce allo sviluppatore una maggiore velocità di download alla RAM (3 Mbps contro 1 Mbps) e una maggiore velocità dell'interfaccia SWD (100 MHz contro 30 MHz). Le velocità maggiori fanno la differenza quando uno sviluppatore vuole tracciare la sua applicazione per ottenere informazioni sulle prestazioni, il comportamento dell'RTOS e il debug del sistema.
Figura 2: SEGGER J-Link Ultra+ fornisce agli sviluppatori un'esperienza di debugger migliorata attraverso un'interfaccia target a 50 MHz. (Immagine per gentile concessione di SEGGER Microcontroller Systems)
J-Link e la scheda di sviluppo B-L4S5I-IOT01A possono essere collegati attraverso un cavo TC2050-IC-NL e la molletta di ritegno TC2050-CLIP-3PACK di Tag-Connect. Questi permettono di collegare un debugger alla scheda di sviluppo mediante la piazzola (Figura 3). Potrebbe essere necessario adattare il connettore a 20 pin J-Link al connettore a 10 pin del cavo TC-2050. Un'opzione è l'adattatore ad ago a 10 pin 8.06.04 J-Link.
Figura 3: Sulla scheda di sviluppo B-L4S5I-IOT01A, il cavo assemblato Tag-Connect può essere collegato attraverso un footprint ad aghi per la scheda CS (a destra). (Immagine per gentile concessione di STMicroelectronics)
Una volta che lo sviluppatore ha chiuso questo percorso sul lato hardware, può usare gli strumenti software per l'analisi e il debug dell'applicazione.
Strumenti software professionali per il debug
Alcuni strumenti software esistenti funzionano abbastanza bene con gli strumenti SEGGER J-Link, ma sorprendentemente non sono forniti da SEGGER. Di seguito daremo un'occhiata a diversi strumenti gratuiti e vedremo come possono essere usati per il debug software.
Il primo è J-Scope. J-Scope è uno strumento simile a un oscilloscopio che visualizza valori variabili nel tempo. Gli sviluppatori possono monitorare una singola variabile o diverse decine di variabili. Si noti, tuttavia, che più sono le variabili monitorate, meno sono i campioni che si possono acquisire prima che il buffer trabocchi e causi la perdita di dati.
Le variabili sono selezionate fornendo a J-Scope il file elf generato dal compilatore. Questo fornisce le posizioni di memoria da leggere, e lo sviluppatore può quindi impostare velocità di campionamento proprie e monitorare il cambiamento della variabile (o delle variabili) nel tempo. Un semplice esempio di una traccia a tre variabili è riportato nella Figura 4.
Figura 4: J-Scope può essere usato per monitorare le variabili attraverso J-Link durante l'esecuzione in tempo reale di un'applicazione. (Immagine per gentile concessione di SEGGER Microcontroller Systems)
Il secondo è Ozone. Ozone è un'interfaccia debugger e un analizzatore di prestazioni. Gli sviluppatori possono caricare il file elf nello strumento ed eseguire il debug a livello di sorgente. Possono impostare i punti di interruzione e aggiornare il codice. Una caratteristica particolarmente utile per gli sviluppatori è che possono anche eseguire il tracciamento delle istruzioni (se l'hardware lo supporta) e identificare le istruzioni del codice assembly e C che sono state eseguite. Ciò è particolarmente utile per verificare la copertura del codice dei test hardware-in-loop (HiL).
Ozone può anche aiutare gli sviluppatori ad analizzare le prestazioni del sistema (Figura 5) e a visualizzare le variabili nel tempo. Tutto questo fornisce capacità simili a J-Scope ma in modo più integrato. Può anche essere usato per monitorare il consumo energetico e sincronizzare tutti questi eventi in un unico posto.
Figura 5: Ozone può essere usato per tracciare le variabili attraverso J-Link mentre esegue un'applicazione in tempo reale, oltre alla copertura del codice e al debug consapevole dell'RTOS. (Immagine per gentile concessione di SEGGER Microcontroller Systems)
Il terzo è SystemView. SystemView permette agli sviluppatori di analizzare il comportamento di runtime di un sistema RTOS. La commutazione delle attività viene registrata in un buffer di traccia e poi segnalata a SystemView attraverso il debugger (Figura 5). SystemView quindi visualizza queste informazioni in un modo che permette allo sviluppatore di vedere i suoi interruttori di contesto e misurare le prestazioni del sistema. Questo è anche un ottimo modo per visualizzare un sistema e trovare bug e altri problemi.
Figura 6: SystemView fornisce un collegamento a un RTOS che permette agli sviluppatori di misurare le prestazioni delle attività e di visualizzare le operazioni di un RTOS. (Immagine per gentile concessione di SEGGER Microcontroller Systems)
Suggerimenti per il debug di un sistema embedded
Per il debug di un dispositivo IoT, gli sviluppatori devono avere gli strumenti giusti sia dal punto di vista dell'hardware che del software. Entrambi devono essere a posto se gli sviluppatori vogliono ridurre al minimo il tempo dedicato al debug. Per il debug, gli sviluppatori devono tenere a mente alcuni consigli, ad esempio:
- Utilizzate un debugger professionale che massimizzi la velocità di trasmissione dell'interfaccia. La quantità di dati utili ricavabile da un sistema dipenderà da quanto velocemente possano essere ricevuti questi dati. Le velocità inferiori comportano una sessione di debug più lunga.
- Impostate il software di debug all'inizio del ciclo di sviluppo. Non aspettate di avere un problema per impostare gli strumenti di debug.
- Usate strumenti di tracciamento fin dall'inizio dello sviluppo. Ciò vi permetterà di monitorare le prestazioni del sistema e di capire immediatamente come siano influenzate dai cambiamenti del software.
- Sfruttate il tracciamento delle istruzioni o il campionamento dei contatori di programma per capire la copertura del codice di sistema durante i test. Vi saranno bug nei rami condizionali e nel codice non testati.
- Sfruttate i protocolli di trasferimento veloce per ottenere dati off-chip come le librerie Real-time Transfer (RTT).
Seguendo questi consigli, gli sviluppatori risparmieranno parecchio tempo ed eviteranno grattacapi nello sviluppo di un dispositivo IoT.
Conclusione
Il software dei dispositivi IoT è diventato complesso, ma questo non significa che gli sviluppatori professionisti o hobbisti debbano sprecare molto tempo nel debug dei sistemi. L'uso di strumenti e software di sviluppo professionali può fornire agli sviluppatori gli strumenti di cui hanno bisogno non solo per il debug, ma anche per analizzare e migliorare le prestazioni di un sistema. L'investimento in questi strumenti consentirà agli utenti di ridurre drasticamente il tempo sprecato nel debug per creare progetti funzionanti e portarli sul mercato entro tempi ragionevoli.
Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.




