Qual è la differenza funzionale tra un debugger in-circuit e un emulatore in-circuit?


12

Gli emulatori in-circuit (abbreviati ICE) si vantano delle loro fantastiche funzionalità di debug e vantano anche prezzi elevati.

I debugger in-circuit (ICD abbreviati) possono fare la maggior parte delle cose che un ICE può fare, ma spesso costano molto meno.

So che nel passato, gli ICE avrebbero effettivamente rimosso il chip problematico dalla presa e lo avrebbero sostituito con un cavo di emulazione, ma con i moderni pacchetti QFN, BGA e fragili TQFP, sembra che la maggior parte dei prodotti si definiscano debugger "ICE" sono collegati a un'intestazione di debug più o meno allo stesso modo di un ICD.

Ecco alcuni esempi di prodotti che utilizzano "ICE" nel nome:

Esistono anche prodotti "ICE" di JTAG di diversi fornitori. Nota che non li sto scontando perché non sono fisicamente in-circuit, ma li farei sconto se non funzionassero come un vero ICE.

In quale tipo di attività di sviluppo ho bisogno di un ICE e quando dovrei accontentarmi di un ICD? Supponiamo che io voglia scorrere il mio codice e non usare LED e istruzioni printf ().

Quali sono alcuni esempi di problemi che hai risolto con un ICE ma che (realisticamente) non avresti potuto risolvere senza di esso?

Risposte:


19

Un ICE (In-Circuit Emulator) sostituisce il chip target. Funziona come il vero chip nel resto del circuito, ma ha tutti i tipi di hook all'interno in modo da poter vedere cosa sta succedendo, impostare punti di interruzione, caricare nuovo codice, acquisire tracce, ecc. Un ICD (In-Circuit Debugger) utilizza hardware di debug speciale aggiunto al chip di destinazione a tale scopo e cerca di offrire funzionalità simili a ICE. Sfortunatamente, gli addetti al marketing si sono coinvolti e hanno cercato di ridefinire questi termini di lunga data nel loro tentativo di ingannarti nel pensare che il loro prodotto sia migliore di quello successivo. RealIce di Microchip ne è un esempio particolarmente eclatante. È reale, ma l'unica cosa che non è è un GHIACCIO.

Un vero ICE (non RealIce) è il miglior ambiente di debug in-circuit. Sfortunatamente questi sono praticamente scomparsi a causa dell'elevato costo di creazione di una versione speciale del chip target da utilizzare nell'ICE, e del fatto che le velocità sono diventate così elevate che togliere qualcosa dal chip è problematico. Un altro problema è che un ICE richiede che il chip di destinazione sia in un socket o che sia necessario un adattatore speciale montato al posto del chip di destinazione in modo che l'ICE possa connettersi alle sue linee.

Quindi oggi siamo bloccati con ICD. Fortunatamente fanno la maggior parte delle cose che vorresti fare con un GHIACCIO. Hanno anche un vantaggio in quanto il codice è in esecuzione sul chip target reale, non qualcosa che cerca di essere come il chip target. Il rovescio della medaglia è che richiedono risorse on-chip, quindi non sono completamente trasparenti al codice e all'hardware come un ICE. L'ICD deve accedere alle linee di debug, che spesso possono avere più ruoli. Non è possibile utilizzare quei pin in altri ruoli durante il debug. La quantità di circuiti di debug incorporati in ogni parte deve essere mantenuta a una piccola frazione del totale, altrimenti il ​​costo sarebbe troppo elevato, quindi le funzionalità devono essere compromesse. Una bella funzionalità che sarebbe troppo costosa da aggiungere su ogni chip è la vera capacità di traccia, poiché richiede un buffer RAM di grandi dimensioni.

Ogni problema può eventualmente essere risolto con una varietà di strumenti. Non è se puoi risolverlo, ma quanto tempo e quanti sforzi ci vogliono. Quando usavo regolarmente ICE (Microchip ICE-2000 e ICE-4000), non usavo spesso la funzione di tracciamento, ma quando facevo altri mezzi sarebbe stato significativamente più costoso. A volte hai un bug in cui una variabile improvvisamente ha il valore sbagliato in essa. Passi attraverso il codice e tutto va bene e la routine che manipola la variabile sembra fare tutto nel modo giusto, ma quando lo esegui alla fine le cose vanno male e trovi quella variabile spazzata via. La causa è un altro codice con un puntatore errato, overflow del buffer, mancata corrispondenza dello stack o simili. Con un ICE puoi impostare un breakpoint sulla variabile che si sta modificando,

Il più delle volte, un ICD farà abbastanza bene. Soprattutto con chip di grandi dimensioni, i pin di coppia dedicati al debug non rappresentano un grosso problema. Oggi uso principalmente RealIce per il debug. È molto più stabile e meno traballante dell'ICD2. Impari a conviverci.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.