使用 Eclipse 和 J - Link 进行调试
本主题介绍如何设置和使用 MCU Eclipse 搭配 Segger Jlink 适配器 来调试运行在 NuttX 上的 PX4(例如 Pixhawk 系列开发板)。
所需硬件
- J - Link EDU Mini
- 用于将 Segger JLink 连接到飞行控制器 SWD 调试端口(调试端口)的适配器
- 微型 USB 数据线
安装
ROS
按照常规指南设置 PX4:
- 为你的平台 设置 PX4 开发环境/工具链(例如,对于 Linux 系统,请参阅:Ubuntu LTS / Debian Linux 开发环境)。
- 下载 PX4,并可选择在命令行中进行编译。
Eclipse
安装 Eclipse 的步骤如下:
- 从 MCU GitHub 下载 适用于 C/C++ 开发者的 Eclipse CDT。
- 解压 Eclipse 文件夹,并将其复制到任意位置(无需运行任何安装脚本)。
- 运行 Eclipse,并选择初始工作区的位置。
Segger Jlink 工具
安装 Segger Jlink 工具的步骤如下:
- 为你的操作系统下载并运行 J - Link 软件和文档包(提供 Windows 和 Linux 版本的安装包)。
- 在 Linux 系统中,工具会安装在 /usr/bin 目录下。
更多信息请参阅:https://gnu-mcu-eclipse.github.io/debug/jlink/install/。
首次使用
- 通过适配器将 Segger JLink 连接到主机和 飞行控制器调试端口。
- 为飞行控制器供电。
- 运行 Eclipse。
- 选择 文件 > 导入 > C/C++ > 将现有代码作为 Makefile 项目,然后点击 下一步 来添加源文件。
- 指向 PX4 - Autopilot 文件夹并为项目命名,然后在 索引器设置的工具链 中选择 ARM Cross GCC,最后点击 完成。导入过程需要一些时间,请等待其完成。
- 设置 MCU 参数:在项目资源管理器中右键单击顶级项目,选择 属性,然后在 MCU 选项下选择 SEGGER J - Link 路径。按照下面截图所示进行设置。
- 更新软件包:
- 点击右上角名为 打开透视图 的小图标,打开 软件包 透视图。
- 点击 全部更新 按钮。
TIP
这会花费很长时间(约 10 分钟)。忽略弹出的所有关于缺少软件包的错误信息。
- 点击右上角名为 打开透视图 的小图标,打开 软件包 透视图。
- STM32Fxx 设备位于 Keil 文件夹中,通过右键单击并为 F4 和 F7 对应的设备选择 安装 来进行安装。 8. 为目标设备设置调试配置: - 右键单击项目并打开 设置(菜单:C/C++ 构建 > 设置)。 - 选择 设备 选项卡中的 设备 部分(而非 开发板)。 - 找到你要调试的 FMU 芯片。
9. 通过 bug 图标旁边的小下拉菜单选择调试配置:
10. 选择 GDB SEGGER J - Link 调试,然后点击左上角的 新建配置 按钮。
11. 设置构建配置: - 为配置命名,并将 C/C++ 应用程序 设置为对应的 .elf 文件。 - 选择 禁用自动构建 :::info 请记住,在开始调试会话之前,你必须在命令行中构建目标设备。 :::
12. 调试器 和 启动 选项卡通常不需要任何修改(只需根据下面的截图验证你的设置)
SEGGER 任务感知调试
任务感知调试(也称为 线程感知调试)允许你显示所有正在运行的线程/任务的上下文,而不仅仅是当前任务的堆栈。由于 PX4 通常会运行许多不同的任务,因此这一功能非常有用。
要在 Eclipse 中启用此功能,请按照以下步骤操作:
- 首先,你需要在 NuttX 构建配置中启用
CONFIG_DEBUG_TCBINFO
(以暴露 TCB 偏移量)。- 在 PX4 - Autopilot 源代码根目录下打开终端。
- 在终端中,使用适当的 make 目标打开
menuconfig
。例如:
make px4_fmu-v5_default boardguiconfig
(有关使用配置工具的更多信息,请参阅 PX4 Menuconfig 设置)。 - 确保选中 启用用于调试的 TCBinfo 结构体,如下所示: 2. 在终端中运行以下命令来编译 jlink - nuttx.so 库:
make jlink - nuttx
3. 修改 Eclipse 以使用此库。在 J - Link GDB 服务器设置 配置中,将 其他选项 更新为包含 -rtos /home/<PX4 路径>/Tools/jlink - nuttx.so
,如下图所示。 4. 运行调试器时,你现在应该可以看到多个线程,而不是只有一个:
故障处理
目标 CPU 未在包管理器中显示
如果目标 CPU 未在包管理器中显示,你可能需要执行以下步骤以使寄存器视图正常工作。
TIP
这种情况通常不会发生(但据报告,在连接到 STM F7 控制器时可能会出现)。
为 外设视图 添加缺失的 SVD 文件:
- 查找 MCU Eclipse 存储其软件包的位置(首选项 > C/C++ > MCU 软件包):
- 从 http://www.keil.com/dd2/Pack/ 下载缺失的软件包。
- 使用解压工具打开下载的软件包,并从 /CMSIS/SVD 中提取 .SVD 文件。
- 在 调试选项 > GDB SEGGER JLink 调试 > SVD 路径 中选择所需的 .SVD 文件。