Forum: Mikrocontroller und Digitale Elektronik STM32F103C8 J-Link "Read 4 Bytes @" endlos bei Brakpoint


von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche gerade ein "Blue Pille" Board (STM32F103C8) mit einem zu 
einem J-link umgeflashen ST-link von einem Nucleo 64 Board zu debuggen.
Als IDE verwende ich SW4STM32

Dabei ergibts sich folgendes Problem:
Die Software (siehe anhang oder Codeschnipsel) kann von mir 
ordnungsgemäß geflash werden und läuft ohne debugger auch sprich die Led 
blink 4 mal Pro Sekunde.

DefaultTask:
1
void StartDefaultTask(void const * argument)
2
{
3
    
4
    
5
    
6
7
  /* USER CODE BEGIN 5 */
8
  /* Infinite loop */
9
  for(;;)
10
  {
11
    osDelay(250);
12
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
13
  }
14
  /* USER CODE END 5 */ 
15
}

Wenn ich jetzt einen Brakepoint einfüge z.B. Bei osDelay(250);
Führt dieses zu einem Absturz des Target.
Der Debugger liest dabei in einem endlos Loop folgende Daten vom Target:
1
Read 4 bytes @ address 0x20000534 (Data = 0x080048D5)
2
Read 4 bytes @ address 0x20000534 (Data = 0x080048D5)
3
Read 4 bytes @ address 0x20000534 (Data = 0x080048D5)
4
Read 4 bytes @ address 0x20000534 (Data = 0x080048D5)
5
Read 4 bytes @ address 0x080048D4 (Data = 0x2300B082)

Dabei geht die Kontrolle Über das Target verloren und ich kann die IDE 
Debuggerverbindung nicht mehr benutzen ("skipp all breakpoints" bleibt 
folgenlos)

Bis zum Start des FreeRTOS funktioniert das Debugging aber wie erwartet.

Die BOOT Pins habe ich auf LOW gesetzt

Ich komme leider nicht mehr weiter und hoffe das Ihr mir helfen könnt 
das Problem zu lösen.

beste Grüße Bene

L_link Flash log
1
SEGGER J-Link GDB Server V6.44d Command Line Version
2
3
JLinkARM.dll V6.44d (DLL compiled Mar 27 2019 17:08:23)
4
5
Command line: -if swd -device STM32F103C8 -endian little -speed auto -port 2331 -swoport 2332 -telnetport 2333 -vd -ir -localhostonly 1 -singlerun -strict -timeout 0 -nogui
6
-----GDB Server start settings-----
7
GDBInit file:                  none
8
GDB Server Listening port:     2331
9
SWO raw output listening port: 2332
10
Terminal I/O port:             2333
11
Accept remote connection:      localhost only
12
Generate logfile:              off
13
Verify download:               on
14
Init regs on start:            on
15
Silent mode:                   off
16
Single run mode:               on
17
Target connection timeout:     0 ms
18
------J-Link related settings------
19
J-Link Host interface:         USB
20
J-Link script:                 none
21
J-Link settings file:          none
22
------Target related settings------
23
Target device:                 STM32F103C8
24
Target interface:              SWD
25
Target interface speed:        auto
26
Target endian:                 little
27
28
Connecting to J-Link...
29
J-Link is connected.
30
Firmware: J-Link STLink V21 compiled Jun 26 2017 10:35:16
31
Hardware: V1.00
32
S/N: 774639621
33
Checking target voltage...
34
Target voltage: 3.30 V
35
Listening on TCP/IP port 2331
36
Connecting to target...Connected to target
37
Waiting for GDB connection...Connected to 127.0.0.1
38
Reading all registers
39
Read 4 bytes @ address 0x00000000 (Data = 0x20005000)
40
Read 2 bytes @ address 0x00000000 (Data = 0x5000)
41
Received monitor command: speed 1000
42
Target interface speed set to 1000 kHz
43
Received monitor command: clrbp
44
Received monitor command: reset
45
Resetting target
46
Received monitor command: halt
47
Halting target CPU...
48
...Target halted (PC = 0x08001BD0)
49
Received monitor command: regs
50
R0 = 00000000, R1 = 20000374, R2 = 10000000, R3 = 00002000
51
R4 = 00000000, R5 = 00000000, R6 = 00000000, R7 = 00000000
52
R8 = 00000000, R9 = 00000000, R10= 00000000, R11= 00000000
53
R12= 00000000, R13= 20005000, MSP= 20005000, PSP= 20000358
54
R14(LR) = FFFFFFFF, R15(PC) = 08001BD0
55
XPSR 01000000, APSR 00000000, EPSR 01000000, IPSR 00000000
56
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
57
Reading all registers
58
Read 4 bytes @ address 0x08001BD0 (Data = 0xE0032100)
59
Read 2 bytes @ address 0x08001BD0 (Data = 0x2100)
60
Received monitor command: speed auto
61
Select auto target interface speed (2000 kHz)
62
Received monitor command: flash breakpoints 1
63
Flash breakpoints enabled
64
Received monitor command: semihosting enable
65
Semi-hosting enabled (Handle on BKPT)
66
Received monitor command: semihosting IOClient 1
67
Semihosting I/O set to TELNET Client
68
Received monitor command: SWO DisableTarget 0xFFFFFFFF
69
SWO disabled successfully.
70
Received monitor command: SWO EnableTarget 0 0 0x1 0
71
SWO enabled successfully.
72
Read 4 bytes @ address 0x08001BD0 (Data = 0xE0032100)
73
Downloading 268 bytes @ address 0x08000000 - Verified OK
74
Downloading 4096 bytes @ address 0x08000110 - Verified OK
75
Downloading 2940 bytes @ address 0x08001110 - Verified OK
76
Downloading 84 bytes @ address 0x08001C8C - Verified OK
77
Downloading 4 bytes @ address 0x08001CE0 - Verified OK
78
Downloading 4 bytes @ address 0x08001CE4 - Verified OK
79
Downloading 16 bytes @ address 0x08001CE8 - Verified OK
80
Read 4 bytes @ address 0x08001BD0 (Data = 0xE0032100)
81
Read 2 bytes @ address 0x08001A48 (Data = 0xB500)
82
Read 2 bytes @ address 0x080019DE (Data = 0x20FA)
83
Read 2 bytes @ address 0x080019E4 (Data = 0xF44F)
84
Received monitor command: clrbp
85
Received monitor command: reset
86
Comparing flash   [....................] Done.
87
Verifying flash   [....................] Done.
88
Resetting target
89
Received monitor command: halt
90
Halting target CPU...
91
...Target halted (PC = 0x08001BD0)
92
Read 2 bytes @ address 0x08001A48 (Data = 0xB500)
93
Received monitor command: regs
94
R0 = 00000000, R1 = 0000AAAA, R2 = 200006DC, R3 = 00000000
95
R4 = 200006BC, R5 = 20000714, R6 = 20000714, R7 = 00000000
96
R8 = 00000000, R9 = 00000000, R10= 00000000, R11= 00000000
97
R12= 20000630, R13= 20005000, MSP= 20005000, PSP= 20000358
98
R14(LR) = FFFFFFFF, R15(PC) = 08001BD0
99
XPSR 01000000, APSR 00000000, EPSR 01000000, IPSR 00000000
100
CFBP 00000000, CONTROL 00, FAULTMASK 00, BASEPRI 00, PRIMASK 00
101
Reading all registers
102
Read 4 bytes @ address 0x08001BD0 (Data = 0xE0032100)
103
Setting breakpoint @ address 0x080019E4, Size = 2, BPHandle = 0x0001
104
Setting breakpoint @ address 0x08001A48, Size = 2, BPHandle = 0x0002
105
Starting target CPU...
106
...Breakpoint reached @ address 0x08001A48
107
Reading all registers
108
Read 4 bytes @ address 0x08001A48 (Data = 0xB087B500)
109
Removing breakpoint @ address 0x080019E4, Size = 2
110
Removing breakpoint @ address 0x08001A48, Size = 2

von Walter T. (nicolas)


Lesenswert?

Benedikt schrieb:
> Der Debugger liest dabei in einem endlos Loop folgende Daten vom Target:

Endlos nicht....aber sehr, sehr lange. Über Nacht dürfte das Delay 
abgelaufen sein.

Gewöhn Dir einfach an, an delays, die Zyklen verbraten, keine 
Breakpoints zu setzen. Und an delays, die auf das Hochzählen einer 
globalen Variablen warten, erst recht nicht.

von Benedikt S. (benedikt_s)


Lesenswert?

@Walter T.

OsDelay verbrät keine Ticks sondern block den task bis zum Ablauf des 
Delay und sorgt für einen Kontextswitch.
Daher kann man Normalerweise an diese Funktion ein Brakepoint setzten 
und mit Sigle-step bis zum blocken des Task steppen.
1
osDelay is part of CMSIS Library and uses vTaskDelay() internally to introduce delay with the difference that input argument of osDelay is delay time in milliseconds while the input argument of _vTaskDelay() is number of Ticks to be delayed. (acc. @Bence Kaulics:) Using this function, OS will be notified about the delay and OS will change the status of task to blocked for that particular time period.
https://stackoverflow.com/questions/42276313/freertos-osdelay-vs-hal-delay

Das beschribene Problem läst sich auch mit dieser Fuktion reproduzieren:
1
/* USER CODE END Header_StartDefaultTask */
2
void StartDefaultTask(void const * argument)
3
{
4
    
5
    
6
    
7
8
  /* USER CODE BEGIN 5 */
9
  /* Infinite loop */
10
  int i=0;
11
  for(;;)
12
  {
13
    if(i%1000000==0){
14
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
15
    }
16
    i=i+1;
17
  }
18
  /* USER CODE END 5 */ 
19
}

Dabei blinkt die Led etwa mit 1 Hz.
wenn ich einen Brakepoint auf int i=0; setzte führt dies auch zu dem 
Fehler.

Ich habe jetzt aus Interesse auf SEGGER Embedded Studio gewchselet hier 
ist das Debugging möglich.
Es scheint als ein GDB/J-Link Konfigurations Problem zu sein.

von Stolpersteine (Gast)


Lesenswert?

Benedikt S. schrieb:
> Brakepoint

Bremspunkt?

Benedikt S. schrieb:
> Sigle-step

Benedikt S. schrieb:
> kann man Normalerweise

Benedikt schrieb:
> "Blue Pille" Board (STM32F103C8)

So ist das .... das Genie nimmt auf reale Gegebenheiten
keine Rücksicht.

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.