Anxin puede compartir la experiencia de desarrollo | La depuración de JTAG se realiza en los módulos de la serie ESP-C3, lo cual es conveniente para el desarrollo secundario.

I. Introducción

¿Qué debo hacer cuando hay un error en el código? Existen ciertas limitaciones para localizar el error usando solo la declaración printf. Este artículo presentará cómo construir un entorno de depuración JTAG y usar el JTAG incorporado de ESP-C3 para realizar la depuración de un solo paso, establecer puntos de interrupción, ver pilas e hilos y otras depuraciones.

1.2 Preparativos

Preparación de hardware:

  1. Módulos de la serie Anxinke ESP-C3 y placas de desarrollo
  2. Cable USB, placa adaptadora USB

Preparación de software:

Configure el entorno de desarrollo ESP-IDF y consulte la publicación de blog anterior para ver el tutorial de construcción https://aithinker.blog.csdn.net/article/details/121565113

Preparación del cableado:
el chip ESP32-C3 tiene un puerto serial USB de alta velocidad/controlador JTAG incorporado. El cableado es el siguiente:
inserte la descripción de la imagen aquí
conecte el puerto USB JTAG a la máquina virtual después de conectarlo a la
inserte la descripción de la imagen aquí
computadora. Si el dispositivo USB JTAG no puede se encuentra en la computadora, necesita instalar el controlador:
Windows descargue y ejecute el instalador de la herramienta esp-idf
Seleccione el controlador
inserte la descripción de la imagen aquí
Después de que la instalación sea exitosa, reinicie la computadora, después de instalar el controlador, ¡puede encontrar el dispositivo USB JTAG! Lo conectamos a la máquina virtual.

2. Instalar y ejecutar OpenOCD

2.1 Introducción a OpenOCD

OpenOCD es un software de depuración de código abierto que se ejecuta en PC, puede controlar muchos hardware JTAG; podemos entenderlo como una especie de programa de servicio GDB. Originalmente fue un proyecto (2005) iniciado por su compañero de estudios Dominic Rath cuando aún estaba en la universidad. OpenOCD está diseñado para proporcionar capacidades de depuración, programación en el sistema y escaneo de límites para dispositivos integrados. Las funciones de OpenOCD se logran con la ayuda de un emulador, que es una pequeña unidad de hardware capaz de proporcionar señales eléctricas para objetivos de depuración. Se necesita un emulador porque el host de depuración (el que ejecuta OpenOCD) generalmente no tiene la capacidad de analizar esta señal eléctrica directamente.

2.2 Instalar OpenOCD

Cuando ESP-IDF v4.0 y superior ejecuta el script de instalación install.sh, openocd se ha instalado de forma predeterminada

检查安装版本

openocd --version   

El terminal generará la siguiente información (el número de versión real puede actualizarse):

Open On-Chip Debugger  v0.10.0-esp32-20210902 (2021-09-02-09:38)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html

检查 OPENOCD_SCRIPTS 环境变量的值,以确认 OpenOCD 配置文件的路径

Vaya al directorio ESP-IDF y ejecute ../export.sh y haga eco de $OPENOCD_SCRIPTS

cd esp-idf
. ./export.sh
echo $OPENOCD_SCRIPTS

echo $OPENOCD_SCRIPTS imprime mi ruta OpenOCD

~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210902/openocd-esp32/share/openocd/scripts

openocd necesita usar usb, debe cambiar ~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210902/openocd-esp32/share/openocd/contrib/contrib/60-openocd.rules (modificar según su ruta real) ) a /etc/udev/rules.d, para que openocd tenga permiso para usar usb para depurar el dispositivo

cd ~/.espressif/tools/openocd-esp32/v0.10.0-esp32-20210902/openocd-esp32/share/openocd/contrib/contrib

sudo cp 60-openocd.rules /etc/udev/rules.d

Ingrese el directorio del proyecto a depurar, tome ejemplos/comenzar/parpadeo como ejemplo

cd $IDF_PATH/examples/get-started/blink

禁用内存保护
Hasta el 26 de noviembre de 2021, debe deshabilitar la protección de memoria para ejecutar GDB normalmente.
Ejecute idf.py menuconfig, deshabilite la protección de memoria
inserte la descripción de la imagen aquí
把日志输出到USB(可选)
en Configuración de componentes → Configuración del sistema ESP → Protección de memoria, y configúrela en Configuración de componentes → Configuración del sistema ESP → Canal para salida de consola
inserte la descripción de la imagen aquí

编译烧录固件

idf.py build flash monitor

运行openocd

openocd -f board/esp32c3-builtin.cfg

La operación es exitosa como se muestra en la siguiente figura
inserte la descripción de la imagen aquí

3. Instalar y ejecutar GBD

3.1 Introducción a GBD

GDB (GNU Project Debugger) es el software de depuración en la cadena de herramientas GNU. GDB es una herramienta de depuración ampliamente utilizada que se puede utilizar para depurar programas escritos en varios lenguajes como C, C++, Ada, etc. Proporciona las siguientes funciones:

  1. Descargar o iniciar el programa
  2. Detenga el programa estableciendo varias condiciones específicas
  3. Ver el estado de ejecución del procesador, incluido el valor del registro general, el valor de la dirección de memoria, etc.
  4. Ver el estado del programa, incluidos los valores de las variables, el estado de las funciones, etc.
  5. Cambia el estado operativo del procesador, incluido el valor de los registros de uso general, el valor de las direcciones de memoria, etc.
  6. Cambiar el estado del programa, incluidos los valores de las variables, el estado de las funciones, etc.

GDB se puede usar para depurar programas en ejecución en el sistema Linux de la PC host, y también se puede usar para depurar hardware integrado.En el entorno de hardware integrado, debido a recursos limitados, el hardware de destino integrado general no puede construir GDB directamente. entorno (como la pantalla de visualización y el sistema Linux, etc.), en este momento, la depuración remota puede ser realizada por GDB + GdbServer.En términos generales, GdbServer se ejecuta en el hardware de destino, mientras que GDB se ejecuta en la PC host.

3.2 Ejecutando GBD

Instale python2, libpython2.7

sudo apt install python2
sudo apt install libpython2.7

Abra una nueva sesión de terminal y vaya al directorio del proyecto a depurar, por ejemplo:

cd esp-idf
. ./export.sh
cd examples/get-started/blink

Al iniciar el depurador, generalmente debe proporcionar varios parámetros y comandos de configuración. Para evitar ingresar estos comandos línea por línea en la línea de comando cada vez, puede crear un nuevo archivo de configuración y nombrarlo gdbinit:

target remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c

Guarde este archivo en el directorio actual.

Para obtener más detalles sobre el interior del archivo gdbinit, consulte el capítulo Significado del comando de inicio del depurador

Inicie GDB. Asegúrese de que openocd -f board/esp32c3-builtin.cfg se esté ejecutando antes de arrancar

idf.py gdbtui

inserte la descripción de la imagen aquí
Presione la tecla Enter para ingresar al programa.La
inserte la descripción de la imagen aquí
depuración de JTAG se ha ejecutado aquí. Abrí un total de tres terminales, uno ejecuta el monitor idf.py para ver el registro del puerto serie, otro ejecuta openocd -f board/esp32c3-builtin.cfg, otro ejecuta idf.py gdbtui y los tres terminales cooperan con la depuración.

3.3 Comandos comunes de depuración de GDB

  1. stepy nextcomando (se puede abreviar como sy n) para recorrer el código, la diferencia entre los dos es que ejecutar el comando "paso" ingresará a la subrutina llamada, mientras que ejecutar el comando "siguiente" tratará directamente la subrutina como una sola fuente código OK, puedes terminarlo en un solo paso

inserte la descripción de la imagen aquí

  1. break M: Establecer un punto de interrupción en la línea M, abreviadob

  2. continue: continuar corriendo, taquigrafíac

  3. quit: salir de GDB, abreviaturaq
    inserte la descripción de la imagen aquí

  4. set: establecer el valor de la variable

  5. print: valor impreso y dirección, taquigrafíap

  6. finish: finaliza la función actual y vuelve al punto de llamada de la función

  7. frame: cambiar el marco de pila de la función, abreviaturaf

  8. backtrace: Ver el marco de pila y la relación jerárquica de la llamada de función, abreviaturabt

  9. display: Seguimiento y visualización de valores de variables específicas

  10. delete breakpoints num: eliminar el punto de interrupción número, abreviaturad

  11. info: Ver el valor de la variable local dentro de la función, abreviadoi

  12. frame: cambiar el marco de pila de la función, abreviaturaf

Aquí solo se describe cómo construir rápidamente un entorno de depuración JTAG y el ejemplo más simple. Para aquellos que necesitan obtener más información, diríjase a la documentación oficial . Se recomienda leerla varias veces 几天 .

Contáctenos

Sitio web oficial: https://www.ai-thinker.com
Desarrollo de DOCS: https://docs.ai-thinker.com
Foro oficial: http://bbs.ai-thinker.com
Soporte técnico: support@aithinker. com

Supongo que te gusta

Origin blog.csdn.net/Boantong_/article/details/121566671
Recomendado
Clasificación