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ß