当前位置: 首页 > news >正文

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 视图显示外设寄存器,包括寄存器内的位定义。如有必要,可以修改寄存器值。
    在这里插入图片描述

相关文章:

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

Eclipse GDB J-Link 的调试实践 本文介绍如何创建Eclipse的调试配置,如何控制调试过程,如何查看修改各种变量。 对 Eclipse 的要求 所用 Eclipse 应当安装了 Eclipse Embedded CDT 插件。从 https://www.eclipse.org/downloads/packages/ 下载 Ecli…...

前端代码生成辅助工具

1,Axure Axure设计的界面如何生成HTML文件 https://blog.csdn.net/qq_43279782/article/details/112387511 Axure 生成HTML 文件,并用Chrome打开 https://blog.csdn.net/qq_30718137/article/details/80621025 2,OpenUI [开源] OpenUI …...

静态库与动态库总结

一、库文件和头文件 所谓库文件,可以将其理解为压缩包文件,该文件内部通常包含不止一个目标文件(也就是二进制文件)。 值得一提的是,库文件中每个目标文件存储的代码,并非完整的程序,而是一个…...

深入解析tcpdump:网络数据包捕获与分析的利器

引言 在网络技术日新月异的今天,网络数据包的捕获与分析成为了网络管理员、安全专家以及开发人员不可或缺的技能。其中,tcpdump作为一款强大的网络数据包捕获分析工具,广泛应用于Linux系统中。本文将从技术人的角度,详细分析tcpdu…...

【漏洞复现】科立讯通信有限公司指挥调度管理平台uploadgps.php存在SQL注入

0x01 产品简介 科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、…...

什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术

什么是自然语言处理? 自然语言处理(Natural Language Processing,简称NLP)是人工智能的一个重要分支,旨在让计算机理解、解释和生成人类的自然语言。打个比方,你和Siri对话,或使用谷歌翻译翻译一…...

【linux】gcc快速入门教程

目录 一.gcc简介 二.gcc常用命令 一.gcc简介 gcc 是GNU Compiler Collection(GNU编译器套件)。就是一个编译器。编译一个源文件的时候可以直接使用,但是源文件数量太多时,就很不方便,于是就出现了make 工具 二.gcc…...

【多维动态规划】Leetcode 97. 交错字符串【中等】

交错字符串 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串 子字符串 是字符串中连续的 非空 字符序列。 s s1 s2 … snt…...

【JavaScript脚本宇宙】精通前端开发:六大热门CSS框架详解

前端开发的利器:深入了解六大CSS框架 前言 在现代Web开发中,选择适合的前端框架和工具包是构建高效、响应式和美观的网站或应用程序的关键。本文将详细介绍六个广受欢迎的CSS框架:Bootstrap、Bulma、Tailwind CSS、Foundation、Materialize…...

开发技术-Java集合(List)删除元素的几种方式

文章目录 1. 错误的删除2. 正确的方法2.1 倒叙删除2.2 迭代器删除2.3 removeAll() 删除2.4 removeIf() 最简单的删除 3. 总结 1. 错误的删除 在写代码时,想将其中的一个元素删除,就遍历了 list ,使用了 remove(),发现效果并不是想…...

c++ 递归

递归函数是指在函数定义中调用自身的函数。C语言也支持递归函数。 下面是一个使用递归函数计算阶乘的例子&#xff1a; #include <iostream> using namespace std;int factorial(int n) {// 基本情况&#xff0c;当 n 等于 0 或 1 时&#xff0c;阶乘为 1if (n 0 || n…...

RedHat9 | podman容器

1、容器技术介绍 传统问题 应用程序和依赖需要一起安装在物理主机或虚拟机上的操作系统应用程序版本比当前操作系统安装的版本更低或更新两个应用程序可能需要某一软件的不同版本&#xff0c;彼此版本之间不兼容 解决方式 将应用程序打包并部署为容器容器是与系统的其他部分…...

边缘计算项目有哪些

边缘计算项目在多个领域得到了广泛的应用&#xff0c;以下是一些典型的边缘计算项目案例&#xff1a; 1. **智能交通系统**&#xff1a;通过在交通信号灯、监控摄像头等设备上部署边缘计算&#xff0c;可以实时分析交通流量&#xff0c;优化交通信号控制&#xff0c;减少拥堵&…...

计算fibonacci数列每一项时所需的递归调用次数

斐波那契数列是一个经典的数列&#xff0c;其中每一项是前两项的和&#xff0c;定义为&#xff1a; [ F(n) F(n-1) F(n-2) ] 其中&#xff0c;( F(0) 0 ) 和 ( F(1) 1 )。 对于计算斐波那契数列的第 ( n ) 项&#xff0c;如果使用简单的递归方法&#xff0c;其时间复杂度是…...

【教学类65-05】20240627秘密花园涂色书(中四班练习)

【教学类65-03】20240622秘密花园涂色书03&#xff08;通义万相&#xff09;&#xff08;A4横版1张&#xff0c;一大 68张纸136份&#xff09;-CSDN博客 背景需求: 打印以下几款秘密花园样式&#xff08;每款10份&#xff09;给中四班孩子玩一下&#xff0c;看看效果 【教学类…...

Python 学习之基础语法(一)

Python的语法基础主要包括以下几个方面&#xff0c;下面将逐一进行分点表示和归纳&#xff1a; 一、基本语法 1. 注释 a. 单行注释&#xff1a;使用#开头&#xff0c;例如# 这是一个单行注释。 b. 多行注释&#xff1a;使用三引号&#xff08;可以是三个单引号或三个双引号&…...

日志分析-windows系统日志分析

日志分析-windows系统日志分析 使用事件查看器分析Windows系统日志 cmd命令 eventvwr 筛选 清除日志、注销并重新登陆&#xff0c;查看日志情况 Windows7和Windowserver2008R2的主机日志保存在C:\Windows\System32\winevt\Logs文件夹下&#xff0c;Security.evtx即为W…...

【ARM】MDK工程切换高版本的编译器后出现error A1137E报错

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决工程从Compiler 5切换到Compiler 6进行编译时出现一些非语法问题上的报错。 2、 问题场景 对于一些使用Compiler 5进行编译的工程&#xff0c;要切换到Compiler 6进行编译的时候&#xff0c;原本无任何报错警告…...

深入 SSH:解锁本地转发、远程转发和动态转发的潜力

文章目录 前言一、解锁内部服务&#xff1a;SSH 本地转发1.1 什么是 SSH 本地转发1.2 本地转发应用场景 二、打开外部访问大门&#xff1a;SSH 远程转发2.1 什么是 SSH 远程转发2.2 远程转发应用场景 三、动态转发&#xff1a;SSH 让你拥有自己的 VPN3.1 什么是 SSH 动态转发3.…...

python如何把一个函数的返回值,当成这个函数的参数值

python如何把一个函数的返回值&#xff0c;当成这个函数的参数值 1. 递归调用 递归是一种函数自己调用自己的方法。在递归调用中&#xff0c;你可以将前一次调用的返回值作为下一次调用的参数。 def recursive_function(x):# 函数逻辑if 条件满足:return 结果else:return rec…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...