Forum: Mikrocontroller und Digitale Elektronik Generelles zum Tracen und Debbugen mit AVR One


von Thomas K. (tki)


Lesenswert?

Hallo,

ich hab da Fragen bezüglich Tracing und Debbuging. Ich habe selber noch 
nicht so viel mit Debbugern gearbeitet (bisher nur mit dem Dragon). Von 
einem Freund habe ich mir jetzt mal den AVR One geliehen.
Ich arbeite mit AVR32 Studio 2.5.0 und nutze "quasi" das EVK1100 Board.

Nun zu meinen Fragen:

(1) Was ist der Unterschied zwischen "Non-intrusive Real-Time Trace" und 
"Intrusive Real-Time Trace" ???
Mit "Real-Time Trace" kann ich was anfangen, aber nicht mit 
"non-intrusive".

Ich hab mal geschaut was der AVR One mehr kann als der JTAGICE mkII. Und 
da stand:

AVR One:
• Nexus and JTAG Interface
• Non-intrusive Real-Time Trace
• Run-Time Control (Run, Stop, Single-step, Reset)
• Program Flash and Fuses

JTAGICE mkII
• JTAG Interface
• Run-Time Control (Run, Stop, Single-step, Reset)
• Program Flash and Fuses


(2) Wenn ich auf einem Board keine Nexus-Schnittstelle unterstütze, 
sondern nur die JTAG, habe ich dann trotzdem volle Debbug-Funktionalität 
mit dem AVR One?

(3) Hab ich das richtig verstanden, dass ich mit dem AVR One (aufgrund 
des für die Trace-Ausgaben zugeordneten begrenzten Speichers) nur 
gezielte Programmstellen Tracen kann (Instruction or Program Trace)?

(4) Gibt es die Möglichkeit selbstdefinierte Trace-Meldungen an vielen 
Stellen im Programmcode zu setzten, die dann bei durchlaufen an den 
Debbuger geschickt werden und dieser diese Aufzeichnet?
Ich hatte auf die Schnelle diese Meldungen über eine RS232-Schnittstelle 
rausgeschickt und die Ausgaben mit dem HyperTerminal in einer Datei 
gespeichert. Die schnelle Lösung hatte aber erhebliche 
Performance-Einbußen und ein anderes zeitliches Verhalten dss Systems 
bedeutete.
Jetzt dachte ich, ich könnte das über den AVR One realisieren. Geht das?

Danke für eure Zeit und Antworten.

Thomas

von cskulkw (Gast)


Lesenswert?

Also, non-intrusive-Trace soll bedeuten, dass über die 
NEXUS-Schnittstelle jede Befehlsabarbeitung des Prozessorkerns über den 
Hilfsport ausgegeben und vom AVR32-Studio über die GUI angezeigt und in 
einer Datei gespeichert werden.

Ich habe das mal bei einem Workshop vorgeführt bekommen. Dabei wird die 
Microkontrollergeschwindigkeit nicht beeinträchtigt (non-intrusiv). Man 
bekommt dann aber ungefiltert riesen Datenmengen. Das funktioniert nur 
Prozessoren, die auf der Hardware dafür vorbereitet sich. Das gilt 
insbesondere für die AVR32-Prozessoren.
Um die Datenflut in den Griff zu bekommen, setzt man Triggerpunkte 
analog zu den Break-points ein, die erst ab einem Point of interesst die 
Datenerfassung und ausgabe startet.
Dann wird noch unterschieden in Programm-Trace und Data-Trace. 
Programm-Trace ist schon oben erwähnt. Data-Trace sollte Analog zum 
Data-Breakpoint des statischen Debuggens mit sofortiger Fortsetzung der 
Programmausführung funktionieren. Nur eben ohne messbare Unterbrechung 
bei der Rechnergeschwindigkeit.

Bei intrusive-Trace wird lt. Atmel-Tutorial im RAM ein großer Bereich 
für das Zwischenspeicher der Ausführungsdaten reserviert und über JTAG 
nicht AUX-Port ausgegeben. Dabei muß die Programmausführung für die 
Dauer der Übertragung gestoppt werden. Mit dieser Technik sollte sogar 
ein ATmega - getraced werden können.

Ich habe das noch nicht ausprobiert.

Zw. NEXUS und JTAG-OCD ist der Unterschied, das NEXUS die Kodierungen 
für die statischen Debugvorgänge (set break point, release break point , 
etc.) fest und verbindlich vorschreibt. Siehe dazu private-Befehle unter 
OCDs des AT(x)mega. Diesen Code bekommt man von Atmel erst dann, wenn 
man ein NDA unterschreibt und mit dem Wissen kommerziell tätig wird.

NEXUS ist ein Versuch hier mehr Transparenz zu schaffen und den 
Third-Party-Toolherstellern eine Chance zu bieten, universelle Technik 
zu entwickeln, die preislich bezahlbar bleibt. Ein gutes Gegenbeispiel 
sind die Trace32-Produkte von Lauterbach.

Deine Frage nach der Ausgabe über TRACE würde ich mit Nein beantworten. 
Denn der Data-Trace-Point erfüllt ja so in etwa diesen Zweck. Eine 
Ausgabe erübrigt sich somit.

Soweit meine Infos - ohne Anspruch auf Fehlerfreiheit.

von Purzel H. (hacky)


Lesenswert?

Der Nexus Connector is ein superset zum JTAG, beinhaltet den JTAG plus 
eine 16bit parallele Verbindung. Daher denk ich wenn man nur JTAG hat, 
verpasst man zumindest die moegliche Geschwindigkeit. Moeglicherweise 
koennen die internen Tracebuffer nur parallel ausgelesen werden.

von Thomas K. (tki)


Lesenswert?

Vielen Dank für eure SCHNELLEN Antworten!!!! Das hat mir enorm 
weitergeholfen.
Oft kommt das Verständis des Ganzen durch die Praxis und weniger durch 
die Theorie. Daher freue ich mich darüber, dass ihr eure Erfahrungen 
teilt.

Danke und schönes Wochenende
Thomas

-------------
Hatte eigentlich erwartet, dass ich ne E-Mail zugeschickt bekomme, wenn 
mir jemand auf meine Frage antwortet. Da kam aber nix - daher erst jetzt 
meine Rückmeldung. Muss wohl noch mal in den Einstellungen schauen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.