So, ich hab weiter gemacht und mir ist etwas aufgefallen.
Gestern habe ich ja sämtliche Funktionsaufrufe auskommentiert und hatte
nur noch die Endlosschleife (siehe gestriger Post) in der main().
Trotzdem hing der Debugger irgendwo in den LCD-Routinen.
Mittlerweile hab ich nur noch die main.c im makefile eingetragen. D.h.
der Debugger kann garnix mehr kennen ausser der main().
So, jetzt hänge ich irgendwo im StartupCode. An Adresse 0x08.
Hm, dort liegt doch eigentlich die Vectortabelle für die ISR?
In der Tat steht im Listing:
1 | 0: 0c 94 46 00 jmp 0x8c ; 0x8c <__ctors_end>
|
2 | 4: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
3 | 8: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
4 | c: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
5 | 10: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
6 | 14: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
7 | 18: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
8 | 1c: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
9 | 20: 0c 94 5d 00 jmp 0xba ; 0xba <__bad_interrupt>
|
Jetzt wirds seltsam. ddd bietet ja die Möglichkeit, sich einen
Assemblerdump anzeigen zu lassen. Dort finde ich:
1 | Dump of assembler code for function __vectors:
|
2 | => 0x00000000 <+0>: ldi r24, 0x25 ; 37
|
3 | 0x00000002 <+2>: ldi r25, 0x00 ; 0
|
4 | 0x00000004 <+4>: movw r30, r24
|
5 | 0x00000006 <+6>: st Z, r1
|
6 | 0x00000008 <+8>: ldi r24, 0x00 ; 0
|
7 | 0x0000000a <+10>: ldi r25, 0x80 ; 128
|
8 | 0x0000000c <+12>: ldi r26, 0x3B ; 59
|
9 | 0x0000000e <+14>: ldi r27, 0x45 ; 69
|
Meinen altbekannten "Stopblitz" finde ich an der Adresse 0x08.
So, irgendwas passt doch hier nicht.
Die elf-Datei, die ich ddd übergebe, ist die allerselbe wie auf dem
Prozessor aufgespielt wird (und die zum Listing passt).
Dennoch passt der Dump nicht zu meinem Listing.
Kann daher das Problem kommen?
Grüße,
lex