Forum: Mikrocontroller und Digitale Elektronik AVaRice DebugWire Breakpoints


von Benjamin K. (exs)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

es gibt ja schon einige uralte Threads dazu, die haben mir aber nicht 
wirklich weiter geholfen.

Meine Tools
1
AVaRice version 2.14svn2020906
2
GNU gdb (GDB) 10.1.90.20210103-git
3
avrdude version 6.3-20171130, URL: <http://savannah.nongnu.org/projects/avrdude/>

Ich bin mit Linux unterwegs.

Ich nutze eine AVR JTAGmkII mit dem Controller AT90USB162 (Nostalgie pur 
:-) ) Das Programm ist in Assembler geschrieben und wird mit GNU-GCC 
(Preprozessor) und GNU-AS erstellt.
Ich hätte auch noch einen AVR Dragon - falls das grundsätzlich etwas 
ändert.

Ich kann mit
1. avrdude das Binary auf den Controller flashen und die DebugWire Fuse 
programmieren
2. avarice eine Debug-Session starten
3. avr-gdb durch das Programm steppen und breakpoints setzen

Ich habe mehrere Probleme:
1. Breakpoints werden ignoriert
2. Continue-Befehl stoppt nicht mehr, außer durch CTRL-C
3. Advance-Befehl stoppt nicht mehr, außer durch CTRL-C

Das sind die Kommandozeilen die ich nutze:
1
# Debug wire einschalten
2
avrdude -v -c jtag2isp -p at90usb162 -U hfuse:w:0x59:m
3
4
# Versorgung DUT aus und wieder ein
5
6
# Debug-Server starten
7
avarice -vvvv --debug --mkII --debugwire --ignore-intr --jtag usb --part at90usb162 :4242
8
9
# Debug-Client starten
10
avr-gdb -x cfg/debug/start



Laut GDB sind folgende breakpoints gesetzt
1
(gdb) info break
2
Num     Type           Disp Enb Address    What
3
1       breakpoint     del  y   0x00000000 /home/benny/Projekte_lokal/02_Coding/02_avr_at90usb162/USB/trunk/USB_Serial
4
_ASM/bin/pre/main.i:960
5
2       breakpoint     keep y   0x00000660 /home/benny/Projekte_lokal/02_Coding/02_avr_at90usb162/USB/trunk/USB_Serial
6
_ASM/bin/pre/main.i:3049
7
(gdb) advance main
8
9
Program received signal SIGINT, Interrupt.
10
SPIaddr () at /home/benny/Projekte_lokal/02_Coding/02_avr_at90usb162/USB/trunk/USB_Serial_ASM/bin/pre/main.i:1074
11
(gdb) si
12
main () at /home/benny/Projekte_lokal/02_Coding/02_avr_at90usb162/USB/trunk/USB_Serial_ASM/bin/pre/main.i:3050

Wie man sehen kann, wird bei main nicht angehalten. Außerdem landet der 
GDB beim Schrittweise durchgehen immer wieder beim ISR-Handler von SPI. 
Mit dem nächsten Schritt dann wieder ganz normal in der nächsten 
Programmzeile. Liegt vermutlich an den aktivierten Interrupts, wobei nur 
die USB-Interrupts eingeschaltet sind. Den Hardware-Watchdog habe ich 
auch schon ausgeschaltet.

Der Breakpoint wird wohl auch durch AVaRice gesetzt:
1
GDB: (Registers)Read 32 bytes from 0x800000
2
jtagRead 
3
command[0x05, 1]: 05 20 20 00 00 00 00 00 00 00 
4
recv: 0x1b
5
recv: 0x17
6
recv: 0x00
7
recv: 0x21
8
recv: 0x00
9
recv: 0x00
10
recv: 0x00
11
recv: 0x0e
12
sDATA: reading 33 bytes
13
read:  82 aa f6 40 20 00 40 00 02 08 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 06 03 00 00 04 80 00
14
recv: 0xe1
15
recv: 0x63
16
CRC OK
17
Got message seqno 23 (command_sequence == 23)
18
response: 82 AA F6 40 20 00 40 00 02 08 00 00 00 00 00 00 00 02 00 00 00 00 00 00 02 00 06 03 00 00 04 80 00 
19
jtagRead 
20
command[0x05, 1]: 05 20 03 00 00 00 5D 00 00 00 
21
recv: 0x1b
22
recv: 0x18
23
recv: 0x00
24
recv: 0x04
25
recv: 0x00
26
recv: 0x00
27
recv: 0x00
28
recv: 0x0e
29
sDATA: reading 4 bytes
30
read:  82 fd 02 02
31
recv: 0xb8
32
recv: 0xe3
33
CRC OK
34
Got message seqno 24 (command_sequence == 24)
35
response: 82 FD 02 02 
36
PC = 5ec
37
->GDB: aaf640200040000208000000000000000200000000000002000603000004800002fd02ec050000
38
GDB: <Z1,0,2>
39
BP ADD type: 1  addr: 0x0 ->GDB: OK
40
GDB: <Hc0>
41
->GDB: 
42
GDB: <c>
43
Breakpoint added in ICE. slot: 0  type: 1  addr: 0x660

Ich habe irgendwo gelesen, dass DebugWire gar keine Hardware-Breakpoints 
unterstützt sondern diese nur bei JTAG verfügbar sind - Ist das korrekt?

Das Log des AVaRice habe ich angehangen. Vielleicht weiß jemand ja 
weiter. Den AI-Overlord habe ich auch schon konsultiert, die Ergebnisse 
waren aber nur mit äußerster Vorsicht zu genießen

Und falls einer fragt: Ja, ich musste den Controller schon mit HVPP 
"retten", verdammtes RSTDISBL-Fuse ...

Vielleicht hat ja einer noch eine Idee dazu

Danke und Gruß

: Bearbeitet durch User
von Alexander S. (alesi)


Lesenswert?

Benjamin K. schrieb:
> Ich habe irgendwo gelesen, dass DebugWire gar keine Hardware-Breakpoints
> unterstützt sondern diese nur bei JTAG verfügbar sind - Ist das korrekt?

Ja, das ist korrekt. Quelle: 
https://www.mikrocontroller.net/articles/DebugWIRE

Unter "Protokoll"
"... Anders als JTAG besitzt debugWIRE keine Breakpoint-Möglichkeiten in 
der CPU-Hardware, damit können Breakpoints nur über das Einfügen von 
BREAK-Befehlen in den Flash-ROM-Inhalt realisiert werden 
(Software-Breakpoint). ..."

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.