Eclipse + GDB + J-Link 的单片机程序调试实践

Eclipse + GDB + J-Link 的调试实践

本文介绍如何创建Eclipse的调试配置,如何控制调试过程,如何查看修改各种变量。

对 Eclipse 的要求

  • 所用 Eclipse 应当安装了 Eclipse Embedded CDT 插件。
  • 从 https://www.eclipse.org/downloads/packages/ 下载 Eclipse IDE for Embedded C/C++ Developers ,此版本已经包含所需插件。
    在这里插入图片描述

配置 J-Link 路径

  • 通过菜单 Window>>Preferences 打开全局配置对话框,选择 MCU>>Global SEGGER J-Link Path ,在相应输入框填入 GDBServer 可执行文件名和所在路径。
    在这里插入图片描述

创建调试配置

  • 通过菜单 Run >> Debug configurations… 打开调试配置对话框。
  • 左侧列表中选中 GDB SEGGER J-Link Debugging ,点击左上角 New launch configuration 按钮,新建一个调试配置。
    在这里插入图片描述

调试配置 Main 标签页

  • 确认 Project 名是否正确,若不正确或为空,那么点击右侧 Browse… 按钮选择正确的工程。
  • 确认 C/C++ Application 是否为待调试程序,若不正确或为空,点击右侧 Search Project… 或 Browse…按钮选择待调试程序。
    在这里插入图片描述

调试配置 Debugger 标签页

  • Device name 输入框输入 MCU 型号。
  • 所支持的 MCU 型号可以通过 SEGGER J-Link GDB Server 的 Target Device Settings 对话框查看。
    在这里插入图片描述

调试配置 Startup 标签页

  • 去除 Enable flash breakpoints 选项。
  • 去除 Enable semihosting 选项。
  • 填入 CPU 时钟。
    在这里插入图片描述

调试配置 SVD Path 标签页

  • 若调试驱动程序,需要查看外设寄存器,那么需要指定 SVD file 。
  • 只调试应用层代码,可以忽略。
    在这里插入图片描述

开始调试

  • 配置完成后,点击配置对话框右下角Debug 按钮即可开始调试。
  • 调试配置将保存在 workspace 中,下次需要再次调试时,可以点击菜单Run>>Debug history 中的对应项开始调试,也可以通过工具栏按钮开始调试,见下图。点击调试按钮开始与最近的调试一样的调试,点击调试按钮右侧三角型按钮弹出菜单,可以选择所需的调试配置或菜单。
    在这里插入图片描述

调试控制

  • 开始调试后, Eclipse 将进入调试窗口布局。

  • Eclipse 工具栏将显示调试控制工具,如下图。
    在这里插入图片描述

  • Resume ,连续执行,直到碰到断点或点击暂停按钮。即 Run 操作。
    在这里插入图片描述

  • Suspend ,暂停,连续执行状态下,点击暂停按钮,将在当前位置停止执行。即 Halt 操作。
    在这里插入图片描述

  • Terminate ,结束本次调试。即 Stop 操作。
    在这里插入图片描述

  • Step Into ,单步执行,碰到函数调用语句则进入函数。
    在这里插入图片描述

  • Step Over ,单步执行,若当前语句为函数调用,则函数调用作为单条语句执行,不进入函数。
    在这里插入图片描述

  • Step Return ,执行完当前函数的剩余代码,返回调用处暂停。
    在这里插入图片描述

  • 指令单步模式,点击该按钮切换指令单步和语句单步。进入指令单步后,将自动打开反汇编窗口,再点击 StepInto 或 Step Over 按钮时仅执行一条指令。
    在这里插入图片描述

  • Restart ,复位MCU ,程序从头重新开始执行。
    在这里插入图片描述

添加断点

  1. 在编辑器视图的行号左侧双击,或点击右键弹出菜单选择 Toggle breakpoint 。
  2. 在 Breakpoints 视图,点击右侧三个点弹出菜单选择 Add xxx Breakpoint 菜单,有多种类型的断点,包括Watchpoint 。
    在这里插入图片描述

查看函数调用栈

  • 通过 Debug 视图查看当前调用栈。下方函数调用上方函数。形成一个调用链。
  • Debug 视图可以配合Variables 视图查看每个函数的局部变量,点击选择Debug 视图中不同的函数, Variables 视图将显示与选中函数相应的局部变量。
    在这里插入图片描述

查看修改局部变量

  • 通过 Variables 视图查看函数局部变量。
  • 当 CPU 进入 Halt 时, Variables视图默认显示函数调用栈顶部函数的局部变量,通过 Debug 视图选择调用栈内的其它函数时, Variables 将显示对应函数的局部变量。
  • 如有必要,可以在 Value 列修改全局变量。
    在这里插入图片描述

查看修改全局变量

  • Expressions 视图查看全局变量。
  • 添加变量到 Expressions 视图的方法:
    • 点击 Expressions 视图右侧的加号,在对话框内填入合法的 C 表达式。
    • 调试模式下,双击选中要查看的全局变量,点击右键菜单,选择 Add Watch Expression 。
    • 点击 Expressions 视图的表示式列表的最
  • 如有必要,可以在 Value 列修改全局变量。
    在这里插入图片描述

查看反汇编

  • 点击工具栏的指令单步或通过菜单 Window>>Show View>>Disassembly 打开 Disassembly 视图。
    在这里插入图片描述

查看 CPU 寄存器

  • Registers 视图查看 CPU 寄存器。
  • 一般情况下,寄存器视图配合指令单步和反汇编视图使用。
  • 如果有需要,可以修改寄存器的值。
    在这里插入图片描述

查看修改外设寄存器

  • Peripherals 视图配合 Memory 视图查看修改外设寄存器。
  • Peripherals 视图中勾选要查看的外设。
  • Memory 视图显示外设寄存器,包括寄存器内的位定义。如有必要,可以修改寄存器值。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/766250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240628模拟赛总结

cf好了 让我们开始 T1 Two Regular Polygons 判断能不能构造出题中要求的正多边形 关键是n%m0 Two Regular Polygons #include<bits/stdc.h> using namespace std; int t; int n,m; int main() {cin>>t;for(int i1;i<t;i){cin>>n>>m;if(n%m0)co…

MySQL 代理层:ProxySQL

文章目录 说明安装部署1.1 yum 安装1.2 启停管理1.3 查询版本1.4 Admin 管理接口 入门体验功能介绍3.1 多层次配置系统 读写分离将实例接入到代理服务定义主机组之间的复制关系配置路由规则事务读的配置延迟阈值和请求转发 ProxySQL 核心表mysql_usersmysql_serversmysql_repli…

【C++】相机标定源码笔记- 标定工具库测试

标定工具库测试 一、计算相机内参&#xff1a;对两个相机进行内参标定&#xff0c;并将标定结果保存到指定的文件中 采集图像&#xff1a;相机1-16张 相机2-17张 定义保存相机1/2内参的文件(.yml)路径。 定义相机1/2采集的图片文件夹路径。定义相机1/2存储文件名的向量获取文件…

作为图形渲染API,OpenGL和Direct3D的全方位对比。

当你在网页看到很多美轮美奂的图形效果&#xff0c;3D交互效果&#xff0c;你知道是如何实现的吗&#xff1f;当然是借助图形渲染API了&#xff0c;说起这个不就不得说两大阵营&#xff0c;OpenGL和Direct3D&#xff0c;贝格前端工场在本文对二者做个详细对比。 一、什么是图形…

26.5 Django模板层

1. 模版介绍 在Django中, 模板(Templates)主要用于动态地生成HTML页面. 当需要基于某些数据(如用户信息, 数据库查询结果等)来动态地渲染HTML页面时, 就会使用到模板.以下是模板在Django中使用的几个关键场景: * 1. 动态内容生成: 当需要根据数据库中的数据或其他动态数据来生…

推动能源绿色低碳发展,风机巡检进入国产超高清+AI时代

全球绿色低碳能源数字转型发展正在进入一个重要窗口期。风电作为一种清洁能源&#xff0c;在碳中和过程中扮演重要角色&#xff0c;但风电场运维却是一件十足的“苦差事”。 传统的风机叶片人工巡检方式主要依靠巡检人员利用高倍望远镜检查、高空绕行下降目测检查(蜘蛛人)、叶…

校园水质信息化监管系统——水质监管物联网系统

随着物联网技术的发展越来越成熟&#xff0c;它不断地与人们的日常生活和工作深入融合&#xff0c;推动着社会的进步。其中物联网系统集成在高校实践课程中可以应用到许多项目&#xff0c;如环境气象检测、花卉种植信息化监管、水质信息化监管、校园设施物联网信息化改造、停车…

Qt6 qcustomplot在图表上画一条直线

完整代码如下: 主要注意的是Qt中的QHBoxLayout等Qt类对象在被引用的情况下是可以使用局部变量的,典型的如setLayout这类型的函数接口,都可以使用局部变量,而不是new对象。 另外一点就是qcustomplot中的replot就相当于Qt中的update,由于qcustomplot是属于绘图类的接口库,…

如何用Python向PPT中批量插入图片

办公自动化办公中&#xff0c;Python最大的优势是可以批量操作&#xff0c;省去了用户粘贴、复制、插入等繁琐的操作。经常做PPT的朋友都知道&#xff0c;把图片插入到PPT当中的固定位置是一个非常繁琐的操作&#xff0c;往往调整图片时耗费大量的时间和精力。如何能省时省力插…

新型200V预稳压器可简化故障容受型电源的设计

讨论几种设计故障容受型电源的方法&#xff0c;其中包括新的预稳压器拓扑结构&#xff0c;该结构可简化电路设计及元件选择。 对抗相位故障 如果交流电源到电表之间出现错误连接故障&#xff0c;或是像空调或电磁炉等采用三相电源工作的大功率负载在两个相位之间的连接错误&a…

微信小程序 canvas 处理图片的缩放移动旋转问题

这里使用到了一个插件&#xff0c;canvas-drag&#xff0c;来实现大部分功能的 上效果 直接上代码吧~ wxml <div class"container"><canvas-drag id"canvas-drag" graph"{{graph}}" width"700" height"750" ena…

[漏洞分析] CVE-2024-6387 OpenSSH核弹核的并不是很弹

文章目录 漏洞简介漏洞原理补丁分析漏洞原理 漏洞利用漏洞利用1: SSH-2.0-OpenSSH_3.4p1 Debian 1:3.4p1-1.woody.3 (Debian 3.0r6, from 2005) [无ASLR无NX]漏洞利用原理漏洞利用关键点 漏洞利用2: SSH-2.0-OpenSSH_4.2p1 Debian-7ubuntu3 (Ubuntu 6.06.1, from 2006) [无ASLR…

[C++][设计模式][组合模式]详细讲解

目录 1.动机(Motivation)2.模式定义3.要点总结4.代码感受 1.动机(Motivation) 软件在某些情况下&#xff0c;客户代码过多地依赖于对象容器复杂的内部实现结构&#xff0c;对象容器内部实现结构(而非抽象结构)的变化引起客户代码的频繁变化&#xff0c;带来了代码的维护性、扩…

Hi3861 OpenHarmony嵌入式应用入门--wifi sta

鸿蒙WiFi STA模式相关的API接口文件路径 foundation/communication/interfaces/kits/wifi_lite/wifiservice/wifi_device.h 所使用的API接口有&#xff1a; API 接口说明 WifiErrorCode EnableWifi(void); 开启STA WifiErrorCode DisableWifi(void); 关闭STA int IsWif…

《后端程序猿 · 基于 Lettuce 实现缓存容错策略》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;如需交流&#xff…

大数据期末复习——hadoop、hive等基础知识

一、题型分析 1、Hadoop环境搭建 2、hadoop的三大组件 HDFS&#xff1a;NameNode&#xff0c;DataNode&#xff0c;SecondaryNameNode YARN&#xff1a;ResourceManager&#xff0c;NodeManager &#xff08;Yarn的工作原理&#xff09; MapReduce&#xff1a;Map&#xff0…

点云处理实操 点云平面拟合

目录 一、什么是平拟合 二、拟合步骤 三、数学原理 1、平面拟合 2、PCA过程 四、代码 一、什么是平拟合 平面拟合是指在三维空间中找到一个平面,使其尽可能接近给定的点云。最小二乘法是一种常用的拟合方法,通过最小化误差平方和来找到最优的拟合平面。 二、拟合步骤…

Kafka 为何如此之快?深度解析其背后的秘密

目录 前言 一、生产者 1. 异步发送 2. 多分区并行 3. 消息批量发送 4.支持消息压缩 二、存储端 1. 分区和副本 2. 页缓存 3. 磁盘顺序写入 4. 零拷贝技术 5. 稀疏索引 三、消费端 1. 消费者群组 2. 批量拉取 3. 高效的偏移量管理 4. 并行消费 总结 前言 Kafk…

观测云赋能「阿里云飞天企业版」,打造全方位监控观测解决方案

近日&#xff0c;观测云成功通过了「阿里云飞天企业版」的生态集成认证测试&#xff0c;并荣获阿里云颁发的产品生态集成认证证书。作为监控观测领域的领军者&#xff0c;观测云一直专注于提供统一的数据视角&#xff0c;助力用户构建起全球范围内的端到端全链路可观测服务。此…

SwanLinkOS首批实现与HarmonyOS NEXT互联互通,软通动力子公司鸿湖万联助力鸿蒙生态统一互联

在刚刚落下帷幕的华为开发者大会2024上&#xff0c;伴随全场景智能操作系统HarmonyOS Next的盛大发布&#xff0c;作为基于OpenHarmony的同根同源系统生态&#xff0c;软通动力子公司鸿湖万联全域智能操作系统SwanLinkOS首批实现与HarmonyOS NEXT互联互通&#xff0c;率先攻克基…