Embedded Development Board Learning


Visual Studio Code for ARM with CMake #7 Cortex Debug

Fecha: febrero 27, 2023

Autor: Guillermo Garcia

Categorías: Visual Studio Code Etiquetas:

Visual Studio Code como entorno de desarrollo para proyecto Embedded Systems

En el artículo pasado Visual Studio Code for ARM with CMake #6 IntelliSence creamos el archivo de configuración para la extensión IntelliSence. En este artículo vamos a realizar la configuración necesaria para depurar nuestra placa NUCLEO-G071RB.

Cortex Debug

Comencemos definiendo porque es necesario utilizar Cortex Debug.

Visual Studio Code es un editor de código no un IDE, sin embargo cuenta con una interfaz de depuración para depurar código en diferentes lenguajes.

Esta extensión agrega capacidades para depurar dispositivos ARM Cortex-M. El adaptador de depuración integrado en Visual Studio Code proporciona una serie de funciones graficas como los botones para controlar la depuración. Pero el adaptador no es capaz de gestiona el proceso de compilación completamente.

Es necesario una interfaz extra entre el adaptador de Visual Studio Code y nuestro hardware de depuración J-Link. Aquí es donde necesitamos esta extensión.

GDB

GDB es el depurador estándar para el compilador GNU, un depurador es una herramienta de programación que nos permite la detección y corrección de errores de ejecución y errores lógicos.

GDBServer es un programa que gestiona el proceso de depuración este es desarrollado por los proveedores de dispositivos nuestro caso emplearemos JLinkGDBServer.

La siguiente imagen extraída de la documentación de la extensión muestra el flujo de procesos que realízala extensión para hacer compatible la depuración de dispositivos ARM.

Flujo de proceso de depuración Cortex Debug

La extensión necesita saber algunos parámetros antes de lanzar el GDBServer como el tipo de hardware que se pretende depurar el nombre del archivo ELF que se utiliza para la depuración.

Estos parámetros se definen en un archivo de configuración llamado launch.json, estoy seguro que sabes la ubicación de este archivo así es en el directorio .vscode.

launch.json

En este archivo estableceremos los parámetros necesarios para que la extensión pueda comunicarse con nuestra placa y comenzar el proceso de depuración.

Creamos el archivo launch.json

Flujo de proceso de depuración Cortex Debug

La estructura y el contendió del archivo de configuración se detalla en la documentación de la extensión, veamos los parámetros más importantes.

{
  "version": "0.2.0",
  "configurations": [
      {
          "name": "Cortex Debug",
          "cwd": "${workspaceRoot}",
          "executable": "./build/${config:SetNameExecuteBuildFile}.elf",
          "request": "launch",
          "type": "cortex-debug",
          "servertype": "jlink",
          "device": "${config:SetDeviceARM}",

          "interface": "swd",
          "serverpath": "${config:SetPathJlinkGDB}",
          "armToolchainPath": "${config:SetPathToolchainARM}",
          "svdFile": "${workspaceRoot}/Device/svd/STM32G071.svd",
          "debuggerArgs": [
              "-iex","set auto-load safe-path /",
          ],
          "runToEntryPoint": "main",
          "rttConfig": {
            "enabled": true,
            "address": "auto",
            "decoders": [
                {
                    "port": 0,
                    "type": "console"
                }
            ]
        }
      }
  ]
}

Observemos que utilizamos variables que definimos en el archivo de configuración settings.json que creamos en el artículo Visual Studio Code for ARM with CMake #5 VSC Tasks.

  • executable : Define el archivo ejecutable ELF.
  • servertype : El depurador que utilizamos J-Link.
  • device : Nuestro MCU STM32G071RB.
  • serverpath : La ruta donde se encuentra el archivo ejecutable del JLinkGDBServerCL.exe.
  • svdFile : El archivo svd que contiene la descripción de los periféricos MCU.

Debugging

Es el momento esperado probemos la depuración vamos a la sección de depuración podemos iniciar la depuración en el botón verde.

Pasos para iniciar el depurador

En la parte superior podemos ver la barra para manipular la depuración o detener el proceso.

Pasos para iniciar el depurador

La terminal vemos la repuesta de gdbserver.

Consola de depuración gdbserver


Card image cap
Guillermo Garcia I am an embedded systems software engineer. I like constant learning, IoT systems and sharing knowledge


Comentarios... no existen comentarios.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subscribe


Subscribe to receive the latest content.
Loading