Forum: Mikrocontroller und Digitale Elektronik STM32F4 debugging mit Eclipse unter Linux


von Jan (Gast)


Lesenswert?

Hallo zusammen!

Bin am verzweifeln: Seit zwei Tagen versuche ich den debugger für meinen 
Cortex-M4 zum laufen zu bringen (habe ein STM32F407 Discovery board, 
eclipse unter Ubuntu 12.04LTS), leider kein Erfolg :-(
Die toolchain funktioniert soweit, habe mit OpenOCD sogar flashen können 
(Programme kompilieren sauber), das klappt. Aber sobald ich debuggen 
möchte geht alles schief. Für OpenOCD gibt es anscheinen ungefähr 10000 
verschiedene init- und run-scripts für den arm-none-eabi-gdb, habe 
einige probierte aber irgendwie funktioniert nichts davon. Ich kann 
breakpoints setzen, aber die werden nicht beachtet, dann bleibt mal das 
Programm in der HardFault interrupt-Routine hängen, manchmal 
überschreibt es nicht das flash...
STLink utils gehen auch bei mir nicht, da wird anscheinend gar nichts 
ins flash geschrieben:
2013-11-13T16:11:21 ERROR src/stlink-common.c: flash loader run error
2013-11-13T16:11:21 ERROR src/stlink-common.c: 
run_flash_loader(0x8000000) failed! == -1
Und danach unendlich viele:
[!] send_recv
libusb_submit_transfer(-6)

Wer kann mir weiterhelfen? Bis jetzt habe ich immer mit ein paar LEDs 
mein debugging machen können, aber bei größeren Sachen wäre ein 
funktionierender debugger sicher von Vorteil, oder?

Vielen Dank!

Jan

von schnuhr (Gast)


Lesenswert?

>Für OpenOCD gibt es anscheinen ungefähr 10000
>verschiedene init- und run-scripts für den arm-none-eabi-gdb, habe

OpenOCD: Warum geht stm32f4discovery.cfg nicht?

Und bevor Du gdb + OpenOCD (oder st-util)  am Laufen hast, brauchst Du
mit Eclipse gar nicht kommen.

- OpenOCD starten
- gdb starten, dann:

(gdb) target remote :3333
(gdb) load ...
(gdb) continue
....

auf der gdb Kommandozeile.

>einige probierte aber irgendwie funktioniert nichts davon.

>Und danach unendlich viele:
>[!] send_recv
>libusb_submit_transfer(-6)

hast Du auch mal einen anderen USB Port benutzt?

Und startest OpenOCD oder das ST-Link Util mit Root-Rechten (sudo)?
(geht auch ohne, das kannst Du aber fixen, wenn's mit sudo funkt)

von Jan (Gast)


Lesenswert?

Hallo schnuhr!

Vielen Dank für Deine Antwort, hier mal die manuelle gdb Ausgabe:

(gdb) target remote :3333
Remote debugging using :3333
0x080004be in __SPI_RwDirReg (reg_addr=<optimized out>, 
reg_data=<optimized out>, dir_spi_cmd=dir_spi_cmd@entry=128 '\200')
    at ../src/spi_master.c:487
487      while(SPIMCmdStatus != SPIM_IDLE) {
(gdb) load SensorV1p2.elf
Loading section .isr_vector, size 0x188 lma 0x8000000
Loading section .text, size 0xc54 lma 0x8000188
Loading section .init_array, size 0x8 lma 0x8000ddc
Loading section .fini_array, size 0x4 lma 0x8000de4
Loading section .data, size 0x448 lma 0x8000de8
Error finishing flash operation
(gdb)


Neue Erkenntnis: Wenn ich vor dem debuggen per openocd manuell flashe, 
klappt es auch mit dem debuggen, ansonsten der gleiche Fehler wie oben 
:-( Was mag da nur schiefgehen?

von Jan (Gast)


Lesenswert?

Jetzt nochmal mit frisch gestartetem OpenOCD:

gdb Ausgabe:

(gdb) target remote :3333
Remote debugging using :3333
0x00000000 in ?? ()
(gdb) load SensorV1p2.elf
Error erasing flash with vFlashErase packet
(gdb)

OpenOCD Konsole:

Open On-Chip Debugger 0.7.0 (2013-11-06-10:29)
Licensed under GNU GPL v2
For bug reports, read
  http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v14 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : Target voltage: 2.931265
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'gdb' connection from 3333
Info : device id = 0x10016413
Info : flash size = 1024kbytes
Warn : acknowledgment received, but no packet pending
undefined debug reason 6 - target needs reset
Error: Target not halted
Error: failed erasing sectors 0 to 0
Error: flash_erase returned -304

von Mar V. (marvol)


Lesenswert?

Hallo,

was ich spontan gefunden habe ist der Port, in der Beschreibung wird der 
Port 4242 verwendet:

http://www.mikrocontroller.net/articles/STM32F4-Discovery#Debugging_mit_GDB

Gruß
Marvol

von Jim M. (turboj)


Lesenswert?

Da fehlt IMO das "reset init" vor dem flashen.

von Mar V. (marvol)


Lesenswert?

Hast Du mal primitive Befehle ausprobiert?

Hier ganz gut beschrieben:

https://github.com/texane/stlink/blob/master/doc/tutorial/tutorial.pdf?raw=true

von Leo C. (rapid)


Lesenswert?

Jan schrieb:
> gdb Ausgabe:
>
> (gdb) target remote :3333
  (gdb) monitor reset halt
> (gdb) load SensorV1p2.elf

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.