文章目录
- 1.OpenOCD 调试
- 硬件准备
- vscode操作
- 2.system view调试
- 工具下载
- 工作原理
- 调试操作步骤
- 问题分析
1.OpenOCD 调试
硬件准备
搭建完IDF框架后,OpenOCD已经下载,ESP32S3通过JTAG接口连接使用OpenOCD进行调试。ESP32-S3 内置 JTAG 电路,无需额外芯片即可调试。只需要引出D+/D-连接到电脑usb。
如果出现JTAG报错LIBUSB_ERROR_NOT_FOUND。
vscode操作
1. OpenOCD配置文件
用vscode打开待调试的项目文件夹,在.vscode文件夹内编辑launch.json。
编辑如下:
{
"version": "0.2.0",
"configurations": [
{
"type": "espidf",
"name": "Launch",
"request": "launch",
"MIMode":"gdb",
"miDebuggerPath": "${command:espIdf.getXtensaGdb}",
"program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
"windows": {
"program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf"
},
"cwd": "${workspaceFolder}",
"environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }],
"setupCommands": [
{ "text": "set remotetimeout 100" },
{ "text": "target extended-remote :3333" },
{ "text": "set remote hardware-watchpoint-limit 2"},
{ "text": "mon reset halt" },
{ "text": "thb app_main" },
{ "text": "flushregs" }
],
"externalConsole": false,
"logging": {
"engineLogging": true
}
}
]
}
2. 配置settings.json
在.vscode文件夹内找到settings.json
增加openocd配置如下:
"idf.openOcdConfigs": [
"board/esp32s3-builtin.cfg"
],
3. 启动OpenOCD
将需要调试的固件提前下载到esp设备中,然后选择JTAG方式
在vscode左侧菜单栏中选择“运行和调试”,点击运行配置好的Launch。
运行成功之后就可以单步调试
2.system view调试
工具下载
官网下载链接:
https://www.segger.com/products/development-tools/systemview/
工作原理
systemview是通过jlink工具可直接对arm内核单片机实时调试和录制,可以直观的看到rtos系统中各线程的运行逻辑,方便查看rtos多线程编程时各个线程的运行情况是否按照预期运行。
对于esp32来说无法直接通过systemview进行实时追踪,但是可以通过缓存文件,在通过systemview工具打开进行分析。虽然不能实时查看,但是对于偶发性bug,以及自己编写的线程之间的切换关系分析具有很好的帮助。esp32内置记录systemview兼容的跟踪信息代码,开启这个功能后通过OpenOCD可在工程文件夹内导出跟踪信息文件。开启方式如下:
打开vscode 工程设置界面,在Component config > Application Level Tracing > FreeRTOS SystemView Tracing开启
在这个设置界面可手动开启/关闭需要记录的一些事件,具体操作参考esp32官网:
调试操作步骤
- 将上述systemview追踪功能设置开启后,编译并下载程序至目标板。
- 下载成功之后按照上一章节OpenOCD调试的步骤启动OpenOCD调试,此时先不要运行程序。
- 打开cmd输入
telnet localhost 4444
回车,终端会自动连接上目标板。
连接成功后会显示 - 在终端输入
esp sysview start file://pro-cpu.SVDat file://app-cpu.SVDat
开启追踪以及要输出的文件 - 在vscode界面运行程序即可开始记录追踪信息
- 当运行完成之后退出vscode的OpenOCD调试
7. 在项目工程文件夹内找到下面两个文件
8. 用systemview打开这两个文件,esp32S3是双核的所以会有两个内核的追踪信息文件,一般应用程序追踪信息都在
pro-cpu.SVDat
中
到这里就可以分析刚才录制的文件中各个线程的运行以及切换信息了。
问题分析
1. OpenOCD运行报错
LIBUSB_ERROR_NOT_SUPPORTED
windows的usb驱动不正确,需要用Zadig工具将驱动转换为WinUSB驱动类型
2. telnet指令不识别
在windows开启和关闭功能里面开启telnet客户端