I punti di interruzione sono un ottimo modo per vedere come il compilatore viene eseguito sul tuo codice. Ora la mia domanda è: esiste la possibilità di utilizzare i punti di interruzione quando si esegue il debug del codice?
I punti di interruzione sono un ottimo modo per vedere come il compilatore viene eseguito sul tuo codice. Ora la mia domanda è: esiste la possibilità di utilizzare i punti di interruzione quando si esegue il debug del codice?
Risposte:
Come indicato nella risposta di Majenko, l'IDE di Arduino non fornisce un meccanismo di breakpoint ma Atmel Studio supporta i breakpoint . [*]
Tuttavia, se si dispone di un interruttore e un LED, è possibile tenere traccia dell'avanzamento del programma in modo da offrire alcuni dei vantaggi dei punti di interruzione. Aggiungete una subroutine, diciamo BPReport()
, che tramite l'uscita seriale o un LCD riporta valori di variabili critiche, quindi accende il LED e attende fino a quando l'interruttore non viene premuto e rilasciato, con debounce. Chiama la tua BPReport()
routine ovunque tu voglia un breakpoint incondizionato. Per i punti di interruzione condizionali, puoi avere una routine BPReportIf(cond)
che chiama BPReport()
se cond
è vera. Se non si desidera eseguire l'output tramite seriale, è possibile utilizzare più LED o un LCD e utilizzare diversi switch se si desidera un controllo di interruzione esterno (ad esempio, cond
potrebbe essere un test di uno degli switch extra).
[*] Alcuni debugger hardware modificano il codice scaricato ogni volta che vengono aggiunti, modificati o rimossi i punti di interruzione. Tale utilizzo consumerà la memoria flash più rapidamente rispetto al download occasionale. Se un chip è stato ampiamente utilizzato per tale debug, non utilizzare quel chip in un sistema di produzione.
Sebbene Majenko la sua risposta sia corretta, ci sono alcune altre opzioni.
Per quanto riguarda il debug hardware reale, come affermato da Majenko, direi:
Un'altra opzione di debug di una categoria completamente diversa consiste nell'organizzare il codice in modo tale che la logica decisionale (indipendente dall'hardware) e l'azione (dipendente dall'hardware) siano completamente separate.
Quindi compila il tuo schizzo come programma locale ed esegui il debug della "logica decisionale" sul tuo computer locale. Questo metodo non consente il "debug dell'hardware". Questo metodo consente anche il test dell'unità.
Nota che il tuo computer locale è probabilmente un 32 o 64 bitter e la maggior parte di Arduino ha 8 bitter, il che comporterà differenze nei tipi di dati che sono un ulteriore punto di attenzione quando si utilizza questo metodo.
La libreria Arduino-Debug fornisce un semplice debugger sul target per gli schizzi di Arduino. Il comando di debug viene aggiunto direttamente allo schizzo. Una shell dei comandi di debugger viene avviata su punti di interruzione e asserzioni.
La schermata sopra mostra lo schizzo di esempio eseguito su un Arduino Mega con monitor di output seriale utilizzato dall'applicazione e Serial1 utilizzato per la shell di debugger.
Comandi di debug dello schizzo
Comandi Shell di debug
Tutti i comandi della shell di debug possono essere abbreviati in comandi a carattere singolo. Si prega di consultare il README per ulteriori dettagli; dettagli di installazione, esempio di schizzo e benchmarking.