
Il debugging consente di controllare il valore delle variabili in vari punti del programma e di controllare che le routine diano i risultati richiesti. MPLAB IDE (Integrated Development Environment) è stato creato dalla Microchip ed è un set integrato di strumenti per lo sviluppo di applicazioni embedded.
In genere programmi complessi (talvolta persino programmi semplici) non funzionano a dovere o, almeno, non funzionano come vorremmo. A volte gli errori non si verificano immediatamente, si verificano quando si creano determinate situazioni. Pertanto il programmatore deve rivedere il codice e le sue operazioni per capire cosa si deve modificare per ottenere i risultati voluti. Così le "cimici" nei programmi devono essere rimosse se vogliamo che lavorino correttamente. Una volta che il codice è stato scritto e controllato dal punto di vista sintattico, bisogna testarlo.
In un ambiente di sviluppo l'esecuzione di un codice deve essere controllata da un debugger: può essere o un dispositivo hardware che analizza il programma durante la sua esecuzione o può essere un software che simula le operazioni del microcontrollore. MPLAB IDE ha il suo simulatore, così il programma può essere testato senza alcun dispositivo hardware. Si possono usare due tipi di hardware con MPLAB IDE: programmatori e debugger hardware. Tramite un programmatore il codice può essere modificato, riprogrammato nel microcontrollore per essere testato nuovamente, ma ciò richiede tempo specialmente se abbiamo tra le mani un codice complesso. Di conseguenza sarà molto difficile capire cosa c'è che non funziona. La panacea? Un debugger hardware. Debugger hardware, come MPLAB REAL ICE, possono essere emulatori in-circuit che utilizzano un hardware speciale al posto del microcontrollore, o possono essere, come MPLAB ICD2, in-circuit debugger che usano microcontrollori specializzati nel debugging.
Pertanto il debugger fa parte di MPLAB IDE e sia che stiamo usando MPLAB SIM, MPLAB ICE o MPLAB ICD2 la maggior parte delle operazioni è la stessa. Questo fatto permette di sviluppare il codice usando il simulatore e quando l'hardware è pronto possiamo usare un debugger hardware per testare ulteriormente il codice senza dovere imparare ad usare un nuovo strumento.
Riassumendo abbiamo tre tipi di debugger:
- soluzione software - simulatore

- soluzione software/hardware combinata - in-circuit debugger

- soluzione avanzata software/hardware - in-circuit emulator

MPLAB SIM
Dedichiamo un momento al MPLAB SIM che ha delle caratteristiche di debugging uniche, non disponibili nei debugger hardware. MPLAB SIM ha la caratteristica di simulare interazioni hardware con altri segnali e dispositivi, e dato che funziona come un software nel PC, ha tutte le informazioni, circa lo stato interno del chip simulato, ad ogni istruzione. Questa è una piccola differenza rispetto ai debugger hardware perché questi ultimi, mentre stanno eseguendo il codice a tutta velocità, non sono in grado di monitorare tutti i registri e tutta la memoria in tempo reale. Così il simulatore simula le operazioni:
- della CPU e dei registri interni;
- della memoria;
- di molte delle sue periferiche.
La simulazione comprende anche pin inputs e pin outputs così come quella di molte altre periferiche. Le periferiche comunicano con l'applicazione tramite speciali registri di funzione ( function registers ). Per testare l'applicazione con il simulatore si possono applicare ai pin e ai registri segnali impulsivi. Nella figura sottostante si può vedere come selezionare MPLAB SIM dal debugger menu.

MPLAB SIM è in grado di misurare accuratamente il timing del codice tramite lo "Stopwatch" o il time stamp del "Trace Buffer".
MPLAB: lo stopwatch
Lo Stopwatch può cronometrare sezioni di codice allorchè essi stanno girando nel simulatore. I calcoli dello Stopwatch si basano sulle istruzioni eseguite e sui valori impostati per la frequenza del processore. Il tempo totale viene calcolato in base al numero delle istruzioni ciclo.

Il trace buffer di MPLAB
Il trace buffer permette di "catturare" le azioni e di cronometrarle. Il trace buffer ha il vantaggio di potere catturare selettivamente grandi quantità di dati e ogni istruzione ha un time stamp. Per esempio è possibile catturare una routine di interrupt e quindi calcolare facilmente sia il tempo tra gli interrupt che il tempo totale impiegato da ciascun interrupt per eseguirlo.
Un complesso generatore di impulsi simula i segnali che possono essere applicati al dispositivo che è sotto simulazione. Il generatore di impulsi può mandare segnali ai pin o ai registri del simulatore. Questi segnali possono essere triggerati manualmente, possono essere catalogati come lista di eventi, possono essere forme d'onda ripetitive e possono essere attivate da condizioni complesse. Ci sono tre tipi di sorgenti di impulsi per MPLAB SIM:
- Trigger manuali che sono cambiamenti nei livelli del segnale digitale e sono causati cliccando con il mouse su un pulsante. Questi simulano l'azione della chiusura di uno switch o dell'invio di un impulso ad un pin.
- Un impulso ciclico che genera una forma d'onda ripetitiva o per un tempo predeterminato o per un tempo indefinito.
- Dati sequenziali, presi da una lista, che possono essere applicati ai pin, registri o bit.
Qui sotto c'è il dialog box del controllore di impulsi del MPLAB SIM.

Facciamo un esempio usando un controllore di impulsi. Nel dialog box possiamo selezionare l'azione ("action") da applicare al "pin" e quindi, quando il programma è in esecuzione, possiamo premere l'associato pulsante " Fire" (alla sinistra del nome del pin) per attivare il segnale. Supponiamo di volere mandare un impulso al pin RA3 della PORTA. Quando premiamo il pulsante "Fire" per alcuni secondi (8µs in questo esempio) avremo un segnale simulato alto sul pin RA3.
Possiamo aggiungere altre azioni.

- una è quella di forzare basso il pin INT0 quando premiamo il pulsante "fire"
- una è di commutare (toggle) il pin di INPUT per il Timer/Counter.
Ogni volta che si premerà il pulsante "fire" il pin commuterà dal valore alto a quello basso e così via.

Nel MPLAB IDE tutti i debugger (hardware e software) usano le opzioni watch windows, breakpoints and single stepping per testare il codice. A seconda del dispositivo che è stato scelto possono diventare disponibili altre opzioni del debugger.
Watch windows
Per vedere cosa sta facendo l'applicazione, le finestre di debug permettono di vedere i contenuti del programma, i dati o altri tipi di dispositivi di memoria. In particolare questa finestra consente di selezionare solo le variabili e i registri che interessano. Se vogliamo vedere, per esempio, il valore della variabile COUNT (ovviamente dobbiamo avere una variabile COUNT nel nostro programma!) dobbiamo cliccare sulla tendina sulla destra e cliccare su "Add Symbol". Alla stessa maniera possiamo vedere il valore dello speciale function register (PORT C), cliccando sulla tendina sulla sinistra e quindi cliccare su "Add SFR". Sotto possiamo vedere la sequenza.



Breakpoints
Sono utili per fermare l'esecuzione del programma in punti predeterminati: così si possono vedere, dopo l'esecuzione di un run time, la memoria, i registri o i valori delle variabili. Tramite la watch window possiamo vedere i valori dei registri e delle variabili nel punto in cui si è bloccato il programma. Sotto viene mostrato un breakpoint (la B nel colore rosso).

Single stepping
E' possibile controllare il codice passo dopo passo, monitorando le variabili, i
registri e i flag che interessano. L'opzione " Step Into" eseguirà la linea di codice indicata in quel momento e posizionerà la freccia sulla successiva linea di codice (ancora da eseguire). Sotto viene mostrata l'opzione "Step Into" (la freccia verde).

I suddetti strumenti per il debugging sono comuni a tutte le famiglie PIC:
8 bit PIC Micro-controllers: PIC10/PIC12/PIC14/PIC16/PIC18
16 bit PIC Micro-controllers: PIC24H/PIC24F/dsPIC33F
32 bit PIC Micro-controllers: PIC32
Ma il PIC32 micro-controllore ha un peculiare, potente strumento per il debug che gli consente di interagire con il MPLAB in maniera interattiva.
Questo strumento di debug è stato discusso in un articolo passato.

Un interessante approccio per MPLAB. Tutte queste soluzioni permettono di accelerare notevolmente il time-to-market. Come in ogni software di debug non sottovaluterei i breakpoints, che sembrano una banalità ma aiutano a capire il funzionamento ed eventualmente a rilevare bugs in intervalli di codici particolari.
Ciao arag61 probabilmente siamo coetanei, mi sono affacciato da pochi giorni nel mondo del digitale io sono un vecchio e puro elettronico analogico sempre a livello hobbistico.
Ho acquistato PICkit3 ho installato MPLAB e l’ho aggiornato all’ultima versione 8.83 ma in fase di debug posizionando il mouse sulla variabile di cui voglio conoscerne il valore la tooltip non si accende, le variabili le vedo solo nella finestra watch.
Ho dimenticato la premessa, sono un programmatore di tutti i sistemi BASIC fin dalle sue origini.
Ciao Valerio61,
ti rispondo io, ho appena provato su MPLAB 8.83
ed i tooltip sui registri funzionano perfettamente.
Verifica solo che il registro del quale stai cercando di leggere il contenuto sia correttamente dichiarato (non hai ricevuto errori in fase di compilazione) e che il firmware NON sia in RUN 🙂