Ich habe ein Programm auf einem STM32L1 am Laufen, das ein paar
Variablen im EEPROM speichert. Um das Speichern zu überprüfen sehe ich
mir den EEPROM-Inhalt während einer Debug-Session an und stelle fest,
dass sich die Werte wie erwartet ändern.
Dann beende ich das Debugging, mache die Spannungsversorgung (USB) aus
und wieder an, starte eine Debug-Session und schaue mir den
EEPROM-Inhalt erneut an, bevor der uC wirklich losläuft (Breakpoint bei
main). Die Werte von vorhin stehen noch immer im EEPROM. Lasse ich den
uC jetzt loslaufen, werden die Werte richtig ausgelesen.
Läuft der STM32 jedoch ohne kurzes Debugging los, liest er immer nur 0
aus dem EEPROM aus.
Zum Debuggen benutze ich eine Blackmagic Probe mit der neusten Firmware.
Führe ich damit folgende Schritte durch, läuft es anschließend ebenfalls
wie erwartet:
1 | arm-none-eabi-gdb
|
2 | GNU gdb (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 8.0.50.20171128-git
|
3 | (gdb) tar ext /dev/ttyACM0
|
4 | Remote debugging using /dev/ttyACM0
|
5 | (gdb) mon s
|
6 | Target voltage: 3.3V
|
7 | Available Targets:
|
8 | No. Att Driver
|
9 | 1 STM32L1x M3
|
10 | (gdb) att 1
|
11 | Attaching to Remote target
|
12 | warning: No executable has been specified and target does not support
|
13 | determining executable automatically. Try using the "file" command.
|
14 | 0x08004fb0 in ?? ()
|
15 | (gdb) r
|
16 | The program being debugged has been started already.
|
17 | Start it from the beginning? (y or n) y
|
18 | Starting program:
|
19 | warning: No executable has been specified and target does not support
|
20 | determining executable automatically. Try using the "file" command.
|
21 | ^C
|
22 | Program received signal SIGINT, Interrupt.
|
23 | 0x08002c1e in ?? ()
|
24 | (gdb) quit
|
25 | A debugging session is active.
|
26 |
|
27 | Inferior 1 [Remote target] will be killed.
|
28 |
|
29 | Quit anyway? (y or n) y
|