Quale metodo semplice posso utilizzare per eseguire il debug di un processore incorporato senza porta seriale o video?

StackOverflow https://stackoverflow.com/questions/69492

  •  09-06-2019
  •  | 
  •  

Domanda

Abbiamo un piccolo sistema embedded senza porte video o seriali (ad es.non possiamo generare testo tramite printf).
Vorremmo monitorare l'avanzamento del nostro codice attraverso la sequenza di inizializzazione.
Ci sono alcune cose semplici che possiamo fare per aiutare in questo.
Non esegue alcun sistema operativo e la piattaforma hardware è in qualche modo personalizzabile.

È stato utile?

Soluzione

La soluzione più semplice e scalabile sono i LED di stato.Attiva/disattiva i LED in base alle azioni, in forma binaria o quando si verificano determinate azioni se puoi restringere la concentrazione.

Il più potente sarà un dispositivo JTAG hardware.Non è nemmeno necessario impostare punti di interruzione: potrebbe essere sufficiente semplicemente poter arrestare l'applicazione e controllare lo stato della memoria.Tieni presente che alcune piattaforme hardware non supportano opzioni "fantasiose" come controlli della memoria o punti di interruzione hardware.Il primo viene solitamente risolto arrestando costantemente il processore e leggendo la memoria (trasforma il tuo sistema a 10 MHz in un sistema a 1 kHz), mentre il secondo viene talvolta eseguito utilizzando la sostituzione del codice (sostituisci l'istruzione mirata con un salto diverso), che a volte maschera altri problemi .Essere consapevoli di questi problemi e a quali processori integrati si applicano.

Altri suggerimenti

Esistono alcune strategie che puoi utilizzare per facilitare il debug:

Se disponi di pin di uscita, puoi collegarli ai LED (o a un oscilloscopio) e alternare i pin di uscita alto/basso per indicare che determinati punti sono stati raggiunti nel codice.
Ad esempio, 1 lampeggio potrebbe essere il programma caricato, 2 lampeggi è la foozbar inizializzata, 3 lampeggi stanno accettando input...

Se sono disponibili più linee di uscita, è possibile utilizzare un LED a 7 segmenti per trasmettere più informazioni (numeri/lettere invece di lampeggi).

Se hai la capacità di leggere la memoria e hai un po' di RAM disponibile, puoi usare la funzione sprint per eseguire un debug simile a printf, ma invece di andare su uno schermo/porta seriale, viene scritto in memoria.

Dipende dal tipo di debug che stai tentando di eseguire, in particolare se stai cercando un metodo di tracciamento temporaneo o se stai cercando di fornire uno strumento che possa essere utilizzato come indicazione dello stato durante la vita del progetto (o prodotto).

Per una volta, il tracciamento approfondito della sorgente e il debug di un debugger in-circuit (ad es.jtag) può essere molto utile.Tuttavia, sono molto utili laddove il debug richiede l'impostazione di punti di interruzione e l'analisi della memoria e dei registri, il che lo rende di scarso vantaggio quando si affrontano problemi critici in termini di tempo.

Quando è necessario determinare lo stato del programma senza avere un impatto significativo sull'esecuzione del sistema, sarà utile l'uso di LED collegati a pin I/O di riserva.Questi possono essere utilizzati anche come ingresso per un oscilloscopio a memoria digitale (DSO) o un analizzatore logico.Questa tecnica può essere resa più potente selezionando modelli di impulsi unici che saranno identificabili sul DSO.

Per uno strumento di debug più versatile, tuttavia, una porta seriale è una buona soluzione.Per risparmiare sui costi e sull'ingombro del PCB potrebbe essere utile utilizzare un modulo plug-in che contiene i convertitori RS232.

Se stai cercando di fornire un'indicazione dello stato a lungo termine come parte del normale funzionamento del tuo prodotto, i LED sono ancora una volta un metodo semplice ed economico.Tuttavia in questa situazione è meglio scegliere modelli di impulsi sufficientemente lenti da essere facilmente identificati mediante ispezione visiva.Con il tempo imparerai uno schema particolare che rappresenta un comportamento "normale".

È possibile emulare facilmente le comunicazioni seriali (UART) utilizzando il bit-banging dai pin IO del sistema.Aggancialo a uno dei pin della scheda e collegalo a un convertitore RS232 lì (i convertitori da TTL a RS232 sono facili da acquistare o costruire), che va alla porta seriale del tuo PC.

Anche un debugger JTAG è un'opzione, sebbene complicato da configurare.

Se non hai JTAG, i LED suggeriti dagli altri sono un'ottima idea, anche se tendi a finire in un ciclo di test/ricostruzione per cercare di rintracciare il problema.

Se hai più tempo, pin hardware di riserva e memoria da risparmiare, puoi sempre eseguire il bit-bash di un'interfaccia seriale a bassa velocità.L'ho trovato piuttosto utile in passato.

Altri hanno suggerito alcune idee piuttosto valide utilizzando i pin di uscita, quindi non lo suggerirò, anche se può essere un'ottima soluzione ed è molto conveniente.Se il tuo budget e il processore di destinazione lo supportano, un sistema di traccia hardware (un emulatore vecchio stile o un BDM sofisticato con supporto per la traccia snooping del bus) può essere ottimo per questo tipo di cose.È molto costoso però.

L'idea di utilizzare un software UART leggermente modificato è carina, ma è necessario un certo sforzo per scriverne uno e sono necessari anche alcuni timer e interruzioni gratuiti.Se il tuo hardware dispone di altre interfacce seriali non utilizzate (SPI, I2C, ..), utilizzarle sarebbe più semplice.Con un piccolo microcontrollore è possibile convertire l'interfaccia in RS-232.

Se devi optare per il bit-banging, creare una seriale sincrona potrebbe essere un'alternativa più semplice in quanto non sarebbe fondamentale per il tempismo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top