IL monitoraggio del software in RENESAS

La proposta di Renesas intende rispondere alle esigenze di test e di verifica. Il monitor Renesas consente di controllare la board attraverso un monitor residente, di piccolo taglio, per predisporre sessioni di verifica e debug.

Tutto quello di cui abbiamo bisogno oltre al componente H8/3664, sono: un driver seriale, un po’ di memoria e un terminale window, come Hyperterminal, su un personal computer. Come possiamo vedere dalla figura 1, il personal  computer e il microcontrollore  H8/3664 sono connessi attraverso una seriale RS232C secondo la classica configurazione RS232 a 9600 bps, 8 bit di dati, un bit di stop e no parity.

Figura 1: connessione tra il personal computer e il microcontrollore H8/3664

Figura 1: connessione tra il personal computer e il microcontrollore H8/3664

Il monitor di renesas

Il monitor di Renesas contiene una quantità limitata di strumenti, ma perfettamente utili per un sistema embedded. Questi strumenti consentono di controllare e scrivere direttamente in memoria. Un monitor tradizionale, per esempio come gdb, permette una quantità maggiore di comandi di quelli consentiti da Renesas. Questo non deve far pensare che Renesas non è un valido strumento, ma è proprio questa l’intenzione del costruttore: fornire un piccolo strumento, facilmente portabile e modulare, per iniziare l’attività di verifica on board. Per funzionare  il monitor utilizza la Serial Communication  Interface (SCI). La SCI è utilizzata per trasmettere e ricevere dati in maniera asincrona, mentre la figura 2 mostra il suo diagramma a blocchi.

Figura 2: diagramma a blocchi della Serial Communication Interface (SCI).

Figura 2: diagramma a blocchi della Serial Communication Interface (SCI).

Dalla figura è possibile notare che ci sono unità indipendenti per la trasmissione e la ricezione, in questo modo il funzionamento della seriale è permessa in maniera simultanea grazie alla presenza di una struttura a doppio buffer. Il componente di Renesas permette di gestire sei interrupt differenti: interrupt di fine trasmissione, transmission data empty, overrun error, framing error, parity error e, per finire, reception data full. La presenza, poi, di registri per la sua gestione garantisce sufficiente flessibilità. Facciamo una rapida analisi della Serial Communication  Interface per porre in risalto alcune sue caratteristiche:

➤ Receive Shift Register (RSR). È il registro dove trovano posto i vari caratteri che riceve il componente. I dati che il componente  riceve in ingresso, attraverso il pin RxD, sono messi nel registro RSR nell’ordine in cui sono ricevuti, dal bit LSB (bit 0), e successivamente, convertiti in un flusso di da ti paralleli. Quando un byte è ricevuto, questo è automaticamente  trasferito verso il registro RDR. Il registro RSR non può essere letto direttamente o scritto dalla CPU.

➤ Receive Data Register (RDR). Questo è un registro di 8 bit il cui contenuto è composto dai dati ricevuti in ingresso dal registro RSR. In questo modo i dati ricevuti sono trasferiti dal registro RSR al RDR e, al termine, l’operazione di ricezione si conclude e il registro RSR è pronto a ricevere altri dati. I registri  RSR e RDR hanno una struttura a doppio buffer. Il registro  RDR è un registro dedicato in ricezione e, quindi, non si può avere accesso direttamente dalla CPU.

➤ Transmit Shift Register (TSR). Il TSR è un registro utilizzato in trasmissione. La CPU sposta il dato dal registro TDR e lo invia verso TSR, e da questo verso il pin TxD dal bit LSB (bit 0). Successivamente la CPU controlla le operazioni sulla seriale attraverso il registro TDRE. Il controllo della trasmissione viene esercitato attraverso il bit TDRE del registro SSR; quando questo bit è abilitato (valore a uno), il dato non è trasferito dal registro TDR a TSR. La CPU non può scrivere o leggere nel registro TSR.

➤ Transmit Data Register (TDR). Il TDR é un registro a 8 bit ed è utilizzato da buffer per i dati da trasmettere. Quando il registro TSR è vuoto, la CPU trasferisce  il dato dal registro TDR a TSR e la trasmissione ha inizio fino a quando ci sono dati nel registro TDR. La CPU può leggere e scrivere nel registro TDR.

➤ Serial Mode Register (SMR). Questo registro può essere sempre letto e scritto dalla CPU. Questo registro è utilizzato per gestire la comunicazione  seriale, il suo formato e per selezionare  il clock per il baud generator.

➤ Serial Control Register (SCR). Esistono differenti SCR e tutti possono essere letti e scritti dalla CPU. Attraverso questo registro si selezionano le diverse operazioni, come ad esempio la ricezione e la trasmissione o la gestione degli interrupt.

➤ Serial Status Register (SSR). Anche questo registro può essere letto e scritto dalla CPU. Questo registro permette di controllare la seriale, di abilitare o disabilitare la trasmissione.

In ogni caso, la descrizione dei vari registri utilizzati dal monitor di Renesas è ampiamente trattata dall’Application Note che potete scaricare dal sito della rivista. Il nostro scopo, comunque, non è quello di descrivere questi registri, ma semmai quello di dare delle indicazioni sul monitor di Renesas. Al power on la prima cosa che si nota è il messaggio che viene visualizzato sul terminale d’ingresso del PC, vedi figura 3.

Figura 3: messaggio visualizzato sul terminale di ingresso del PC al power on.

Figura 3: messaggio visualizzato sul terminale
di ingresso del PC al power on.

Nella documentazione tecnica è possibile ricavare informazioni tecniche e il codice, scritto in linguaggio C, utilizzato da Renesas con una descrizione puntuale di ogni funzione e informazioni sull’architettura del software.  I listati acclusi sono ricavati dall’Application Note. Il listato 1 mette in evidenza la procedura per inizializzare la seriale.

/*——————————————————————————————————————————————————————-*/
/* <Function name> Init_sci */
/* <Function task> Serial setting */
/* <Argument> None */
/* <Return value> None */
/* <External variable> None */
/* <Function used> None */
/*——————————————————————————————————————————————————————-*/
void Init_sci ( void )
{
unsigned long *plPtr_0;
unsigned long *plPtr_1;
unsigned char speed;
/*——————————————————————————————————————————————————————-*/
/* <Communication with UNIT> */
/* SC register 7 6 5 4 3 2 1 0 */
/* Serial status (SSR): TDRE RDRF ORER FER PER —- —- —- */
/* Serial mode (SMR): C/A 8/7 PE O/E STP MP CKS1 CKS0 */
/* 0 0 0 0 0 0 0 0 */
/* Bit rate (BRR): */
/* Serial control (SCR): TIE RIE TE RE MPI TEI CKE1 CKE0 */
/* 1 1 1 1 0 0 0 0 */
/*——————————————————————————————————————————————————————*/
       dummy = SCI3_SSR;
       SCI3_SSR = 0;
       SCI3_SCR = 0xf0;
       SCI3_BRR = 51; /* 9600bps CLK:16MHz */
       SCI3_SMR = 0x00; /* PE:0 */
       s3rx_cnt = 0;
       dummy = SCI3_SSR;
       SCI3_SSR = 0;
}
}
Listato 1

I passi utilizzati per sopperire a questa funzione sono racchiusi nella figura 4 dove è mostrato un diagramma di flusso per meglio descriverne  il suo comportamento.

Figura 4: flow chart dei passi necessari all’inizializzazione della seriale.

Figura 4: flow chart dei passi necessari
all’inizializzazione della seriale.

Il funzionamento del monitor di renesas

Il suo funzionamento è abbastanza semplice. Tutti i caratteri di ingresso al monitor sono inseriti mediante l’interfaccia hyperteminal di windows e sono codificati secondo lo standard ASCII.  Il monitor permette di gestire l’editing di linea, in questo caso, se si commette un errore, è possibile utilizzare  il carattere di backspace per cancellare  il carattere stesso e riscrivere  il comando. Il monitor risiede in una particolare area di memoria definita in fase di linker.  Il progettista Renesas ha avuto particolare cura affinchè tutto il codice potesse essere scritto in modo da essere indipendente dall’area di memoria in cui andrà a risiedere. L’implementazione del monitor di Renesas prevede la possibilità di modificare e visualizzare la memoria utilizzando i comandi di dump e edit. Dalla figura 5 vediamo che la lettera iniziale identifica il  comando scelto, mentre i  caratteri successivi (inclusi ‘A’ a ‘F’) identificano l’indirizzo di memoria.

Figura 5: visualizzazione del comando e dell’indirizzo di memoria

Figura 5: visualizzazione del comando e dell’indirizzo di memoria

In questo caso, con la lettera iniziale ‘D’ si intende fare un dumping della memoria partendo dall’indirizzo scelto attraverso l’interfaccia terminale, Hyperterminal. Il  comando dump permette di visualizzare  il contenuto della memoria associando al comando ‘D’ il suo indirizzo, come in figura 5. La profondità massima delle locazioni aperte sono di 18 byte e l’indirizzo deve essere digitato in forma esadecimale. Dalla figura 5 possiamo vedere che per visualizzare 128 byte partendo dall’indirizzo 0xFE80 è necessario digitare DFE80. La locazione di memoria può essere aperta ricorrendo al comando E associandoci il relativo Una volta digitato il comando, il  byte corrispondente all’indirizzo relativo verrà visualizzato, (figura 6).

Figura 6: visualizzazione del byte corrispondente al relativo indirizzo.

Figura 6: visualizzazione del byte corrispondente al relativo indirizzo.

Una volta aperta la locazione vi si può applicare una successiva serie di comandi. Quando una locazione viene aperta è possibile scrivervi un valore in esadecimale per modificare il suo contenuto o, mediante il carattere di return, si può aprire la locazione successiva, (figura 7).

Figura 7: visualizzazione delle locazioni

Figura 7: visualizzazione delle locazioni

Se decidessimo di modificare la locazione corrente aperta, il monitor, una volta inserito il comando, mostrerà di nuovo il contenuto della locazione. La tabella 1 mostra i vari sottocomandi disponibili in modalità edit.

Tabella 1 Comandi di memoria Significato

Tabella 1: Comandi di memoria Significato

Attraverso l’uso del comando edit è possibile inserire in memoria un programma utente, magari una routine di test, specificando tutte le istruzioni del programma in esadecimale. Certamente, monitor più completi permettono di caricare in memoria interi programmi di test in maniera trasparente. La proposta di Renesas è però differente, poiché attraverso questo strumento piccolo e portabile con enorme semplicità è possibile condurre piccole sessioni di test senza appesantire il sistema.

 

 

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend