Forum: Mikrocontroller und Digitale Elektronik Debug-Ausgaben über JTAG an AVR-Studio


von Thomas B. (escamoteur)


Lesenswert?

Hi,

vielleicht hab ich's einfach in der Doku noch nicht gefunden:

Kann ich von c aus einfach Debug Ausgaben über meine JTAG-Verbindung in 
das Ausgabefenster vom AVR-Studio machen?

Grüße

Thomas

von Peter Diener (Gast)


Lesenswert?

Hallo,

ob man damit (virtuelle) serielle Schnittstellen emulieren kann, um 
Debuginfo zur Laufzeit rauszuholen, weiß ich nicht.

Beim PIC mit CCS Compiler geht es. Aber nicht über JTAG, sondern mit 
ICSP.

Was aber möglich ist, ist dass du die Info, die dich interessiert, in 
einen unbenutzten Arbeitsspeicherbereich ablegst und diesen per JTAG 
ausließt.

Besser ist für soetwas natürlich eine echte UART-Schnittstelle auf ein 
Terminal am PC.

Grüße,

Peter

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Es gibt ein Debugdatenregister, in das man was rein schreiben kann.
Das ist meines Wissens nur 7 bit breit.  Jedes Zeichen, was dort
hineingeschrieben wird, generiert im JTAG ICE ein "IDR dirty" event,
das der Debugger dann irgendwie auswerten kann.  Ich habe aber keine
Ahnung, was ein AVR Studio draus macht.  Auf jeden Fall generiert
jedes einzelne Zeichen ein Event, was dann doch zu einiger Kommuni-
kation zwischen ICE und Debugger führt.

Ich denke, dass entweder das Beschreiben eines Speicherblocks mit
sprintf oder die Benutzung der UART sinnvoller ist.

von Christof Hahn (Gast)


Lesenswert?

Kleine Korrektur zu meinem Vorredner:
  * Das Debugregister (OCDR) ist 8-Bit groß!
  * Es ist nur beschreibbar!

Beim Auslesen des Registers zeigt das 8'te Bit an, dass der Debugger das 
Byte abgeholt hat. Eine einfache Routine zum versenden von 
Debugnachrichten sieht dann wie folgt aus:
1
void outputDebugStr ( pchar aStr ) {
2
3
  int l = strlen ( aStr );
4
  int i;
5
6
  for ( i = 0 ; i < l ; i++ ) {
7
    OCDR = aStr [ i ];
8
    while ( ( OCDR & 0x80 ) != 0 ); 
9
  }
10
}

kleiner Wermutstropfen: AVR-Studio gibt die Bytes einzeln hoch in Form 
von  "JTAGICE mkII: IDR event 0xXX"-Ausgaben, und kann hält auch das 
nicht lange durch :-(. Vielleicht kennt ja jemand ein Tool oder Plugin 
für das AVR-Studio mit dem man Zeilen empfangen und darstellen kann.

von wiRe (Gast)


Lesenswert?

Bei meinem AVRdragon kommt immer nur die Meldung "AVR Dragon: IDR event 
0x00" nach jedem Zugriff auf das OCDR Register, unabhängig davon welchen 
Wert ich wirklich hineingeschrieben habe. Schade, dachte ich hätte damit 
eine Möglichkeit für einfache Debug-Ausgaben gefunden. Aber wie es 
aussieht kann das AVR Studio ja generell die empfangenen Daten nicht als 
reinen Text darstellen. Muss wohl doch der UART dafür herhalten.

von wiRe (Gast)


Lesenswert?

Ausgabe "0x00" kommt wohl nur beim schrittweise Ausführen. Lässt man den 
Debugger laufen (Run) dann entsprechen die angezeigten Hex-Werte auch 
dem wirklich geschriebenen Wert. Ist wohl ein Bug vom dragon oder 
AVRStudio.

von Thomas F. (thomas-hn) Benutzerseite


Lesenswert?

Kann mir das mal jemand bitte genau erklären wie ich die abgeschickten 
Debug-Nachrichten erhalten?

Ich habe in einem Beispielcode nun mal folgendes eingefügt:
1
OCDR = 0xAB;
2
while( OCDR & (1<<7) );

Damit sollte ja das OCDR beschrieben werden und anschließend soll er 
warten bis die Daten abgeholt wurden.
Das Ganze kompiliert auch problemlos und mein Programm läuft beim 
Debuggen problemlos....aber wo erscheinen meine Nachrichten dann? Also 
wo finde ich mein 0xAB?

Im Message-Window von AVR Studio kommt bei mir keine Nachricht?!?

Das Ganze wurde getestet mit einem ATmega16, STK500 und JTAGICEmkII.

Vielleicht kann mir einer auf die Sprünge helfen.

Vielen Dank schon mal,

Thomas

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.