
Il Debugger è uno strumento per tracciare l'esecuzione del programma, con possibilità di esaminare e/o modificare le variabili passando per il codice passo dopo passo. In altre parole, permette di conoscere il motivo per cui un programma non si comporta come previsto; è uno strumento molto utile, soprattutto quando si ha a che fare con i programmi più complessi. Con l'avvento della M0 Pro è possibile effettuare il debug anche con Arduino; per svolgere questo compito esistono molti programmi, tra cui Eclipse o Atmel Studio. In questo articolo, invece, verrà mostrato come usare l'applicativo GDB per effettuare il debug, tramite la M0 Pro, di uno sketch realizzato col tradizionale ambiente di sviluppo di Arduino. Vi guiderò nell'affascinate debug a riga di comando, semplificando le operazioni con un tool realizzato con Processing e PGUI.
In un articolo precedente si è descritto come utilizzare Atmel Studio per effettuare il debug sulla M0 Pro; un ambiente di sviluppo con una buona interfaccia grafica per aiutare l'utente a svolgere il lavoro in modo intuitivo e veloce. Al contrario, GDB è un tool a linee di comando da utilizzare tramite il prompt di DOS, capace di effettuare il debug anche su uno sketch realizzato con l'IDE di Arduino.
Il GDB (Gnu Source-Level Debugger ) è un software open source, gira su molte piattaforme (sistemi Unix-like e Microsoft Windows) ed è capace di analizzare numerosi linguaggi di programmazione, tra cui Ada, C, C++ e Fortran. Con il GDB è possibile avviare quattro tipi di operazione:
- Avviare un programma, specificando tutte le componenti che influiscono sul suo comportamento.
- Far sì che il programma utilizzato si interrompa rispettando le condizioni impostate.
- Esaminare i processi coinvolti nell'interruzione del programma.
- Modificare gli elementi nel programma utilizzato, così da poter visionare i risultati delle eventuali correzioni a un dato bug.
In accoppiata al GDB verrà utilizzato anche OpenOCD (Open On-Chip Debugger), software che mira a fornire il debug in-system programming; ossia un tool che interfaccia l’hardware di debug, in questo caso il controller EDBG, al PC. OpenOCD consente anche di caricare il codice di un progetto nella memoria flash del microcontrollore ma questo lo si vedrà in un’altra occasione, questo articolo si concentrerà per lo più sul GDB.
Anche se entrambi i software sono implementati nell’Ide di Arduino, in tal proposito si consiglia l’installazione sul PC della versione 1.7.0 o superiore (reperibile sul sito Arduino.org), per OpenOCD bisogna scaricare una variante, realizzata da Freddie Chopin, dedicata all'utilizzo con Windows. Scompattare l'archivio e copiare l'intera cartella all'indirizzo:
C:\Program Files\Arduino\hardware\tools\
Programmazione
Connettere la M0 Pro al PC tramite la porta "usb programming", quella più vicina al connettore di alimentazione, che a sua volta è connessa direttamente al controller EDBG che gestisce il microcontrollore SAMD21G18A sia per la programmazione che per il debug.
Attendere che il sistema operativo riconosca la board, avviare l'IDE di Arduino e settare il tipo di scheda e porta di comunicazione dal menù "Strumenti".
Come sketch di prova utilizzeremo le seguenti istruzioni per fare lampeggiare il led sulla board:
/* Blink Led Maggio 2015 Sorrentino Ernesto */ #define LED_PIN 13 // Definisce la porta DGT 13 come LED_PIN #define LED_ON HIGH // Definisce il livello logico ALTO come LED_ON #define LED_OFF LOW // Definisce il livello logico BASSO come LED_OFF int long count; // Label per conteggio cicli void setup() { pinMode(LED_PIN, OUTPUT); // Imposta la porta DGT 13 come uscita } void loop() { count++; // Incrementa di uno il contatore a ogni lampeggio digitalWrite(LED_PIN, LED_ON); // Setta la porta DGT 13 a livello alto (led acceso) delay(250); // Attesa di 250ms digitalWrite(LED_PIN, LED_OFF); // Setta la porta DGT 13 a livello basso (led spento) delay(250); // Attesa di 250ms }
Le istruzioni sono simili a quelle del programma "blink" tra gli esempi di Arduino ma con in aggiunta la variabile "count" per memorizzare il numero dei lampeggi del led. Salvare il progetto col nome "Blink" in un percorso a vostra scelta. Compilare lo sketch e programmare la scheda premendo i tasti “Ctrl + U”. Dall'output dettagliato individuare l'indirizzo di destinazione del file ".elf" appena creato; file (Executable and Linkable Format) contenente informazioni per il debug relativo allo sketch.
Copiare "Blink.cpp.elf" nella root di "c:\"; questo passaggio non è obbligatorio ma facilita il comando per caricarlo nel GDB.
NOTA: Il file ".elf" è associato allo sketch in uso, per tanto ogni qualvolta che si modifica il programma si genera un nuovo file".elf", che dovrà essere sostituito al precedente.
Avvio OpenOCD e GDB
Per avviare e gestire il programma bisogna utilizzare il prompt di DOS, reperibile all'indirizzo:
c:\Windows\system32\cmd.exe
Dalla directory "User" spostarsi nella cartella d'installazione dell'IDE di Arduino e digitare il comando:
/hardware/tools/OpenOCD-0.9.0/bin/openocd -s hardware/tools/OpenOCD-0.9.0/scripts/ -f hardware/arduino/samd/variants/arduino_zero/openocd_scripts/arduino_zero.cfg
L'argomento "-s" definisce la cartella con i file di configurazione di OpenOCD mentre "-f" carica il file di configurazione della Mo Pro. Inviati i comandi si stabilirà una connessione, tramite il servizio telnet, tra le porte 4444 (server telnet) e 3333 (localhost). Ottenendo il seguente risultato: [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 1691 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Ciao Ernesto e grazie per questo nuovo articolo.
Il debug in questi termini non la avevo mai considerato, anche se sembra un pò indaginoso e forse poco intuitivo per progetti di media ed alta complessità.
In questi giorni lo proverò e ti farò sapere con più precisione come sarà questa nuova esperienza.
A dirla tutta essendo abituato alle schede di sviluppo della microchip ed ai loro debbugger, mi viene da dire che per Arduino la strada è ancora lunga, a meno che non si usi il debugger di Atmel Studio con ASF… Io sto tentando quest’ultima strada che mi sembra quella più completa ed intuitiva anche se la stesura del codice è alquanto complessa, ma le guide a disposizione aiutano parecchio.
Visual Studio è stata una mezza delusione, inquanto non fa il lavoro di un vero debugger, almeno per ora!
Grazie ancora per le tue guide chiare ed esaustive.. ti farò sapere
Mario
Grazie Ernesto per questo interessante articolo, ho ricevuto da poco il graditissimo omaggio M0-Pro dallo staff di EOS e rinnovo a loro i miei più vivi complimenti per il loro impegno.
Dopo qualche difficoltà iniziale visto che è la prima volta che ho a che fare con una scheda Arduino sono riuscito con successo a replicare quanto descritto nell’articolo con le applicazioni OpenOCD e GDB, ma sono andato oltre…
Usando l’applicazione standalone di Eclipse per il debug sono riuscito ad ottenere quallo che si vede nello screenshot allegato, ho dovuto lottare parecchio nell’impostare e tentare di comprendere le miriadi di configurazioni disponibili e soprattutto adattare i colori per le mie gravi difficoltà visive, gli sfondi luminosi purtroppo mi rendono _molto_ difficoltosa la lettura.
https://www.dropbox.com/s/xgn1k1z3y1i85xn/CDT.png?dl=0
Non è la prima volta che sviluppo su microcontrollori, ho già lavorato con i PIC in basic, ‘C’ e ASM oltre a giocare con le CPLD MAX3000 e qualche breve esperienza con gli AVR.
Saluti e Buon lavoro a tutti, Stefano
Ottimo lavoro 😉