I. Introducción
Escribí un artículo similar hace unos años, que se utilizó para depurar el sistema rtthread: depurar RTThread usando VSCode, arm-none-eabi-gdb y J-Link GDB Server .
En ese momento, había muy pocos artículos sobre vscode y gcc depurando MCU, así que solo escribí un resumen.
Recientemente encontré un problema similar. Busqué información en línea y descubrí que el contenido en esta área es relativamente maduro. Tomé prestada información para mejorar mi conocimiento en esta área.
Materiales de referencia:
1. Construcción del entorno GD32F307VC+WIN10+VSCODE+GCC+JLINK .
2. Herramienta de depuración para stm32: descargue y depure jlink o stlink en vscode + configure teclas de acceso directo
2. Configuración del archivo Make
La plantilla Makefile básica se genera utilizando la herramienta STM32CubeMX, para ahorrar espacio solo se introducen las piezas nuevas.
- 2.1 Utilice jlink para descargar a sram y ejecutar:
agregue las siguientes reglas al Makefile:
$(BUILD_DIR)/jlink_flash_file: $(BUILD_DIR)/$(TARGET).bin
@-rm -fR $@
@touch $@
@echo usb >> $@
@echo si 0 >> $@
@echo speed 50000 >> $@
@echo device $(DEVICE) >> $@
@echo JTAGConf -1,-1 >> $@
@echo h >> $@
@echo rx 1 >> $@
@echo loadbin $< $(LOADADDR) >> $@
@echo setpc `od -N4 -t x4 -j4 $(BUILD_DIR)/$(TARGET).bin | head -1 | sed -e 's/0000004//g' -e 's/ //g'| tr -d '\n'` >> $@
@echo g >> $@
@echo qc >> $@
jlink: $(BUILD_DIR)/jlink_flash_file
# on gitbash
"D:\Program Files (x86)\SEGGER\JLink\JLink.exe" -commanderscript $<
# on WSL
# /mnt/d/'Program Files (x86)'/SEGGER/JLink/JLink.exe -commanderscript $<
en:
-
jlink_flash_file规则
: Se utiliza para generar el script de configuración utilizado por JLink.exe; -
DEVICE = CORTEX-M7
, la MCU utiliza el núcleo ARM Cortex-M7; -
LOADADDR=0x20000000
, el programa se descarga al 0x20000000 de sram; -
setpc
, es un comando integrado de jlink, que se utiliza para establecer el valor del puntero de la PC, seguido deod -N4 -t x4 -j4 $(BUILD_DIR)/$(TARGET).bin | head -1 | sed -e 's/0000004//g' -e 's/ //g'| tr -d '\n'
La dirección de entrada del programa en los bytes 4-7 se lee del archivo bin mediante el comando od.
-
2.2 Utilice gdb para depurar:
agregue las siguientes reglas al Makefile:
JLinkGDBServer:
"D:\Program Files (x86)\SEGGER\JLink\JLinkGDBServer.exe" -select USB -device CORTEX-M7 -endian little \
-if JTAG -speed 50000 -noir -LocalhostOnly -nologtofile -port 2331 -SWOPort 2332 -TelnetPort 2333 &
$(BUILD_DIR)/debug.gdb: $(BUILD_DIR)/$(TARGET).bin
@-rm -fR $@
@touch $@
@echo target remote localhost:2331 >> $@
@echo monitor reset >> $@
@echo monitor halt >> $@
@echo load >> $@
@echo b main >> $@
@echo c >> $@
debug: $(BUILD_DIR)/debug.gdb JLinkGDBServer
$(PREFIX)gdb $(BUILD_DIR)/$(TARGET).elf --command=$(BUILD_DIR)/debug.gdb
en:
-
JLinkGDBServer规则
: Se utiliza para iniciar JLinkGDBServer.exe; -
debug.gdb规则
: Script de configuración utilizado para generar gdb; -
2.3 Generar desmontaje:
agregue las siguientes reglas al Makefile:
$(BUILD_DIR)/%.dis:$(BUILD_DIR)/%.elf
@-rm -fR $@
$(DUMP) --all-headers --demangle --disassemble $< > $@
Entre ellos, DUMP=arm-none-eabi-objdump
.
3. Cómo utilizar
Requisito previo: necesita tener instalado un emulador jlink y un software de herramienta jlink. Yo uso esta herramienta JLink-Windows .
- 3.1. Descarga el programa a sram y ejecútalo
- 1. Conecte jlink a la computadora
- 2. Use vscode para abrir el código, abra la terminal, use git_bash y ejecute:
make jlink
- 3.2 Utilice la línea de comando gdb para depurar el programa
- 1. Conecte jlink a la computadora
- 2. Use vscode para abrir el código, abra la terminal, use git_bash y ejecute:
make debug
4. archivo de configuración vscodelaunch.json
Referencia: utilice VSCode para compilar y depurar el proyecto stm32 de IAR .
Para aquellos que están acostumbrados a usar IDE como keil e iar para depurar programas, es posible que no estén acostumbrados a la depuración gdb de la línea de comando anterior. En este momento, puede usar vscode para implementar una interfaz similar a la depuración IDE, solo necesita configurar launch.json de vscode. Mi configuración de depuración real es la siguiente:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "stm32f4", //程序名
"type": "cppdbg",
"request": "launch",
"targetArchitecture" : "arm", //arm架构
"program": "${workspaceFolder}/stm32f4_project/build/stm32f4.elf", //编译生成的elf文件
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:\\Program Files\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe", //gdb的安装路径
//"miDebuggerServerAddress": "localhost:2331",
"setupCommands" : [
{
"text" : "target remote localhost:2331" //连接目标设备
},
{
"text" : "monitor reset" //复位目标设备
},
{
"text" : "monitor halt" //停止目标设备
},
{
"text" : "file E:/code/stm32f4_project/build/stm32f4.elf" //编译生成的elf文件
},
{
"text" : "load" //加载elf文件
},
{
"text" : "b main" //在main函数打断点
}
],
}
]
}
Después de configurar como arriba:
- 1. Primero ejecute el siguiente comando en git bash para abrir JLinkGDBServer:
make JLinkGDBServer
- 2. Haga clic en vscode
Run->Start Debugging
para depurar el código en vscode como un IDE.