MONITOR - 52
Monitor Debugger per la famiglia 8051
I N D I C E
1. INTRODUZIONE
2. USO del MO52
1. INTRODUZIONE
MO52 è un pacchetto software interattivo che comprende un debugger ed un monitor in linguaggio macchina per la famiglia di microprocessori Intel 51. L'MO52 include funzioni di: visualizzazione ed alterazione del contenuto della memoria, gestione di punti d'arresto, esecuzione codice a singola istruzione, esecuzione codice a velocità reale ed un completo disassemblatore.
MO52 non richiede nessun hardware aggiuntivo e sfrutta pochissime risorse dell'hardware utilizzato. In effetti l'MO52 usa la linea seriale per la comunicazione nei confronti del P.C. di sviluppo, 80 bytes di RAM esterna per le sue variabili, 3700 bytes di ROM per il suo codice ed il TIMER1 per la generazione del baud rate di comunicazione e per l'esecuzione passo passo. Al fine di poter caricare un programma applicativo dal P.C. di sviluppo e di poter settare dei punti d'arresto l'MO52 deve essere in grado di poter scrivere nell'area codice. Visto che l'architettura dell'8051 non consente queste operazioni quando si usa un'area codice separata da quella codice, é necessario che l'area RAM di scaricamento del programma sia indirizzata sia come dati che come codice (/PSEN e /RD sommati).
L'MO52 conserva il contenuto di tutti i registri e della RAM interna quando ripassa il controllo al programma utente; l'utilizzatore può quindi lavorare come se il suo programma fosse da solo, senza preoccuparsi di eventuali conflitti con lo stesso MO52.
2. USO DELL'MO52
I seguenti comandi sono implementati nel monitor debugger MO52:
A <indirizzo>
Altera il contenuto della RAM interna del microcontrollore. MO52 presenta l'indirizzo specificato ed il suo attuale contenuto. Si possono digitare due cifre HEX per cambiare il valore, lo 'SPAZIO' per avanzare alla prossima locazione, il 'BACKSPACE' per ritornare alla locazione precedente o 'RETURN' per terminare il comando di alterazione.
B <n° punto d'arresto> <indirizzo>
Setta un punto d'arresto all'indirizzo specificato. Se l'indirizzo specificato é 0000 il punto d'arresto è rimosso. Ci possono essere fino a quattro punti d'arresto, numerati da 0 a 3.
Se lo 'SPAZIO' è premuto al posto del n° punto d'arresto, sono visualizzati gli indirizzi degli attuali punti d'arresto già impostati.
NOTA: La famiglia 8051 di microprocessori non ha una istruzione di salto che occupi un singolo byte e quindi la gestione dei punti d'interruzione non può essere gestita con le modalità classiche. I punti d'arresto sono quindi gestiti inserendo nel codice un'istruzione "LCALL" a seguito dell'esecuzione con il comando "G" e ripristinando il codice originario quando il punto d'arresto viene raggiunto. Ogni 'LCALL' occupa tre byte di memoria codice e questo provoca i seguenti limiti:
Bisogna fare attenzione a non settare punti d'arresto in posizioni i cui due indirizzi sucessivi vengono chiamati da altre parti del programma. For example, if you set a breakoint atindirizzo 1234, nel programma non ci dovono essere istruzioni che saltano agli indirizzi 1235 o 1236 (un salto all'indirizzo 1234 é invece corretto).
Non si possono settare punti d'arresto che vanno sui tre byte occupati da un altro punto d'interruzione. Se si tenta questo settaggio viene rappresentato il messaggio d'errore 'Breakpoint conflict'.
Non si possono fornire comandi di 'G' ad un indirizzo che contiene un punto d'arresto; anche in questo caso viene visualizzato il messaggio d'errore 'Breakpoint conflict'. Si cade frequentemente in questo limite quando si vuole riprendere l'esecuzione a seguito del raggiungimento di un punto d'interruzione; in questo caso si deve invece rimuovere il punto d'arresto raggiunto oppure usare il comando 'S' per avanzare il puntatore programma (PC) fino a sorpassare le locazioni occupate dal punto d'arresto.
C <nome registro> <valore>
Cambia i valori dei registri interni dell'8051. Il nome registro coincide con una singola lettera ed il valore può essere a 8 o 16 bits, come sotto descritto:
A- Registro A (accumulatore) -> valore a 8 bit.
B- Registro B (registro generico) -> valore a 8 bit.
D- Registro DPTR (puntatore dati) -> valore a 16 bit.
S- Registro SP (puntatore stack) -> valore a 8 bit.
P- Registro PC (puntatore programma) -> valore a 16 bit.
W- Registro PSW (registro di stato) -> valore a 8 bit.
0÷7 Registri R0÷R7 (banco registri attuale) -> valore a 8 bit.D <indirizzo inizio>,<indirizzo fine>
Visualizza il contenuto della memoria dati esterna compresa tra gli indirizzi specificati, in formato HEX ed ASCII. Se come indirizzo di fine é premuto lo "SPAZIO" allora si assume un indirizzo di fine = FFFF.
E <indirizzo>
Modifica il contenuto dell'area dati esterna del microcontrollore. MO52 presenta l'indirizzo specificato ed il suo attuale contenuto. Si possono digitare due cifre HEX per cambiare il valore, lo 'SPAZIO' per avanzare alla prossima locazione, il 'BACKSPACE' per ritornare alla locazione precedente o 'RETURN' per terminare il comando di modifica.
F <indirizzo inizio>,<indirizzo fine> <valore>
Riempe la memoria dati esterna dall'indirizzo di inizio fino all'indirizzo di fine con il valore HEX specificato.
G <indirizzo>
Esegue il programma salvato nella memoria codice a partire dall'indirizzo specificato. Se uno "SPAZIO" è premuto al posto dell'indirizzo, l'esecuzione inizia all'indirizzo attualmente contenuto nel registro puntatore programma (PC).
I <indirizzo inizio>,<indirizzo fine>
Mostra il contenuto della memoria interna compresa tra i due indirizzi specificati, in formato HEX.
L
Attiva la ricezione di un file in formato HEX Intel o S MOTOROLA dal P.C. di sviluppo. Il comando termina in corrispondenza della ricezione delle sequenze ':00' o 'S9' che normalmente coincidono con l'ultimo record dei file. Se involontariamente viene fornito questo comando, l'utente può ritornare al modo comandi digitando direttamente una delle due sequenze descritte.
R
Mostra i valori attuali dei registri dell'8051 (A, B, DPTR, SP, PC, PSW e R0÷R7).
S
Esegue una singola istruzione salvata nell'indirizzo attualmente salvato nel puntatore programma (PC). Il disassemblato dell'istruzione eseguita é rappresentato sul P.C. di sviluppo.
U <indirizzo fine>,<indirizzo fine>
Disassembla la memoria programma compresa tra i due indirizzi specificati. Se lo 'SPAZIO' è premuto come indirizzo di fine, si assume il valore FFFF. Il comando rappresenta l'indirizzo, i byte di codice, il mnemonico e gli operandi di ogni istruzione.
?
Mostre un breve sommario dei comandi disponibili.
Al fine di avere la massima quantità di informazioni su una videata del P.C. di sviluppo, durante la fase di debug, l'MO52 é stato progettato per ridurre al minimo le linee di rappresentazione per ogni comando. Tutti comandi che rappresentano solo una riga di dati (come 'B' e 'S') lo fanno sulla stessa riga su cui il comando é stato fornito (alla sua destra).
Per i comandi che visualizzano grosse quantità di dati (come 'D', 'U', ecc.) premendo lo 'SPAZIO' durante la rappresentazione, questa si fermerà sulla prossima riga. Ogni sucessiva pressione dello 'SPAZIO' rappresenterà una ulteriore riga mentre la pressione di 'ENTER' riprenderà la rappresentazione a piena velocità delle righe rimanenti.
Il tasto 'ESC' può essere utilizzato per interrompere definitivamente la rappresentazione di un comando, tornando quindi nella modalità di attesa comandi, segnalata dalla presenza di un '*' a capo riga.
L'MO52 ridireziona tutti i vevettori d'interrupt (escluso quello del TIMER1, che è usato internamente per l'esecuzione passo passo) al corrispondente indirizzo all'inizio dell'area RAM a disposizione dell'utente.
Quando si verifica un programma che usa i vettori d'interrupt é sufficiente allocare quest'ultimi nella RAM utente, ovvero aggiungergli il valore di inizio di tale RAM. Le procedure di risposta all'interrupt invece non devono subire alcuna variazione.
Configurazioni MO52 per GPC® xxx
In aggiunta alle precedenti informazioni valide per ogni tipo di scheda, in questo paragrafo vengono riportate le due informazioni che riguardano l'uso dell'MO52 in abbinamento alle schede grifo®:
Scheda GPC® F2 |
Comunicazione 9600 B, 8 bit, 1 stop, no parity |
Inizio RAM utente 8050 |
Pagina aggiornata al 09 Settembre 2004