Forum: Mikrocontroller und Digitale Elektronik STM32 mit Eclipse+GDB debuggen


von Helge K. (helgek)


Lesenswert?

Hallo,

ich habe mir eine Toolchain für die STM32 Entwicklung (STM32F103 Serie) 
zusammengestellt, bestehend aus Eclipse Indigo+GDB Hardware 
Debugging+Codesourcery GCC+Segger J-Link GDB Server (unter Windows).

Der Segger J-Link GDB Server läuft auch soweit gut und ich kann den 
STM32 auch flashen und anhalten und mir Variablen in der Debug 
Perspective anschauen, aber das Setzen von Breakpoints über die Eclipse 
GUI funktioniert nicht. Er setzt die Breakpoints zwar, aber schaltet sie 
sofort wieder ab:
1
112-break-insert Main.c:98
2
112^done,bkpt={number="3",type="breakpoint",disp="keep",enabled="y",addr="0x08002c26",
3
func="main",file="Main.c",fullname="c:\\..\\source\\Main.c",line="98",times="0",original-location="Main.c:98"}
4
(gdb) 
5
113-break-disable 3
In der letzten Zeile sieht man das Problem, das der Breakpoint gleich 
abgeschaltet wird, obwohl das gar nicht gewollt ist. Und das, obwohl in 
der Eclipse GUI der Breakpoint auch als enabled angezeigt wird.

Hat jemand eine Idee, wie ich das in den Griff bekommen kann?

von Sven Wagner (Gast)


Lesenswert?

Helge K. schrieb:
> Hat jemand eine Idee, wie ich das in den Griff bekommen kann?
Funktioniert es denn, wenn Du den gdb zu Fuß aufrufst?
Ungefähr so:
1
gdb> target remote localhost:2331
2
gdb> load program.elf
3
gdb> file program.elf
4
gdb> break main
5
gdb> continue

Grüße
Sven

von hp-freund (Gast)


Lesenswert?


von Helge K. (helgek)


Lesenswert?

Also ich habe auf jeden Fall das Feature "Flash Breakpoints", siehe 
J-Link EDU GDB Server log:
1
SEGGER J-Link GDB Server V4.28c
2
3
JLinkARM.dll V4.28c (DLL compiled Jul  1 2011 14:23:12)
4
5
Listening on TCP/IP port 2331
6
7
J-Link connected
8
Firmware: J-Link ARM V8 compiled Jul  1 2011 12:02:49
9
Hardware: V8.00
10
S/N: 2xxx0xxx7
11
OEM: SEGGER-EDU
12
Feature(s): FlashBP
13
14
J-Link found 2 JTAG devices, Total IRLen = 9
15
JTAG ID: 0x3BA00477 (Cortex-M3)
16
17
Free mode: To be used for non-commercial and evaluation purposes only.
18
19
Connected to 127.0.0.1
20
Reading all registers
21
Read 4 bytes @ address 0x00000000 (Data = 0x20005000)
22
Select JTAG as target interface
23
JTAG speed set to 2000 kHz
24
Select flash device: STM32F103RB
25
Flash breakpoints enabled
26
Flash download enabled
27
Target endianess set to "little endian"
28
Resetting target
29
Downloading 16208 bytes @ address 0x08000000
30
Downloading 16192 bytes @ address 0x08003F50
31
Downloading 16144 bytes @ address 0x08007E90
32
Downloading 16192 bytes @ address 0x0800BDA0
33
Downloading 7328 bytes @ address 0x0800FCE0
34
Downloading 888 bytes @ address 0x08011980
35
Downloading 352 bytes @ address 0x08011CF8
36
Writing register (PC = 0x080075D0)
37
Writing register (CPSR = 0x01000020)
38
Read 4 bytes @ address 0x080075D0 (Data = 0xF0204668)
39
Read 2 bytes @ address 0x08002ED2 (Data = 0xF7FE)
40
Writing register (SP = 0x20005000)
41
Writing register (PC = 0x080075D1)
42
Resetting target
43
Starting target CPU...
44
---> Hier füge ich Breakpoint über Eclipse ein
45
Debugger requested to halt target...
46
...Target halted (PC = 0x08007002)
47
Reading all registers
48
Read 4 bytes @ address 0x08007002 (Data = 0x4B13881A)
49
Read 2 bytes @ address 0x08002EDA (Data = 0xF004)
50
Starting target CPU...
51
Debugger requested to halt target...
52
...Target halted (PC = 0x0800720C)
53
Reading all registers
54
Read 4 bytes @ address 0x0800720C (Data = 0xD01E429A)
55
Reading 64 bytes @ address 0x20004FC0
56
Read 4 bytes @ address 0x08002EE2 (Data = 0xFDB3F7FF)
57
Reset target CPU...
58
Connection closed!

Folgende Einstellungen nutze ich unter Debug Configurations/GDB Hardware 
Debugging/Startup:
1
target remote localhost:2331
2
monitor interface JTAG
3
monitor speed 2000
4
monitor flash device = STM32F103RB
5
monitor flash breakpoints = 1
6
monitor flash download = 1
7
monitor endian little
8
monitor reset
9
10
monitor reg r13 = (0x00000000)
11
monitor reg pc = (0x00000004)
12
monitor reset
13
continue

Es funktioniert, wenn ich dort unter "Set breakpoint at:" z.B. main 
angebe, dann wird der Breakpoint auch gesetzt und der Prozessor hält 
dort an. Aber die Breakpoints, die ich über Eclipse einfüge werden wie 
im Log von meinem ersten Post gezeigt einfach sofort wieder deaktiviert.

Ich habe schon gefühlte 8 Stunden danach gegoogelt, aber nichts 
verwertbares gefunden.

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.