Debug-Ausgaben über JTAG an AVR-Studio

Gast #1028568
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
Moderator Persönliche Seite #1028682
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.
Gast #1039003
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.
Gast #1046096
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.
Gast #1046105
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.
Persönliche Seite #1076184
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren