|
本篇文章主要介绍了如何在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项目向导:
2. 输入项目的名称和位置,然后按“Create”:
3. 继续使用默认项目类型(基于CMake的新项目):
4. 在向导的下一页上,选择您的ESP32工具链并选择ESP32C3器件:
请注意,实时变量不适用于常规ESP32和ESP32S2/S3器件,因为它们使用不同的CPU。 5. 选择您要克隆的项目示例。在本文中,我们将使用最基本的“blink”示例:
6. 如本文所示,将您的设备连接到USB端口,并让VisualGDB检测到它。然后,在“Debug Using”字段中选择它并按“Test”以验证连接:
您可以放心地忽略所有设备寄存器为0的警告。对于ESP32-C3器件是正常的。 7. 按“Finish”生成项目。在构建它之前,我们需要修补ESP-IDF以防止CPU在连接调试器时进入睡眠模式(否则Live Watch将无法工作)。为此,请找到esp32c3/include/hal/cpu_ll.h文件并将cpu_ll_waiti()函数替换为与此提交匹配的函数: - #include <soc/dport_access.h>
- #include <soc/system_reg.h>
- static inline void cpu_ll_waiti(void)
- {
- if (cpu_ll_is_debugger_attached() &&
- DPORT_REG_GET_BIT(SYSTEM_CPU_PER_CONF_REG, SYSTEM_CPU_WAIT_MODE_FORCE_ON) == 0)
- {
- return;
- }
- asm volatile("wfi\n");
- }
复制代码
8. 将全局g_Counter变量添加到main源文件并更新app_main()函数以定期递增:
9. 按F5构建项目并开始调试。只要你在Live Watch中启用了就地显示,它就会立即显示变量声明上方的值:
注意如果所有值都显示为0的值,请仔细检查你是否修补了正确的cpu_ll.h文件,并在这样做后重建项目。 10. 单击实时值以在实时观察窗口中定位变量。您可以使用Globals视图快速定位其他变量或将其标记为收藏:
您还可以使用Watch视图观察特定变量的值。 11. 单击g_Counter行旁边的“绘图”列。VisualGDB将显示g_Counter的值如何随时间变化:
12. 您可以使用绘图视图方便地测量各种参数(例如,值随时间变化的速度):
|