我无法获得可靠的调试设置。我在网上的一些论坛上看到过其他类似标题的帖子,但情况似乎不同。
设置:
- Linux (Xubuntu) 64 位
- Eclipse CDT,霓虹灯 4.6.0
- eclipse“安装新软件”中的“GDB Hardware Debugging”插件,配置为reset & delay 3sec,halt;加载符号(所有复选框,没有自定义命令)
- arm-none-eabi-gcc 4.8.3 工具链
- OpenOCD,最近下载,在自己的控制台中运行,为我的确切 MCU 配置了他们提供的脚本和 st-link
- 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 连接,并在那里“重置”,则设备会重置。
我的设置出现奇怪行为的原因可能是什么?