vscode+gcc+jlink programa de depuración mcu (usado para reemplazar IDE)

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 de

    od -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 Debuggingpara depurar el código en vscode como un IDE.

Supongo que te gusta

Origin blog.csdn.net/weixin_40837318/article/details/131641985
Recomendado
Clasificación