Accedere all'ETM di una Nucleo F 401RE tramite codice

Inserire qui richieste sull'uso del forum.
lorenrus
Messaggi: 15
Iscritto il: mar 18 set 2018, 19:54

Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da lorenrus »

Salve a tutti
mi sto confrontando con questa nuova 'sfida', e volevo alcuni consigli/feedback.
Intanto premetto che inizialmente avevo scaricato il tool Keil ma tra le schede che mi permetteva di selezionare la mia non ci stava e quindi ora sto scaricando il tool IAR.
In ogni caso volevo andare in prima battuta a vedere i valori , che al reset, erano presenti in uno dei registri dell'ETM. Tale registro si chiama ETMCR.

Le poche line di codice sono:

unsigned int *pointer = ; (unsigned int *) 0x............// inizializzo il puntatore e dichiaro che l'indirizzo a cui sto puntando, in questo caso messo in
// esadecimale, è anch'esso un unsigned int.

Ho scelto int poichè fa riferimento a variabili di 4 byte dato che i registri dell'ETM sono a 32 bits.

Grazie
tiziao
Messaggi: 4995
Iscritto il: sab 17 mar 2018, 9:23
Contatta:

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da tiziao »

Ciao,
bene come argomento per il forum non è male... è una roba da iniziati ;)

Lorenrus... spiega un poco che operazione stai facendo e il motivo per cui lo fai... come ambiente puoi valutare anche Atollic (che ora è free)

Tiziano
lorenrus
Messaggi: 15
Iscritto il: mar 18 set 2018, 19:54

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da lorenrus »

Ciao, grazie per la risposta.

Allora io voglio accedere tramite l'uso di un codice a l'ETM, in particolare al suo buffer ETB. Nella scheda che sto utilizzando, Nucleo STM32F401RE, l'ETM è già incluso.
La mia scheda ha un ARM Cortex-M4.

Innanzitutto il motivo per cui voglio accedervi è per andare ad effettuare un debug senza l'uso di un kit esterno, come ad esempio l'ST-link.
Quindi quello che io mi sono prefissato di fare è stamparmi con una printf il contenuto dei vari registri dell'ETM.

Studiandomi i vari e sottolineo immensi datasheet della arm ho visto Che l'address dei registri della ETM parte da 0xE0042000, questo in particolare è l'address del regitro ETM-CR.

Il codice di cui parlavo sopra prevede l'uso di un puntatore che punterà all'indirizzo di ETM-CR.

#define ETM_CR 0xE0042000 // Dichiarato cosi in modo tale da rendere più fluida la lettura del codice

unsigned int *pointer = (unsigned int *) ETM_CR; // Indica che la variabile puntatore pointer,di tipo intero senza segno, sta puntando ad un valore
// anch'esso intero senza segno.

unsigned int var = 0; // Inizializzo una variabile a zero

var = *pointer; // mettendo il * prima di pointer vuol dire che andrò a prendere il contenuto della locazione di memoria a cui il puntatore pointer
// puntava. Nel mio caso andrò a prendere il contenuto della locazione di memoria di ETM_CR

Detto ciò vorrei farmi una stampa tramite printf, quindi:

printf("var") ---> Ma non lo riesco a visualizzare

Io sto usando IAR e ho letto su internet che per usare la funzione printf dovrei abilitare il SWO. Ma non esiste su IAR un terminale di OUTPUT tipo quello di arduino dove posso leggere il risultato di una stampa con la funzione print ??


Vi ringrazio
tiziao
Messaggi: 4995
Iscritto il: sab 17 mar 2018, 9:23
Contatta:

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da tiziao »

Ciao,
se non è sommerso dal lavoro sul forum c' è chi è in grado di rispondere.

Per accedere alla macrocella immagino tu usi SWD?

Tiziano
lorenrus
Messaggi: 15
Iscritto il: mar 18 set 2018, 19:54

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da lorenrus »

Buongiorno e grazie per la risposta.

Il mio scopo, come dicevo nel messaggio di ieri è quello di non utilizzare kit di debug esterni.

Detto ciò per accedere ai registri dell'ETM io lo faccio tramite un puntatore, come ho descritto nel codice del messaggio di ieri, e poi vorrei farmi stampare a video il contenuto di quello a cui punta questo puntatore.

Ora il problema che ho riscontrato è che utilizzando la funzione printf per la stampa a video non riesco a visualizzare nulla.7
Ho letto su internet che per usare la printf si deve usare il SWO.

Quindi la mia domanda è: c'è un modo per avere una semplice stampa a video come si fa ad esempio con compilatori del tipo DevC++, e quindi senza l'utilizzo del SWO ???

Grazie
Antennato81
Messaggi: 23
Iscritto il: gio 22 mar 2018, 18:15

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da Antennato81 »

Ciao lorensus,
Guarda quello che tu chiedi e' fattibile con diverse strade:
1 - utilizzando la seriale che ti interessa con la printf devi reindirizzare lo STDOUT ed STDIN ma quindi devi vedere un attimo le impostazioni del linker se no nricordo male. L'utilizzo della printf comporta la comodita' di sfruttare a formattazione della LIBC che al momento stai utilizzando di default con i lcompilatore che attualmente utilizzi.
2 - Puoi essere tu a crearti la tua printf "casalinga", il codice e' aperto in rete ed adattando la read e write di base della printf su una seriale riesci tu stesso a farlo.
3 - Utilzzare un debug ma, come hai detto tu, non e' di tuo interesse avere le stampe dei valori tramite seriale virtuale su SWD.

Ci tengo a ricordarti, cosa che immagino a te sara' nota, che utilizzando una seriale perdi il realtime che l'SWD ti offre e la possibilita' di interagire con il core del micro per gestire l'esecuzione.

A presto
Antennato
Antennato81
Messaggi: 23
Iscritto il: gio 22 mar 2018, 18:15

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da Antennato81 »

Un esempio di Seriale casalinga:

https://github.com/mpaland/printf

Prova a sostituire la putchar con le tue chiamate seriali e non dovresti avere prblemi. Poi se ti va divertiti a mettere interrupt su una Queue con Thershold, cosi' ti diverti anche un po ;-).
Bye
Avatar utente
Pier Aisa
Amministratore
Messaggi: 2541
Iscritto il: ven 16 mar 2018, 9:43
Località: Bologna
Contatta:

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da Pier Aisa »

Hehe..... ero sicuro che Antennato81 sarebbe uscito allo scoperto!!! Grazie 8-)
tiziao
Messaggi: 4995
Iscritto il: sab 17 mar 2018, 9:23
Contatta:

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da tiziao »

Pier Aisa ha scritto: lun 24 set 2018, 19:19 Hehe..... ero sicuro che Antennato81 sarebbe uscito allo scoperto!!! Grazie 8-)
Quante risate ci siamo fatti da colleghi... :D :D un grande professionista... ma anche un grande mattacchione.

Tiziano
lorenrus
Messaggi: 15
Iscritto il: mar 18 set 2018, 19:54

Re: Accedere all'ETM di una Nucleo F 401RE tramite codice

Messaggio da lorenrus »

Antennato81 ha scritto: lun 24 set 2018, 12:35 Un esempio di Seriale casalinga:

https://github.com/mpaland/printf

Prova a sostituire la putchar con le tue chiamate seriali e non dovresti avere prblemi. Poi se ti va divertiti a mettere interrupt su una Queue con Thershold, cosi' ti diverti anche un po ;-).
Bye
Buongiorno e grazie per la risposta Antennato81.

Allora ho letto i file del link che mi hai inviato. Leggendo la guida trovo scritto:

- Add/link printf.c to your project and include printf.h : quindi li includo entrambi al mio progetto dato che uno dei due deve essere incluso nell'altro.

- Implement your low level output function needed for printf(): Essendo che la funzione "Putchar" si trova nello script printf.c posso agire direttamente li, e di seguito trovo scritto:

void _putchar(char character)
{
// send char to console etc.
}

Questo "send char to console" lo ho inteso come una stampa,cioè scrivere la printf in maniera generica per poi richiamare sempre la printf nel mio main, è corretto ?
Però poi leggendo il tuo messaggio in cui mi scrivi "Prova a sostituire la putchar con le tue chiamate seriali" non sono più molto sicuro.

Se ho detto delle corbellerie cazziatemi tranquillamente perchè sono qui per imparare :) .

Vi ringrazio
Rispondi