原因 7 - 目标需要重置 - 不可靠的调试设置

use*_*129 9 embedded gdb eclipse-cdt stm32 openocd

我无法获得可靠的调试设置。我在网络上的一些论坛上看到过类似标题的其他主题,但情况似乎不同。

设置:

  • Linux (Xubuntu) 64 位
  • Eclipse CDT,霓虹灯 4.6.0
  • 来自eclipse“安装新软件”的“GDB硬件调试”插件,配置为重置&延迟3秒,暂停;加载符号(所有复选框,无自定义命令)
  • arm-none-eabi-gcc 4.8.3 工具链
  • OpenOCD,最近下载,在自己的控制台中运行,使用他们提供的脚本和 st-link 为我的确切 MCU 配置
  • STM32L476RG 带硬浮点的 MCU,使用。
  • ST-Link V2 调试器(独立)

现在,有一个序列,每次经过一番挣扎后,我都能够与调试器连接,但是单步执行和读取变量的工作并不那么可靠,以至于我暂时相信我所看到的。但是,即使到了调用堆栈不会充满明显的无意义条目并且只有很少的地方的地步,也是很累的。

例子:

  • 使用固件刷新设备。这通常没有问题。
  • 启动openocd。
  • 在 Eclipse 中开始调试。
  • OpenOcd 显示连接,然后说:“未定义的调试原因 7 - 目标需要重置”
  • 我无论如何按 Eclipse 中的“继续”按钮使程序运行通过它显示的虚假顶部堆栈帧。
  • 按“暂停”(在调用堆栈中仍然是假的),然后“终止”。
  • Ctrl+C 退出 OpenOcd。
  • 手动(硬件)重置 stm32 MCU。
  • 重新启动 OpenOcd。
  • 再次在 Eclipse 中开始调试。

OpenOCD 输出:

GNU ARM Eclipse 64 位开放式片上调试器 0.10.0-dev-00287-g85cec24-dirty (2016-01-10-10:31)
根据 GNU GPL v2 许可
有关错误报告,请阅读
    http://openocd.org/doc/doxygen/bugs.html
信息:自动选择第一个可用的会话传输“hla_swd”。要覆盖使用“传输选择”。
信息:选定的传输接管了低级目标控制。与普通 JTAG/SWD 相比,结果可能有所不同
适配器速度:500 kHz
适配器_nsrst_delay:100
没有分开
没有分开
信息:无法匹配请求的速度 500 kHz,使用 480 kHz
信息:无法匹配请求的速度 500 kHz,使用 480 kHz
信息:时钟速度 480 kHz
信息:STLINK v2 JTAG v24 API v2 SWIM v4 VID 0x0483 PID 0x3748
信息:使用 stlink api v2
信息:目标电压:3.192646
信息:stm32l4x.cpu:硬件有 6 个断点,4 个观察点
信息:在 tcp/3333 上接受“gdb”连接
信息:设备 ID = 0x10076415
信息:闪存大小 = 1024kbytes
未定义的调试原因 7 - 目标需要重置

现在幸运的是,我终于有了一个有点工作的调试器连接,一段时间。但这也可能需要一些重复。当显然连接不好时,为什么要在两者之间“按恢复”?不确定,这似乎增加了在下一次迭代中我将拥有连接的可能性很大。

一个可能相关的注意事项:MCU 连接了一个 LCD,从中我可以看到它何时重置。出于某种原因,虽然在调试配置中选中了重置复选框,但在 Eclipse 中启动调试显然不会重置设备。如果我在终端中打开到 OpenOCD 的 telnet 连接,并在那里“重置”,则设备会重置。

我的设置出现奇怪行为的原因可能是什么?

小智 6

OpenOCD你用的是什么客户端?我在使用主机时犯了一个错误gdb,我收到了这个错误。在我将调试器路径修改为我arm-none-eabi-gdb在 Eclipse 的“调试配置”中的位置后,问题就消失了。

从您的文章只提到你使用的arm-none-eabi-gcc工具链,所以不知道,如果你设置你gdbarm-none-eabi-gdb在“调试配置”,这是从项目的独立工具链设置。

  • 谢谢您的回答!我正在这里学习嵌入式编程教程:https://docs.rust-embedded.org/discovery/05-led-roulette/flash-it.html 并遇到了相同的错误。使用“arm-none-eabi-gdb”而不是“gdb”修复了它。 (5认同)