目标: 实现点灯工程,并且可以基于 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.pswp.cn/bicheng/95297.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95297.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/95297.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统学习(6.软件包管理)

目录 一、概述 1.分类 2.命名方式 3.一个软件包的组成 1. 软件包的基本定义 2. 一个软件包通常包含的部分 ① 程序文件 ② 库文件 ③ 配置文件 ④ 数据文件 / 资源文件 ⑤ 文档 / 帮助信息 ⑥ 服务脚本 / 单元文件(如果是服务型软件) ⑦ 包的…

数据结构青铜到王者第八话---队列(Queue)

目录 一、队列(Queue) 1、概念 2、队列的使用 3、队列模拟实现 4、循环队列 4.1数组下标循环的小技巧(1)下标最后再往后(offset 小于 array.length): index (index offset) % array.length 4.2如何区分空与满 4.3设计循环队列 二、双端队列 (Deq…

Windows系统之不使用第三方软件查看电脑详细配置信息

MENU使用系统信息工具(最详细)使用命令行查看命令提示符PowerShell(信息更丰富)使用DirectX诊断工具(查看显卡和声音设备)查看设备管理器(查看硬件驱动)一条命令合集(Pow…

K8s学习笔记(一)——

一、k8s是什么一个分布式原来是主要用来管理容器的呀(专业点叫“容器编排”),什么是管理?其实就是增删改查等等,简单来理解,k8s就是实现容器增删改查的呗。是开源的,在Linux系统下。就跟创建的s…

Zynq开发实践(FPGA之平台免费IP)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】和c语言平台提供posix api一样,一般fpga厂家也会提供各种各样免费的ip给客户使用。这样,客户就不需要自己去写每一个ip了&am…

nginx 配置文件初识全局块、events、http、server、location 的层级关系

Nginx 配置其实只有两类指令: 放在“某个块”里的块级指令;直接写在顶层的全局指令。 把全部配置想象成一个树形结构,根节点叫 main,往下依次分叉即可。下面用 1 张 ASCII 树 1 张极简示例,30 秒就能看懂层级关系。 层…

OCR大模型最新研究

最新OCR大模型介绍1.GPT-4o 2024.5.14 3.MinerU 2024.7.4 3.GOT-OCR 2024.9.3 4.InternVL3-78B 2025.4.11 开源 通用多模态大模型,OCR是它们的能力之一 因其训练数据的偏向,在文档理解、数学公式识别、图表分析等任务上通常是开源模型中的SOTA&a…

php电子签名

原理使用一对公钥和私钥,用私钥对数据进行签名,用公钥对签名数据进行加密,形成电子签名。电子签名认证,用私钥解密数据,用公钥验证签名。若加密容过长,则将加密内容按照固定长度分块,对每块进行…

鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(三)

目录 一,插入单条数据 二,批量插入数据 三,根据条件删除数据 四,传入对象删除数据 五,删除整张表的数据 六,根据条件更新数据 前面两个章节数据库的创建以及数据库表的创建都已经完成了,下面我们再来看看数据库的增删改查如何构建。 一,插入单条数据 我们先来看一下官…

年度优质会议推荐:【西安石油大学主办|IEEE出版|往届均EI】第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)

第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025) 2025 7th International Conference on Intelligent Control, Measurement and Signal Processing (ICMSP 2025) 2025年11月28-30日 中国北京 主办单位:西安石油大学 会议详情:请点击 亮…

isp 图像处理--DPC坏点矫正

一,Bayer pattern简要介绍我们平时所看到的彩色图像每个像素有三个分量组成,分别为红绿蓝。而目前广泛用到的成像传感器为CMOS传感器,其输出的数据格式为每个像素点只有一个颜色分量,一般称为Bayer Pattern数据,格式如…

Redis常见数据类型及应用场景

好的,我们来详细讲解 Redis 的数据结构及其应用场景。Redis 的强大之处不仅仅在于它支持简单的键值对,更在于它提供了丰富的数据结构,每种结构都针对特定类型的应用场景进行了优化。 核心数据结构与应用场景 Redis 主要支持以下五种核心数据结…

【后端数据库】MySQL 索引生效/失效规则 + 核心原理

SQL 优化的核心 —— 什么时候能“走索引”,什么时候会“失效”。整理一个索引生效/失效规则 核心原理的全景图,帮助彻底理解。🔑 MySQL 索引使用的核心原理MySQL 使用 BTree 索引(最常见),特点是&#xf…

基于 YOLOv11n 的无人机航拍小目标检测算法学习

基于 YOLOv11n 的无人机航拍小目标检测算法问题:无人机航拍图像中小目标检测面临尺度变化大导致的检测精度较低和推理速度较慢等 解决:在 C3k2 模块中引入可变形卷积(DCN),增强模型在复杂背景下对 多尺度目标的特征提取…

第06章:map():数据变形金刚,想变什么变什么

文章目录map()基础:一对一的数据转换map()的工作原理方法引用让代码更简洁对象转换:实际业务应用用户信息转换示例特殊类型的map():mapToInt、mapToLong、mapToDouble链式map():多重转换map()与filter()组合:数据处理管…

197-200CSS3响应式布局,BFC

CSS3响应式布局-媒体查询举例<title>01.媒体查询_媒体类型</title><style>h1 {width: 600px;height: 400px;background-image: linear-gradient(60deg,red,yellow,green);font-size: 40px;color: white;text-shadow: 0 0 20px black;text-align: center;line…

[Android] UI进阶笔记:从 Toolbar 到可折叠标题栏的完整实战

学习 Android 开发的过程中&#xff0c;UI 控件往往是最直观也最容易踩坑的部分。本文整理了我在学习《第一行代码》后的实践笔记&#xff0c;涵盖 Toolbar、自定义标题栏、菜单、Snackbar、CoordinatorLayout、可折叠标题栏、SwipeRefreshLayout 下拉刷新、FloatingActionButt…

计算机网络---http(超文本传输协议)

1. HTTP的定义与核心属性 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是万维网&#xff08;WWW&#xff09;的核心通信协议&#xff0c;定义了客户端&#xff08;如浏览器、APP&#xff09;与服务器之间如何传输“超文本”&#xff08…

【qml-7】qml与c++交互(自动补全提示)

背景&#xff1a; 【qml-5】qml与c交互&#xff08;类型单例&#xff09; 之前记录过qml与c交互的方式&#xff0c;目前为止我使用的是“类型单例”方式。这些名字是我自己起的&#xff0c;只为说明问题&#xff0c;严谨的还是以手册为准。 “类型单例”方式时提到过自动补全…

网页提示UI操作-适应提示,警告,信息——仙盟创梦IDE

代码<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原生动态提示框</title><style>…