风筝
发表于: 2022-9-4 17:43:12 | 显示全部楼层

本篇文章主要介绍了如何在ESP32-C3器件上使用Live Watch。与使用Xtensa内核的常规ESP32芯片不同,ESP32-C3基于RISC-V内核,因此允许在不停止CPU的情况下访问设备内存,允许VisualGDB在不停止目标的情况下检查全局变量的值。


从ESP-IDF 4.3.2开始,使用Live Watch需要修补 components/hal/esp32c3/include/hal/cpu_ll.h文件以替换此提交。我们将在本文后面展示如何做到这一点。


在开始之前,请确保安装VisualGDB 5.6或更高版本,并将ESP32调试包更新到最新版本。


1.  启动Visual Studio,然后打开“New Project”窗口。然后,找到VisualGDB ESP32项目向导:

01-newprj-1.png

2.  输入项目的名称和位置,然后按“Create”:

02-name.png

3.  继续使用默认项目类型(基于CMake的新项目):

03-cmake.png

4.  在向导的下一页上,选择您的ESP32工具链并选择ESP32C3器件:

04-toolchain.png

请注意,实时变量不适用于常规ESP32和ESP32S2/S3器件,因为它们使用不同的CPU。

5.  选择您要克隆的项目示例。在本文中,我们将使用最基本的“blink”示例:

05-sample.png

6.  如本文所示,将您的设备连接到USB端口,并让VisualGDB检测到它。然后,在“Debug Using”字段中选择它并按“Test”以验证连接:

06-debug.png

您可以放心地忽略所有设备寄存器为0的警告。对于ESP32-C3器件是正常的。

7.  按“Finish”生成项目。在构建它之前,我们需要修补ESP-IDF以防止CPU在连接调试器时进入睡眠模式(否则Live Watch将无法工作)。为此,请找到esp32c3/include/hal/cpu_ll.h文件并将cpu_ll_waiti()函数替换为与此提交匹配的函数:

  1. #include <soc/dport_access.h>
  2. #include <soc/system_reg.h>

  3. static inline void cpu_ll_waiti(void)
  4. {
  5.     if (cpu_ll_is_debugger_attached() &&
  6.         DPORT_REG_GET_BIT(SYSTEM_CPU_PER_CONF_REG, SYSTEM_CPU_WAIT_MODE_FORCE_ON) == 0)
  7.     {
  8.         return;
  9.     }

  10.     asm volatile("wfi\n");
  11. }
复制代码

07-patch.png

8.  将全局g_Counter变量添加到main源文件并更新app_main()函数以定期递增:

08-built.png

9.  按F5构建项目并开始调试。只要你在Live Watch中启用了就地显示,它就会立即显示变量声明上方的值:

09-value-1.png

注意如果所有值都显示为0的值,请仔细检查你是否修补了正确的cpu_ll.h文件,并在这样做后重建项目。

10.  单击实时值以在实时观察窗口中定位变量。您可以使用Globals视图快速定位其他变量或将其标记为收藏:

10-all.png

您还可以使用Watch视图观察特定变量的值。

11.  单击g_Counter行旁边的“绘图”列。VisualGDB将显示g_Counter的值如何随时间变化:

11-graph.png

12.  您可以使用绘图视图方便地测量各种参数(例如,值随时间变化的速度):

12-rate.png

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 54 | 回复: 107



手机版|

GMT+8, 2024-4-18 16:57 , Processed in 0.152469 second(s), 9 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表