EOS

Arduino M0 Pro: debug con GDB e OpenOCD

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:

  1. Avviare un programma, specificando tutte le componenti che influiscono sul suo comportamento.
  2. Far sì che il programma utilizzato si interrompa rispettando le condizioni impostate.
  3. Esaminare i processi coinvolti nell'interruzione del programma.
  4. 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.

1_OpenOCD

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".

2_OpenOCD

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.

4_OpenOCD

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 PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici MAKER e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA, è semplice e sicuro.

Abbonati alle riviste di elettronica

3 Commenti

  1. Mario Mottula Mario Mottula1981 7 agosto 2015
  2. sdallo 27 ottobre 2015

Scrivi un commento

EOS