Forum: Mikrocontroller und Digitale Elektronik Eclipse mit Black Magic Probe


von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

Zum ARM debuggen habe ich einen STLink Clone zur Black Magic Probe 
umprogrammiert und das funktioniert auch. Die Einstellung war etwas 
fummelig, es funktioniert jetzt so wie in dem angehängten Dialog für 
'GDB Hardware Debugging' eingestellt.
Dabei stört mich nur eine kleine Sache: nach dem Start der debug session 
wird das target angehalten und steht an einer zufälligen Stelle. Beim 
debuggen über OpenOCD wird das Programm von Reset bis zum ersten 
Breakpoint 'main' ausgeführt. Mit der BMP muss ich immer zuerst den 
'restart' Button in der IDE drücken damit der Code von Reset an 
gestartet wird. Das dürften ja nur gdb Kommandos in dem 'Run Commands' 
Feld sein, aber ich habe noch nicht gefunden welche. ein 'run' oder 
'jump *0 run' funktionieren nicht. Die Kommunikation IDE-gdb läuft auch 
versteckt, ich sehe jedenfalls nicht was beim 'restart' button ausgelöst 
wird. Wie bekomme ich den gdb dazu den reset auszuführen?

von pegel (Gast)


Lesenswert?

Was ist mit den ersten beiden Häkchen ganz oben?

von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

die dürfen nicht gesetzt sein weil die Verbindung dann noch nicht steht. 
Im Anhang ist noch der andere Config Tab für den Debugger. Die anderen 
Startmöglichkeiten die es da gibt funktionieren aber auch nicht, BMP 
möchte über das target-extended verbunden werden.

von pegel (Gast)


Lesenswert?

Und wenn du hinter

attach 1

noch die normalen GDB Befehle setzt wie:


    monitor reset halt

    monitor reset init

    continue

von Johannes S. (Gast)


Lesenswert?

diese Kommandos versteht BMP nicht:
1
(gdb) monitor reset halt
2
Target does not support this command.
3
(gdb) monitor reset init
4
Target does not support this command.
5
(gdb) jump *0x800000
6
Continuing at 0x800000.
7
8
Program received signal SIGSEGV, Segmentation fault.
9
0x00800000 in ?? ()
10
(gdb) jump *0x8000000
11
Continuing at 0x8000000.
12
13
Program received signal SIGSEGV, Segmentation fault.
14
0x41000000 in ?? ()
15
(gdb)

Ein Jump auf eine Startadresse kann aber auch nicht richtig sein, 
irgendwie muss der Debugger ja einen richtigen reset auslösen.

Mit 'monitor connect_srst enable' hängt der gdb nach dem attach, das 
geht auch nicht.

von pegel (Gast)


Lesenswert?

Und einzeln?

monitor reset
monitor halt

usw.

Welche kann er denn?

von pegel (Gast)


Lesenswert?


von Johannes S. (Gast)


Lesenswert?

irgendwie wenig, aber das debuggen funktioniert ja trotzdem und der 
'restart' button der IDE kann das auch irgendwie :(
1
(gdb) moni reset
2
Target does not support this command.
3
(gdb) moni halt
4
Target does not support this command.
5
(gdb) monitor help
6
General commands:
7
        version -- Display firmware version info
8
        help -- Display help for monitor commands
9
        jtag_scan -- Scan JTAG chain for devices
10
        swdp_scan -- Scan SW-DP for devices
11
        targets -- Display list of available targets
12
        morse -- Display morse error message
13
        connect_srst -- Configure connect under SRST: (enable|disable)
14
        hard_srst -- Force a pulse on the hard SRST line - disconnects target
15
        traceswo -- Start trace capture
16
ARM Cortex-M specific commands:
17
        vector_catch -- Catch exception vectors
18
STM32F40x specific commands:
19
        erase_mass -- Erase entire flash memory
20
        option -- Manipulate option bytes
21
        psize -- Configure flash write parallelism: (x8|x32(default))
22
(gdb)

von Johannes S. (Gast)


Lesenswert?

pegel schrieb:
> Vielleicht bietet das die Lösung.

Das sind openOCD spezifische Kommandos, die reicht der gdb ja nur 
weiter. Trotzdem schonmal Danke für die Hilfe.

von pegel (Gast)


Lesenswert?

Kannst du eine Log Datei speichern und darin nachsehen wie der das 
macht?

von pegel (Gast)


Lesenswert?

Johannes S. schrieb:
> Das sind openOCD spezifische Kommandos

nicht nur, BMP spezifische sind auch dabei.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Probier doch erst mal das ganze im Terminal. "tar ext ...; mon s; attach 
1" und poste die Aussagen.

von Johannes S. (Gast)


Lesenswert?

stimmt, soweit habe ich da nicht runtergescrollt.

Habe das Zauberwort jetz aber gefunden: flushregs. Also in dem dem 'Run 
Commands' Fenster:
1
flushregs
2
run

ja, Eclipse/OOCD/BMP/gdb ist ein riesiges Puzzle, jeden Tag ein kleines 
Stückchen weiter :-)

So klappt es scheinbar, und BMP ist auch sehr fix.
Irgendwo müsste es in Eclipse auch zu sehen sein wie mit dem gdb 
gesprochen wird, aber das habe ich noch gefunden. Flushregs hatte ich 
hier gefunden: https://www.eclipse.org/forums/index.php/t/202861/

von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

Uwe B. schrieb:
> Probier doch erst mal das ganze im Terminal.

hatte ich gemacht, daher kamen die obigen Ausgaben.

Im Anhang nochmal der Dialog mit den hoffentlich richtigen 
Einstellungen.

Jetzt bleibt nur noch das Mysterium mit dem 'connect_srst'. Einen Reset 
sehe ich auf der sRST Leitung, die Hardware sollte bedient werden. Ein 
'kill' zum Debugger beenden löst auch einen Reset aus wie es 
dokumentiert ist.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Wo sind die Ausgaben der Befehle?

von Johannes S. (Gast)


Lesenswert?

da zB: Beitrag "Re: Eclipse mit Black Magic Probe"

die Connection hatte ich nicht kopiert, die funktioniert ja, aber hier 
ist der Anfang:
1
D:\Projects\Sn\LocalGit\mbed-os-blinky_STM32F407VE\mbed-os-example-blinky_STM32F407VE\Debug>"c:\Program Files (x86)\GNU Tools ARM
2
Embedded\7 2017-q4-major\bin\arm-none-eabi-gdb.exe"
3
GNU gdb (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 8.0.50.20171128-git
4
Copyright (C) 2017 Free Software Foundation, Inc.
5
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
6
This is free software: you are free to change and redistribute it.
7
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
8
and "show warranty" for details.
9
This GDB was configured as "--host=i686-w64-mingw32 --target=arm-none-eabi".
10
Type "show configuration" for configuration details.
11
For bug reporting instructions, please see:
12
<http://www.gnu.org/software/gdb/bugs/>.
13
Find the GDB manual and other documentation resources online at:
14
<http://www.gnu.org/software/gdb/documentation/>.
15
For help, type "help".
16
Type "apropos word" to search for commands related to "word".
17
(gdb) tar ext \\.\COM17
18
Remote debugging using \\.\COM17
19
(gdb) mon swd
20
Target voltage: unknown
21
Available Targets:
22
No. Att Driver
23
 1      STM32F40x
24
(gdb) att 1
25
Attaching to Remote target
26
warning: No executable has been specified and target does not support
27
determining executable automatically.  Try using the "file" command.
28
0x08007fba in ?? ()
29
(gdb)

Nach dem Attach steht der Debugger irgendwo im angehaltenen programm.
Ich habe gerade mal versucht herauszubekommen was OOCD beim reset-init 
macht, habe das aber nicht gefunden.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Starte am besten gdb mit dem <xxx>.elf file oder lade das File in dem 
Zustand oben mit "file <xxx>.elf. Dann ein "r" fuer reboot oder "s" fuer 
step  oder "n" fuer next.

von Johannes S. (Gast)


Angehängte Dateien:

Lesenswert?

'r' ist run, in der Eclipse Debuggerconfig reicht das eben nicht. In der 
Kommandozeile geht es, also scheint es ein eclipse Problemchen zu sein. 
Das ist reproduzierbar, ohne 'flushregs' geht es in eclipse nicht. Oder 
das 'run' wird da nicht richtig ausgeführt. In der Kommandozeile muss 
ich das run mit y bestätigen.
1
(gdb) tar ext \\.\COM17
2
Remote debugging using \\.\COM17
3
(gdb) mon swd
4
Target voltage: unknown
5
Available Targets:
6
No. Att Driver
7
 1      STM32F40x
8
(gdb) att 1
9
Attaching to Remote target
10
warning: No executable has been specified and target does not support
11
determining executable automatically.  Try using the "file" command.
12
0x080005e8 in ?? ()
13
(gdb) file mbed-os-example-blinky_STM32F407VE.elf
14
A program is being debugged already.
15
Are you sure you want to change the file? (y or n) y
16
Reading symbols from mbed-os-example-blinky_STM32F407VE.elf...done.
17
(gdb) b main
18
Breakpoint 1 at 0x800e050: file ../main.cpp, line 59.
19
(gdb) run
20
The program being debugged has been started already.
21
Start it from the beginning? (y or n) y
22
Starting program: D:\Projects\Sn\LocalGit\mbed-os-blinky_STM32F407VE\mbed-os-example-blinky_STM32F407VE\Debug\mbed-os-example-blin
23
ky_STM32F407VE.elf
24
Note: automatically using hardware breakpoints for read-only addresses.
25
26
Breakpoint 1, main () at ../main.cpp:59
27
59          Serial com1 (PA_9, PA_10, 115200);
28
(gdb) n
29
60          StopWatch    stopWatch;
30
(gdb) n
31
62          DigitalOut led1 (LED_D2);
32
(gdb) n
33
63          DigitalOut led2 (LED_D3);
34
(gdb) n
35
65          Adafruit_TFTLCD_16bit_STM32 tft (NC);
36
(gdb)

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.