当前位置: 首页 > news >正文

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 启动执行的脚本:

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 当中会出现:

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

接下来配置 launch 文件,可以直接用插件集成的功能,会自动帮填充 launch 文件
在这里插入图片描述
在这里插入图片描述
然后就会自动添加好了
在这里插入图片描述

Systemview 功能使用

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

idf_component_register(SRCS "blink_example_main.c"PRIV_REQUIRES app_trace driverINCLUDE_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 openocdCommandType     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

http://www.dtcms.com/a/354056.html

相关文章:

  • 北斗导航|接收机自主完好性监测算法综述
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • CAS 浅析
  • 视觉语言模型应用开发——Qwen 2.5 视觉语言模型的零样本学习能力在多模态内容审核中的实践研究
  • 把CentOS 7默认yum源改成腾讯云镜像
  • 阿里云——云存储与数据库服务
  • RustFS架构解密:零GC设计如何实现12μs级存储延迟?
  • 【lucene】SpanNearQuery中的slop
  • 【lucene】SpanFirstQuery的end参数
  • 【Python】包管理,弄明白import,package,module
  • 复杂网络环境实测:主流云VR产品性能对比——平行云LarkXR突破网络限制 引领云VR技术新高度
  • 记住密码管理器
  • 在Eclipse中配置Tomcat
  • 终端美化:Windows11 下 安装 WSL 并使用好看的的 zsh 主题
  • 【图论】最短路算法
  • 802.11ax上行OFDMA接入机制:技术原理与实现细节
  • 流水线用到的Dockerfile和构建脚本build.sh
  • Python电影票房预测模型研究——贝叶斯岭回归Ridge、决策树、Adaboost、KNN分析猫眼豆瓣数据
  • MYSQL---存储过程
  • 【轨物方案】“无人值守”光伏电站智能运维解决方案,赋能绿色能源高效运营
  • 正则表达式 —— 贪婪与非贪婪
  • 汽车盲点检测系统的网络安全分析和设计
  • 【Linux学习】正则表达式学习记录
  • 【鸿蒙开发001】上下翻页-翻书效果实现【可复用】
  • 写一个天气查询Mcp Server
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day8
  • urdf文件可以使用的一些工具(urdf检查和可视化)
  • 【leetcode】100.相同的树
  • Elasticsearch核心配置详解与优化
  • SAP 怎么知道物料的自动过账流程