Directorio de artículos
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:
- Módulos de la serie Anxinke ESP-C3 y placas de desarrollo
- 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:
conecte el puerto USB JTAG a la máquina virtual después de conectarlo a la
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
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
把日志输出到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
编译烧录固件
idf.py build flash monitor
运行openocd
openocd -f board/esp32c3-builtin.cfg
La operación es exitosa como se muestra en la siguiente figura
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:
- Descargar o iniciar el programa
- Detenga el programa estableciendo varias condiciones específicas
- Ver el estado de ejecución del procesador, incluido el valor del registro general, el valor de la dirección de memoria, etc.
- Ver el estado del programa, incluidos los valores de las variables, el estado de las funciones, etc.
- Cambia el estado operativo del procesador, incluido el valor de los registros de uso general, el valor de las direcciones de memoria, etc.
- 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
Presione la tecla Enter para ingresar al programa.La
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
step
ynext
comando (se puede abreviar comos
yn
) 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
-
break M
: Establecer un punto de interrupción en la línea M, abreviadob
-
continue
: continuar corriendo, taquigrafíac
-
quit
: salir de GDB, abreviaturaq
-
set
: establecer el valor de la variable -
print
: valor impreso y dirección, taquigrafíap
-
finish
: finaliza la función actual y vuelve al punto de llamada de la función -
frame
: cambiar el marco de pila de la función, abreviaturaf
-
backtrace
: Ver el marco de pila y la relación jerárquica de la llamada de función, abreviaturabt
-
display
: Seguimiento y visualización de valores de variables específicas -
delete breakpoints num
: eliminar el punto de interrupción número, abreviaturad
-
info
: Ver el valor de la variable local dentro de la función, abreviadoi
-
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