MCU & FPGA geral GDB para STM32: Cheat Sheet Profissional de Depuração com OpenOCD, HardFault e FreeRTOS

GDB para STM32: Cheat Sheet Profissional de Depuração com OpenOCD, HardFault e FreeRTOS


GDB + STM32 — Cheat Sheet Profissional de Depuração

Este é um guia compacto, direto ao ponto, pensado para uso real em bancada ou laboratório. Ideal para manter ao lado do terminal quando estiver depurando firmware STM32 via OpenOCD + arm-none-eabi-gdb.


1️⃣ Inicialização Padrão da Sessão

Subir OpenOCD

openocd -f interface/stlink.cfg -f target/stm32f4x.cfg

Iniciar GDB

arm-none-eabi-gdb firmware.elf

Conectar e preparar alvo

target extended-remote :3333
monitor reset halt
load
break main
continue

2️⃣ Controle de Execução

AçãoComando
Continuarcontinue
Próxima linha (não entra na função)next
Entrar na funçãostep
Próxima instrução assemblynexti
Instrução assembly entrandostepi
Sair da função atualfinish

3️⃣ Breakpoints

break main
break file.c:42
break function_name
break file.c:42 if counter == 100

Gerenciar:

info breakpoints
disable 1
enable 1
delete 1

⚠️ STM32 tem número limitado de hardware breakpoints.


4️⃣ Watchpoints (Detecção de Corrupção)

watch variable
rwatch variable
awatch variable

Extremamente útil para:

  • Corrupção por DMA
  • Escrita fora de array
  • ISR alterando variável inesperadamente

Limite: poucos comparadores de hardware disponíveis.


5️⃣ Inspeção de Variáveis

print var
p/x var        # hexadecimal
p/t var        # binário
p *ptr
display var
undisplay 1

6️⃣ Registradores Cortex-M

info registers
p $pc
p $sp
p $lr

Modificação (cuidado):

set $pc = 0x08001234

7️⃣ Leitura e Escrita de Memória

Formato geral:

x/NFU ENDERECO

Onde:

  • N = quantidade
  • F = formato (x, d, t)
  • U = unidade (b, h, w, g)

Exemplos:

x/4xw 0x40021000
x/16xw adcBuffer

Escrever:

set {uint32_t}0x48000014 = 0x00000001

8️⃣ HardFault — Procedimento Profissional

Quando cair em HardFault:

bt
info registers
x/8xw $sp

Extrair PC salvo:

p/x *((uint32_t*)$sp + 6)
list *0xENDERECO

Verificar registradores de fault:

x/4xw 0xE000ED28

SCB:

  • CFSR
  • HFSR

9️⃣ Verificação de Stack

p/x $sp

Comparar com faixa da RAM (ex: 0x20000000).

Stack corrompida → provável overflow.


🔟 Debug de Periféricos

GPIO

x/1xw GPIOx_ODR

RCC

x/1xw RCC_AHB1ENR

Timer

x/1xw TIMx_CNT

ADC

x/1xw ADC_SR

Sempre confirme clock antes de culpar periférico.


1️⃣1️⃣ FreeRTOS

info threads
thread 2
bt

Ver TCB atual:

p *pxCurrentTCB

1️⃣2️⃣ Bootloader Debug

Ver vetor:

x/2xw 0x08008000

Forçar salto:

set $sp = *(uint32_t*)0x08008000
set $pc = *(uint32_t*)0x08008004
continue

1️⃣3️⃣ Dual Core (STM32H7)

monitor targets
monitor target 1

1️⃣4️⃣ Semihosting

monitor arm semihosting enable

1️⃣5️⃣ SWO / ITM

Usar para:

  • Log sem parar sistema
  • Trace leve
  • Debug tempo real

Melhor alternativa ao printf bloqueante.


1️⃣6️⃣ Macros Úteis

Criar comando reset + run:

define rr
    monitor reset halt
    load
    break main
    continue
end

Uso:

rr

1️⃣7️⃣ Debug de Clock

Interceptar antes de configurar PLL:

break SystemClock_Config
continue

1️⃣8️⃣ Diagnóstico Rápido (Checklist de Emergência)

Se firmware travou:

  1. monitor reset halt
  2. bt
  3. info registers
  4. x/8xw $sp
  5. Verificar SCB fault
  6. Conferir RCC
  7. Conferir stack pointer
  8. Conferir ponteiros

Nunca debugue por tentativa e erro.


🧠 Modelo Mental Profissional

Depuração embarcada é:

  • Medir estado real
  • Confirmar hipóteses
  • Isolar causa
  • Validar solução

Não é:

  • Colocar printf até funcionar
  • Alterar código aleatoriamente
  • Culpar HAL antes de verificar registradores
0 0 votos
Classificação do artigo
Inscrever-se
Notificar de
guest
0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários

Related Post

0
Adoraria saber sua opinião, comente.x