使用 Eclipse 和 J-Link 调试
本主题介绍如何设置和使用 MCU Eclipse 用 Segger Jlink 适配器 来调试在 NuttX(如 Pixhawk 系列板卡)上运行的 PX4。
所需硬件
- J-Link EDU Mini
- 连接 Segger JLink 和飞行控制器的适配器 SWD 调试端口 (调试端口)。
- 微型 USB 电缆
安装
PX4
按照常规指南设置 PX4:
- 设置 PX4 开发环境/工具链 以适应您的平台(例如,Linux 请参见): Ubuntu LTS / Debian Linux 开发环境).
- 下载 PX4 并可选择在命令行上构建它。
日蚀
安装 日蚀:
- 下载 面向 C/C++ 开发人员的 Eclipse CDT (MCU GitHub)。
- 解压 Eclipse 文件夹并将其复制到任意位置(无需运行任何安装脚本)。
- 运行 日蚀 并选择初始工作台的位置。
Segger Jlink 工具
安装 Segger Jlink 工具
- 下载并运行 J-Link 软件和文件包 操作系统(提供 Windows 和 Linux 软件包)。
- 在 Linux 上,这些工具安装在 /usr/bin.
更多信息,请参见 https://gnu-mcu-eclipse.github.io/debug/jlink/install/.
首次使用
连接 Segger JLink 连接到主机和 飞行控制器调试端口 (通过适配器)。
为飞行控制器供电。
运行 日蚀.
选择 文件 > 导入 > C/C++ > 现有代码作为 Makefile 项目 并点击 下一页.
将其指向 PX4-自动驾驶仪 文件夹并为其命名,然后选择 ARM Cross GCC 在 索引设置工具链 并点击 完成.导入需要一段时间,请等待完成。
设置 MCU 设置:右键单击项目浏览器中的顶层项目,选择 属性 然后在 MCU 下选择 SEGGER J-Link Path.设置如下图所示。
更新包:
点击右上角名为 开放的视角 并打开 包 透视。
点击 更新所有 按钮。
TIP
这需要很长时间(10 分钟)。不要理会弹出的所有关于缺少软件包的错误。
STM32Fxx 设备可在 Keil 文件夹中找到,安装时可右击并选择 安装 相应设备上的 F4 和 F7。
为目标设置调试配置:
- 右键单击项目,打开 设置 (菜单): C/C++ 生成 > 设置)
- 选择 设备 Tab、 设备 部分(非 执行局).
- 找到要调试的 FMU 芯片。
使用错误符号旁边的小下拉菜单选择调试配置:
然后选择 GDB SEGGER J-Link 调试 然后 新配置 按钮。
设置构建配置
为其命名并设置 C/C++ 应用程序 到相应的 .elf 锉刀
选择 禁用自动构建
信息
请记住,在启动调试会话之前,必须从命令行构建目标机。
调试器 和 启动 标签页不需要做任何修改(只需根据下面的截图验证设置即可)
SEGGER 任务感知调试
任务感知调试(又称 线程感知调试)可以显示所有正在运行的线程/任务的上下文,而不仅仅是堆栈中的当前任务。这非常有用,因为 PX4 往往会运行许多不同的任务。
要在 Eclipse 中启用此功能:
您首先需要启用
config_debug_tcbinfo
中的 NuttX 配置(以显示 TCB 偏移量)。在 PX4-Autopilot 源代码根目录下打开终端
在终端中,打开
菜单
使用适当的 make target 进行构建。如下所示吁生产 px4_fmu-v5_default boardguiconfig
见 PX4 菜单配置设置 有关使用配置工具的更多信息)。
确保 启用用于调试的 TCBinfo 结构 如图所示:
编译 jlink-nuttx.so 在终端中运行以下命令,即可在终端中运行库:
使 jlink-nuttx
修改 Eclipse 以使用该库。在 J-Link GDB 服务器设置 配置、更新 其他选择 包括
-rtos /home/<PX4 path>/Tools/jlink-nuttx.so
如下图所示。运行调试器时,你应该能看到多个线程,而不是只有一个:
故障排除
目标 CPU 不在软件包管理器中
如果目标 CPU 未出现在软件包管理器中,您可能需要采取以下步骤才能使寄存器视图正常工作。
TIP
这种情况一般不会发生(但据说在连接 STM F7 控制器时会发生)。
为 周边视角:
找出 MCU Eclipse 存储其软件包 (首选项 > C/C++ > MCU 软件包):
下载缺少的软件包: http://www.keil.com/dd2/Pack/
使用解压缩工具打开下载的软件包,提取 .SVD 文件来自 /CMSIS/SVD.
选择所需的 .SVD 归档: 调试选项 > GDB SEGGER JLink 调试 > SVD 路径