文章目录

  • 1.OpenOCD 调试
  • 硬件准备
  • vscode操作
  • 2.system view调试
  • 工具下载
  • 工作原理
  • 调试操作步骤
  • 问题分析


1.OpenOCD 调试

硬件准备

搭建完IDF框架后,OpenOCD已经下载,ESP32S3通过JTAG接口连接使用OpenOCD进行调试。ESP32-S3 内置 JTAG 电路,无需额外芯片即可调试。只需要引出D+/D-连接到电脑usb。

OTA版本 esp32 esp32 openocd_OTA版本 esp32


如果出现JTAG报错LIBUSB_ERROR_NOT_FOUND。

参考官网:https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32s3/api-guides/jtag-debugging/configure-builtin-jtag.html

vscode操作

1. OpenOCD配置文件

用vscode打开待调试的项目文件夹,在.vscode文件夹内编辑launch.json。

OTA版本 esp32 esp32 openocd_json_02


编辑如下:

{
  "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

OTA版本 esp32 esp32 openocd_OTA版本 esp32_03


增加openocd配置如下:

"idf.openOcdConfigs": [
    "board/esp32s3-builtin.cfg"
  ],

3. 启动OpenOCD

将需要调试的固件提前下载到esp设备中,然后选择JTAG方式

OTA版本 esp32 esp32 openocd_OTA版本 esp32_04


在vscode左侧菜单栏中选择“运行和调试”,点击运行配置好的Launch。

OTA版本 esp32 esp32 openocd_OTA版本 esp32_05


运行成功之后就可以单步调试

OTA版本 esp32 esp32 openocd_json_06

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开启

OTA版本 esp32 esp32 openocd_json_07


在这个设置界面可手动开启/关闭需要记录的一些事件,具体操作参考esp32官网:

https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32s3/api-guides/app_trace.html#app-trace-system-behaviour-analysis-with-segger-systemview

调试操作步骤

  1. 将上述systemview追踪功能设置开启后,编译并下载程序至目标板。
  2. 下载成功之后按照上一章节OpenOCD调试的步骤启动OpenOCD调试,此时先不要运行程序。
  3. 打开cmd输入telnet localhost 4444回车,终端会自动连接上目标板。
    连接成功后会显示
  4. OTA版本 esp32 esp32 openocd_vscode_08

  5. 在终端输入 esp sysview start file://pro-cpu.SVDat file://app-cpu.SVDat 开启追踪以及要输出的文件
  6. OTA版本 esp32 esp32 openocd_OTA版本 esp32_09

  7. 在vscode界面运行程序即可开始记录追踪信息
  8. OTA版本 esp32 esp32 openocd_json_10

  9. 当运行完成之后退出vscode的OpenOCD调试

OTA版本 esp32 esp32 openocd_官网_11


7. 在项目工程文件夹内找到下面两个文件

OTA版本 esp32 esp32 openocd_OTA版本 esp32_12


8. 用systemview打开这两个文件,esp32S3是双核的所以会有两个内核的追踪信息文件,一般应用程序追踪信息都在

pro-cpu.SVDat

OTA版本 esp32 esp32 openocd_vscode_13


到这里就可以分析刚才录制的文件中各个线程的运行以及切换信息了。

问题分析

1. OpenOCD运行报错

LIBUSB_ERROR_NOT_SUPPORTED

windows的usb驱动不正确,需要用Zadig工具将驱动转换为WinUSB驱动类型

2. telnet指令不识别

在windows开启和关闭功能里面开启telnet客户端

OTA版本 esp32 esp32 openocd_json_14