OpenOCD - застрял на точке останова, перешагнуть и продолжить не работают - PullRequest
0 голосов
/ 18 апреля 2020

Я использую ядерную плату STM32H745ZI с STLinkV3. Я успешно скомпилировал и запустил простую программу, которая мигает светодиодами на ядре Cortex M7. Когда программа запускается без отладчика, все в порядке.

Проблема возникает при отладке. Когда я устанавливаю точку останова на линии, которая включает светодиод, отладчик останавливается в этом месте. Проблема заключается в том, что после остановки продолжение и шаг не работают, пока не установлена ​​точка останова .

Код не очень сложен:

while (1) {
  LD1_SET(1);
  HAL_Delay(100);
  LD2_SET(1);
  HAL_Delay(100);
  LD3_SET(1);
  HAL_Delay(100);

  LD1_SET(0);
  HAL_Delay(100);
  LD2_SET(0);
  HAL_Delay(100);
  LD3_SET(0);
  HAL_Delay(100);
}

Это Как это выглядит в консоли GDB:

# Setting breakpoint on LED ON
(gdb) b main.c:166
Breakpoint 1 at 0x8001788: file Src/main.c, line 166.
(gdb) c
Continuing.
Note: automatically using hardware breakpoints for read-only addresses.

# Hit! Debugger seems working, LED is still OFF   
Breakpoint 1, main () at Src/main.c:166
166     LD1_SET(1);
(gdb) c
Continuing.

# Hit the same breakpoint with no blinking between
Breakpoint 1, main () at Src/main.c:166
166     LD1_SET(1);

# Setting breakpoint on LED OFF
(gdb) b main.c:174
Breakpoint 2 at 0x80017c6: file Src/main.c, line 174.
(gdb) c
Continuing.

# Still hits LED ON, LED is still OFF
Breakpoint 1, main () at Src/main.c:166
166     LD1_SET(1);
(gdb) info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x08001788 in main at Src/main.c:166
    breakpoint already hit 3 times
2       breakpoint     keep y   0x080017c6 in main at Src/main.c:174

# Removing breakpoint on LED ON
(gdb) del 1
(gdb) c
Continuing.

# LED is ON, prorgram finally hit next breakpoint
Breakpoint 2, main () at Src/main.c:174
174     LD1_SET(0);

Как заставить это работать? Вы сталкивались с подобной проблемой раньше?

...