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
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
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.