为PX4建立J-Link Eclipse交叉调试环境

2023-05-16

版本说明

1. 自驾仪:Holybro的Pixhawk 4

2. PX4版本:1.12

3. 宿主机:Thinkpad笔记本+Ubuntu 20.04.2 LTS

4. Eclipse:2022-03

5. Eclipse Embeded CDT:6.1.2

6. J-Link软件:V760

7. J-Link硬件:J-Link EDU mini。可在淘宝上购买,170元左右,买到的东西如下图: 

一. 硬件接口连接部分

1.1 J-Link EDU mini接口和Pixhawk 4 Debug口的定义

参考px4官网:

SWD (JTAG) Hardware Debugging Interface | PX4 User Guide

1.1.1 J-Link EDU mini的10针接口定义

 1.1.2 J-Link EDU mini与SWD连接示意

SWD是ARM定义的一种调试接口,Serial Wire Debug (SWD)

 1.1.3 Pixhawk 4对FMU Debug接口和IO Debug接口的定义

PIXHAWK 4有两个Debug Port,一个是FMU Debug Port,另一个是IO Debug Port。两个口都提供了Pixhawk 标准6-Pin SH Debug Port。(6针)

 1.2 Pixhawk 4的FMU Debug Port与J-Link EDU mini口连接

连线顺序描述:

参考官网:

SWD (JTAG) Hardware Debugging Interface | PX4 User Guide

对照上述1,J-Link EDU mini 10针口定义和PIXHAWK 4 FMU Debug口6针的连接如下:

FMU Debug Port

J-Link EDU mini

1 Vtref

1

2 TX

-

3 NC

-

4 SWDIO

2

5 SWDCLK

4

6 GND

3 或者 5

电缆描述:

J-Link到Pixhawk

Pixhawk 4的Debug port具有6针插座如下图:

 需要采用6针电缆与之相连,Pixhawk 4线材包中有这根线,可以做两个,一个用在FMU debug口,另一个用在IO Debug口。另外也可以从得捷购买,网址:得捷电子

https://www.digikey.cn/en/products/detail/jst-sales-america-inc/A06SR06SR30K152A/6009379?s=N4IgTCBcDaIIIAYBsBlASs9BmBBpAjAKxhwgC6AvkA


 

一头接Pixhawk,另一头需要接J-Link

J-Link端的10针插座如下:


接出的排线由J-Link厂家提供。需要将J-Link EDU mini接出的10 Pin排线按上述线序与Pixhawk 4提供的6针电缆焊接起来(只需要连接4根线),由于间距很小,所以焊接是个细活。 焊接完的样子如图,焊点用绿色电工胶布包起来了。

  二. 软件部分

这里仅仅是利用Eclipse对PX4的源码进行调试,不做Eclipse环境下的编译工作,编译工作手动在命令行完成。

2.1安装SEGGER JLink软件

打开如下网页

SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace

在Linux选项中选择下载64-bit DEB Installer软件包,软件包将下载到Downloads目录中,

下载的文件名如下为Link_Linux_V760h_x86_64.deb,安装这个.deb软件包:

sudo dpkg -i ~/Downloads/Jlink_Linux_V760h_x86_64.deb

执行此命令后,SEGGER JLink软件包中的内容将存放在/usr/bin目录中,其中包括JLinkGDBServerCLExe软件,后面配置Eclipse时要用到。

2.2 安装具有Embeded CDT的Eclipse

旧的嵌入式Eclipse叫MCU Eclipse,有时也叫GNU MCU/ARM Eclipse,现在已经彻底把Eclipse Embeded CDT(CDT = C/C++ Development Tool )做好了,作为插件可以安装到任何Eclipse版本中。

按地址:How to install Eclipse IDE for Embedded C/C++ Developers | Eclipse Embedded CDT (C/C++ Development Tools)™

下载最新的Eclipse IDE,然后用install new software安装Embeded CDT,如果已经有Embeded CDT了,可省略这一步。可在About Eclipse IDE中检查是否有Embeded CDT,见下图:

2.3在Eclipse中为PX4-Autopilot建立一个项目

File->Import->C/C++/Existing Code with Makefile Project,为这个项目起个名字,并将代码路径(Existing Code Location)指向PX4-Autopilot目录。

在Toolchain for Indexer Settings对话框中选择:Arm Cross GCC。

然后点击Finish,Eclipse就建立了一个源码指向PX4-Autopilot的项目。

2.4 安装CMSIS PACKs

CMSIS PACKs是一组压缩文件,每一个CMSIS Pack压缩文件中包含有很多文件,这些文件被用来支持各种工具使用某种CPU。Eclipse具备安装CMSIS PACK的方法,一旦安装好,你就可以将一个项目与一种CPU关联起来,CMSIS PACK索引数据将被Eclipse缺省保存在/home/xxx/.local/cmsis-packs目录中,也可以指定它的存储位置,在这里:Window/Preference/C/C++/MCU Packages。

首次安装CMSIS PACKS的方法,如下:

参见:The CMSIS Packs manager | Eclipse Embedded CDT (C/C++ Development Tools)™

点击CMSIS Pack棕色按钮或者菜单Window(窗口)下选择Perspective(视图),选择CMSIS Packs视图,然后点击黄色的update按钮。如果不是首次安装,在选择CMSIS Pack视图后,再选择Window/New Window,就打开了一个具有update按钮的视图。

点击update按钮后,Eclipse会出现更新进度对话框,你会遇到异常,在异常提示对话框中你应该选择ignore all选项,这样更新进度对话框会一直执行下去,直至所有芯片的CMSIS pack的索引数据安装完毕。

  这个过程,网上说需要10-20分钟,我的经验是3个小时以上,需要耐心等待。当然一旦首次更新完成后,下次再点击update按钮,更新的速度相对来说就会快一些,因为update是一种增量更新。

 可以在Keil文件夹中找到 STM32Fxx设备,然后鼠标右键选择Install,安装F7设备。

2.5 为PX4-Autopilot项目做Debug配置

2.5.1. 配置GDB Server的路径

配置PX4-Autopilot项目使用的SEGGER J-Link的GDB Server存放路径,也就是JLinkGDBServerCLExe的存放路径。

方法:鼠标右键点击PX4-Autopilot项目,在对话框中选择Properties, 然后选择SEGGER J-Link Path,在Executable中填写:JLinkGDBServerCLExe,在Path中填写:/usr/bin,然后Apply and Close这个对话框。

 2.6.2 配置项目使用的CPU

鼠标右键点击PX4-Autopilot项目,在对话框中选择Properties, 在C/C++ Build/Settings对话框中,选择“Devices”,然后在“Device Selection”中选择你的Pixhawk FMU采用的CPU型号。然后Close and Apply。如下图:

 2.6.3 配置Debug

在Eclipse中进入Debug Configuration,双击GDB SEGGER J-Link Debugging,这样就建立了一个Jlink调试配置页。这是SEGGER公司为在Eclipse下进行Jlink调试定制的一个Eclipse pluggin,其中大部分参数已经填好了,你只需要填几个特定的参数。

Debug Configuration对话框的配置内容出现在Main和Debugger页中,其他可不用管。

  • 在Main页中,需要指定项目在宿主机上的elf文件的名字以及路径(我的elf文件是px4_fmu-v5_default.elf),调试时使用的源程序符号表存放在宿主机的elf文件中。因为已经在命令行build好了,所以这里选择Disable Auto Build。

  • 在Debugger页,在JLinkGDBSever栏目下大部分都填好了。注意几个数据就可以了。

    • Actual Executable:/usr/bin/JLinkGDBServerCLExe

    • Device name:STM32F765II(这是PIXHAW 4的FMU使用的芯片)

    • Interface:选择SWD(这是JLink EDU mini的接口)

    • Initial Speed:选择自动或者固定速率400Hz

    • GDB port:2331

  • 在GDB Client Setup栏目中,Executable name要填上/opt/gcc-arm-none-eabi-9-2020-q2-update/bin/arm-none-eabi-gdb,这一项是填写arm工具链的gdb程序安装的地方。arm工具链需要自己安装。

  • 在Startup页,将SWO的选择去掉。

  • 其他数据不用管。

 所有配置就完成了,连接好硬件,可以按下Debug按钮进行源码调试,如果没设任何断点,程序将会停止在源文件platforms/common/include/px4_platform_common/module.h的static int main(int argc, char *argv[])函数下,然而这个断点不一定是你想要的,去掉或修改它,在Startup的Run/Restart栏目中的Set Breakpoint设置。调试界面如下图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为PX4建立J-Link Eclipse交叉调试环境 的相关文章

  • Eclipse :: 在“打开资源”对话框中隐藏 .svn 文件

    是否可以在 Eclipse 的 打开资源 对话框 Ctrl Shift R 中隐藏 svn 文件 当你有数百个文件时 这是非常烦人的 Cheers 请尝试以下操作 项目 gt 属性 gt 资源 gt 资源过滤器 gt 添加 选择 排除全部
  • 创建新的 Eclipse 插件项目时何时选择“生成激活器...”

    有很多 Eclipse RCP 教程都从明显的第一步开始 创建一个新的插件项目 看来大约 其中 70 指定检查 生成一个激活器 一个控制插件生命周期的Java类 其他人特别说不要检查该切换 替代文本http img179 imageshac
  • 是否可以对 JUnit 中的每个测试用例使用不同的 @Before @After?

    我是新来的Java JUnit并遇到了不同的Fixtures 我在网上搜索了很多 但没有得到答案 是否可以使用不同的 Before After对于不同的测试用例JUnit 例如 我有以下 TC 那么是否可以使用不同的 Before用于测试和
  • 如何在 Java/Eclipse 中使用特殊字符

    如何在 Java Eclipse 中使用 显示 或 等字符 当我尝试直接使用它们时 例如在源代码中 Eclipse无法保存文件 我能做些什么 编辑 如何找到 unicode 转义序列 问题是您使用的字符无法以文件设置的编码 Cp1252 表
  • 如何在Mac上使用eclipse安装jetty

    我是一个新手 jetty 和 RESTful API 我想使用 Jetty 创建 REST 服务 并希望将嵌入式 jetty 与 eclipse 一起使用 任何人都可以建议我在 Mac OS 中使用 Eclipse 安装 Jetty Jet
  • 将项目移动到 Eclipse 中的另一个文件夹

    我通常将工作项目放在桌面上的文件夹中 当它们完成后 我只是将它们移动到c dev 问题是我正在以一种相当古老的方式做这件事 1 move project files 2 delete project on Eclipse 3 create
  • 尝试通过 Java 8 中的 JDBC-ODBC 连接到 .accdb 文件时出现 ClassNotFoundException

    我正在 Eclipse EE IDE 中的 Java 项目中工作 我必须在其中查询 accdb文件 问题是当我尝试加载驱动程序然后连接到数据库时 它给了我一个异常错误 My code try String filePath myfilepa
  • Java环境变量设置方法

    我已将以下行插入 bash profile export GOOGLE APPLICATION CREDENTIALS Users jun Downloads export PATH PATH GOOGLE APPLICATION CRED
  • 模拟器无法加载

    我正在使用 hello android 教程并通过 eclipse 创建 avd 启动模拟器时不使用图像 它只是显示一个黑色的后屏 中间有 ANDROID 字样 并且在 ANDROID 字样的末尾有一个闪烁的光标 我已按照 T 的步骤安装
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的
  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • 无法从资源加载图片

    So I am trying to load a image file from a resource so that when I export my application into a jar file it could be use
  • 当对phonegap应用程序进行更改时,Eclipse不更新apk

    已经有人问过这个问题 但没有一个答案有效 例如清理 刷新 更改版本号等 当对源文件进行更改时 Eclipse 不会重建 android 项目 这是一个phonegap应用程序 如果我更改html文件甚至java代码 我仍然得到相同的apk
  • Java:同步标准输出和标准错误

    我有一个奇怪的问题 如果我能解决它就好了 出于调试目的 以及其他一些事情 我在标准输出上编写控制台 Java 应用程序的日志 有些内容写在标准输出上 有些内容 例如错误 打印在标准错误上 问题是这两者并不完全同步 因此打印行的顺序并不总是正
  • 如何导入 org.apache.commons.lang3.ArrayUtils;进入 Eclipse [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我如何导入 org apache commons lang3 ArrayUtils 将库添加到 Ecl
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 在java库中找不到源

    I m new to java and facing this problem while debugging code 我在使用外部文件时发现了 rt jar 但不起作用 这是否意味着该文件已损坏还是什么 您需要附加 src zip 作为
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • Eclipse Git 关键字扩展

    每次我检查 git hub 服务器的源代码时 我都需要更新源代码修订关键字 version date 等 你可能知道 Git 中的主要问题是你无法使用以下命令修改文件 提交后有关提交的信息 因为 Git 首先对文件进行校验 基本上我想要实现
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co

随机推荐

  • 微信小程序事件bindtap实现页面跳转

    index wxml通过bindtap 61 34 getUrl 34 设置一个名为getUrl事件 lt view class 61 34 tab con 34 gt lt view class 61 34 newsinfo 34 bin
  • 程序员找工作的个人经验教训以及注意事项

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 忽然间想到如果要找工作的话 xff0c 需要注意一些什么问题 没毕业的 xff0c 刚刚毕业的 xff0c 刚刚工作的都可以借鉴一
  • JavaScript逻辑运算与或非

    逻辑运算 amp amp 与 或 非 javascript中的逻辑运算两边的操作数 xff0c 可以是任意类型的任意值 默认布尔值 xff1a 当参与逻辑运算或判断语句中时 xff0c 任意类型的任意值都有一个默认的布尔型的值 与运算 xf
  • PHP面试题

    PHP知识 php反转字符串的三种方法 1 把分割字符串到一个数组中 xff0c 然后遍历拼接 xff1a lt php function joinStrrev str if strlen str lt 61 1 return str ne
  • tp6实现商城后台登录功能

    后台登录逻辑 1 没有登录状态 xff0c 访问后台页面都应该跳转到登录页 已经登录状态 xff1a 1 访问登录页面 xff0c 应该跳转到后台首页 解决方案 xff1a 后台登录拦截 xff1a 1 传统common base php控
  • Jenkins环境部署

    简介 Jenkins是一款开源 CI amp CD 软件 xff0c 用于自动化各种任务 xff0c 包括构建 测试和部署软件 Jenkins 支持各种运行方式 xff0c 可通过系统包 Docker 或者通过一个独立的 Java 程序 J
  • Nginx中Return指令使用

    Return指令使用 1 返回状态码 return 404 location test set name 39 user123 39 return 404 name curl i http 192 168 56 10 test 2 返回字符
  • MySQL触发器

    介绍 触发器是与表有关的数据库对象 xff0c 指在 insert update delete 之前或之后 xff0c 触发并执行触发器中定义的SQL语句集合 触发器的这种特性可以协助应用在数据库端确保数据的完整性 日志记录 数据校验等操作
  • 制作composer包提供sdk扩展

    目录 1 初始化包 2 将代码推送到github远程仓库 3 为写好扩展包打上tag标签标记当前代码版本 4 将包发布到包管理平台 初始化包 xff0c 生成 Creates a basic composer json file in cu
  • Go环境搭建与IDE开发工具配置

    安装Go语言编译器 Go语言编译器 61 编译器 61 将源代码编译为可执行程序 61 源代码 61 程序员使用高级语言所书写的代码文件 61 高级语言 61 c c 43 43 go 61 机器语言 61 0和1构成 xff0c 机器能直
  • 计算机中的速率、带宽、时延、利用率解读

    计算机网络的性能一般是指它的几个重要的性能指标 但除了这些重要的性能指标外 xff0c 还有一些非性能特征 xff08 nonperformance characteristics xff09 也对计算机网络的性能有很大的影响 那么 xff
  • 无人机原理

    文章目录 1基本运动2为何无人机螺旋桨多为偶数3机器人的运动控制4加速度计5陀螺仪6姿态角解算欧拉角的平面换算 1基本运动 为了平衡扭矩 xff0c 上图中1 3逆时针转动 xff0c 电机2 4顺时针转动进行反扭矩对消 上升 F1 61
  • 新浪微博PC端模拟登陆

    点击上方 程序人生 xff0c 选择 置顶公众号 第一时间关注程序猿 xff08 媛 xff09 身边的故事 图 xff1a Fantastic Beasts and Where to Find Them 投稿 星星在线 简介 一个从妹子图
  • win10下 docker build 报错 “Failed to fetch xxxxxxxx Temporary failure resolving 'archive.ubuntu.com'”

    错误信息 在docker中搭建禅道的时候执行docker build t zentao 命令后执行到apt get update amp amp apt get install指令的时候报错 xff0c 错误如下 xff1a W Faile
  • docker-ros-gui

    主机环境 系统 Ubuntu 16 04 1 安装docker 1 1 在线安装 物理机 默认使用当前最新版本 1 更新apt包索引 xff1a sudo apt get update 2 安装以下包以使apt可以通过HTTPS使用存储库
  • halcon opencv 图像处理面试指南

    珠海某上市公司算法总监 xff1a 1 相机标定的原理与坐标系之间的转换 xff0c 如何转换 2 激光三角原理 xff0c 如何搭建 3 测量拟合的过程中有哪些算子 xff0c 原理什么 xff0c 接着问5 xff0c 跌代多少次 xf
  • 【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码

    从PointNet到PointNet 43 43 理论及代码详解 1 点云是什么1 1 三维数据的表现形式1 2 为什么使用点云1 3 点云上以往的相关工作 2 PointNet2 1 基于点云的置换不变性2 1 1 由对称函数到Point
  • 在ubuntu上安装mavlink-router

    版本说明 xff1a ubuntu 20 0 04 mavlink router 2 为了安装mavlink router 需要预先安装一些依赖库 xff1a autoconf libtool python future python3 f
  • PX4多机仿真(gazebo)

    版本说明 xff1a 操作系统 宿主机 xff08 或开发机 xff09 xff1a ubuntu server 20 0 04 thinkpad 目标机 xff08 机载计算机 xff09 xff1a ubuntu server 20 0
  • 为PX4建立J-Link Eclipse交叉调试环境

    版本说明 1 自驾仪 xff1a Holybro的Pixhawk 4 2 PX4版本 xff1a 1 12 3 宿主机 xff1a Thinkpad笔记本 43 Ubuntu 20 04 2 LTS 4 Eclipse xff1a 2022