Hallo,
ich habe folgendes Problem beim Debuggen mit Eclipse/Gdb/Open-OCD und
meinem ST32F3 Discovery Board.
Im Flash habe ich eine Library mit diversen Funktionen. Die
Startadressen der Funktionen sind bekannt, die Funktionen sind getestet.
Meine Entwicklungsumgebung ist so aufgebaut, dass das Executable ins RAM
gelinkt wird. Dabei werden die Lib-Funktionen im Flash über
Funktionspointer angesprungen.
Wenn ich eine Debug-Session mit meiner Applikation (im RAM) starte,
funktioniert das Debuggen solange, bis ich eine Funktion aus der Lib
aufrufen will. Sobald ich die Funktion im Flash anspringen will, landet
der Debugger in einer Exception (WWDG_IRQHandler).
Ich habe einen Break-Point auf den Funktionsaufruf gesetzt. Der Aufruf
sieht OK aus, die Stelle an die gesprungen werden soll auch.
Der Assembler-Code sieht so aus:
In R3 steht 0x08001428. :-(
Der Tip war schon mal gut ;-)
Ok, ich hab's geändert, jetzt steht zwar 0x08001429 drin und der Code
läuft durch. Trotzdem werden die Befehle vom Debugger falsch dekodiert
(wie oben beschrieben).
Hi Bernd,
kann der Debugger nur den source der Lib nicht anzeigen? wenn ja hast du
die symbole von dem Lib geladen? (gdb cmd: file ./blalib.elf)
MfG
Tec
>kann der Debugger nur den source der Lib nicht anzeigen?
Das *.els der Lib sind nicht geladen. Daher auch keine Symbole.
Das ist aber auch logisch und Ok.
Was mich allerdings etwas stört ist, dass der Debugger die
Assemblerbefehle der Lib nicht richtig anzeigt. Kann man ihm irgendwie
sagen, dass von Adresse_x bis Aresse_y auch ausführbarer Code (mit
Thumb-Befehlen) zu finden ist?
Wenn ja wie ?
Ich hatte ja schon geschrieben was passiert:
Debugger-Anzeige:
1
0x08001428:;<UNDEFINED>instruction:0x4604b5f8
2
0x0800142c:cmnltr8,r0,lsr#16
3
0x08001430:tstler9,r11,lslr8
4
0x08001434:strbcsr4,[r0],-r7,lsl#26
5
0x08001438:stmdavcr0!,{r1,r2,r3,r5,r8,r10,pc}^
List-File:
1
8001428:b5f8push{r3,r4,r5,r6,r7,lr}
2
800142a:4604movr4,r0
3
800142c:7820ldrbr0,[r4,#0]
4
800142e:b178cbzr0,8001450<LCD_Send_String+0x28>
Ich hätte erwartet, dass der Debugger die Befehle genau so anzeigt wie
sie im List-File stehen, egal ob ein *.elf geladen ist oder nicht.
Bernd