ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况

目标: 实现点灯工程,并且可以基于 vscode 进行单步调试与 systemview 来分析任务运行情况。

环境搭建

如需在 ESP32-S3 上使用 ESP-IDF,请安装以下软件:

  • 设置 工具链,用于编译 ESP32-S3 代码;
  • 编译构建工具 ------ CMake 和 Ninja 编译构建工具,用于编译 ESP32-S3 应用程序;
  • 获取 ESP-IDF 软件开发框架。该框架已经基本包含 ESP32-S3 使用的 API(软件库和源代码)和运行 工具链 的脚本;

主要参考步骤:

https://github.com/espressif/vscode-esp-idf-extension/blob/master/README_CN.md

VScode + ESP-IDF

软件安装步骤简介:

  • 安装 vscode,以及一些基础插件。
  • 安装 ESP-IDF 插件, 安装完插件记得要重启 VSCODE
  • 从命令列表中选择 配置 ESP-IDF 扩展

借助于 ESP-IDF 插件来安装 ESP-IDF 框架:

  • IDF_TOOLS_PATHIDF_PATH 不能相同。
  • 主要就是 ESP-IDF、ESP-IDF Tools、与 Python virtual enviroment 安装。

demo 编译

windows 使用 ESP 官方的 ESP-IDF 安装包,安装这个框架之后,会生成对应的 CMD 与 PowerShell 。

如果我们 VSCODE 拓展安装好,在 VSCODE 当中也会集成类似的功能,点击这个操作也会配置好对应的开发终端。

我们可以直接打开这个 power shell,在打开这个 Power shell 的时候,他会自动执行一系列脚本,帮我们将这个终端的开发环境配置好,各种环境变量这些。比如说我们在这个终端当中可以直接使用 idf.py build 等等操作。

常规操作:

  • idf.py set-target esp32s3
  • idf.py menuconfig
  • idf.py build

menuconfig 过程当中,配置对应的 Blink Type:GPIO。

配置对应的 GPIO 端口:

最后编译烧录即可。

Openocd + gdb:命令行操作

我们使用的是 ESP32S3 内置的 JTAG 接口,只用一个 USB 线,既能实现串口数据传输,也能实现 JTAG 的烧录与调试。

使用命令行操作 openocd + gdb 来连接ESP32

  • 在 IDF-Tools 的目录下,找到 Openocd 的相关配置文件:xxx\Espressif\tools\openocd-esp32\v0.12.0-esp32-20250422\openocd-esp32\share\openocd\scripts\board

  • builtin 其实就是使用 ESP32S3 内置的 JTAG。

  • 使用 openocd 来连接 ESP32,openocd -f board/esp32s3-builtin.cfg

  • 在使用 Openocd 连接的过程中,可能出现 error,这时候需要 zadig安装winusb

  • zadig 安装 USB 驱动,注意安装完驱动将 USB 线重新拔插一下

    也可以尝试下官方推荐的这个操作:

  • 安装好之后,必须保证 Openocd 连接无报错。

找到可以连接当前芯片的 GDB 调试工具,ESP32S3 的架构是xtensa,在 ESP-Tools 的目录下可以找到:xxx\Espressif\tools\xtensa-esp-elf-gdb\16.2_20250324\xtensa-esp-elf-gdb\bin

这时候另外启动一个终端,来运行 GDB 工具:xtensa-esp32s3-elf-gdb .\build\blink.elf -x gdbinit

gdbinit 是我们指定,GDB 启动执行的脚本:

bash 复制代码
set remotetimeout 100
target extended-remote :3333
set remote hardware-watchpoint-limit 2
mon reset halt
flushregs
thb app_main
c

Openocd + gdb:vscode 操作

确认调试方式、调试端口、芯片型号

然后再 settingjson 当中会出现:

bash 复制代码
{
    "idf.portWin": "COM4",
    "idf.flashType": "JTAG",
    "idf.openOcdConfigs": [
        "board/esp32s3-builtin.cfg"
    ],
}

接下来配置 launch 文件,可以直接用插件集成的功能,会自动帮填充 launch 文件

然后就会自动添加好了

Systemview 功能使用

demo 的 CMakeLists.txt 添加 app_trace 组件,注意是需要在 main/ 路径添加,而不是根系统路径下添加。

bash 复制代码
idf_component_register(SRCS "blink_example_main.c"
                       PRIV_REQUIRES app_trace driver
                       INCLUDE_DIRS ".")

添加之后,就可以直接使用 idf.py menuconfig 来配置对应的功能

在 Openocd 可以成功连接之后,我们可以看到相关的输出,提示我们可以使用 telnet 来连接 openocd:

windows 可能会默认关闭 telnet 功能,需要在windows开启和关闭功能里面开启telnet客户端

这时候我们另外启动一个终端,然后通过 telnet 建立一个连接:telnet localhost 4444 回车,终端会自动连接上目标板。

telnet localhost 4444 代表什么?

  • 客户端:就是你的 telnet 程序。
  • 服务器:是你刚刚启动的 openocd 进程。
  • 接后,你输入的命令(例如 halt、resume、reset run、flash info),都会通过 TCP 4444 端口发送给 OpenOCD。
  • OpenOCD 收到命令后,会去操作 USB-JTAG 接口 → 芯片调试寄存器 → 控制 ESP32-S3。

在windows 打开 esp-idf powershell 之后,我们可以查看这个环境使用的 openocd 是哪一个?

  • 可以发现这个是 esp32 定制的 openocd ,对应的 github连接:esp32-openocd

  • OpenOCD 本体是一个通用调试服务器,支持 ARM、RISC-V、Xtensa 等很多架构。

  • Espressif(乐鑫)在官方 OpenOCD 基础上做了扩展(通常叫 esp-openocd),里面增加了不少命令,比如 esp flash、esp sysview 等,专门支持 ESP32/ESP32-S2/S3/C3。

  • SystemView 是 Segger 出的一套运行时追踪工具,可以通过 JTAG/SWO 收集 FreeRTOS 任务切换、事件等数据。ESP32 的 OpenOCD 集成了对 SystemView 的支持。

    Get-Command openocd

    CommandType Name Version Source


    Application openocd.exe 0.0.0.0 C:\00_SoftWare\07_mcu_dev\esp-idf\Espressif\tools\openocd-esp32\v0.12.0-esp32-20250422\openocd-esp32...

可以从他的开源代码当中看到对应的指令支持:

成功连接会显示:

在终端输入 esp sysview start file://pro-cpu.SVDat file://app-cpu.SVDat

这时候采用 VSCODE 进行调试,这时候他会将调试过程中的信息,写入到 PC 的这两个文件当中。然后终止调试。

最后使用 systemview 来进行离线分析 CPU 的运行情况:

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


参考文档:

https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32s3/get-started/index.html

https://blog.csdn.net/m0_60134435/article/details/137788122

相关推荐
未来之窗软件服务1 小时前
网页提示UI操作-适应提示,警告,信息——仙盟创梦IDE
javascript·ide·ui·仙盟创梦ide·东方仙盟
ahauedu3 小时前
30分钟入门实战速成Cursor IDE(1)
ide·ai编程·cursor
ahauedu4 小时前
30分钟入门实战速成Cursor IDE(2)
ide·ai编程·cursor
johnny2336 小时前
Vibe Coding、AI IDE/插件
ide·人工智能
何为xl20 小时前
【VSCode】使用VSCode打开md文件以及转化为PDF
ide·vscode·pdf
卿·静1 天前
Node.js终极文本转图指南
前端·javascript·vscode·node.js
北极之熊熊1 天前
【AI自动化】VSCode+Playwright+codegen+nodejs自动化脚本生成
运维·vscode·自动化·ai ui自动化测试
salestina1 天前
vsCode如何自定义编辑器背景色
ide·vscode·编辑器
sun0077001 天前
vscode 调试 指定 python文件 运行路径
ide·vscode·编辑器