嵌入式_Keil (MDK - ARM) 的调试步骤

2023-11-02

目录

1. 编译 + 调试

2. 复位 + 全速运行

3. 单步调试

4. 逐步调试

5. 跳出调试

6. 运行到光标处

7. 跳转到暂停行

8. 调试窗口


首先为什么需要在 MDK 中进行程序的调试呢?

        在 MDK 中进行程序调试的主要目的是识别和解决程序中的问题和错误。

        比如说找到程序中的逻辑错误。错误的条件判断、循环问题或错误的算法实现。通过观察和分析程序在调试器中的执行过程,可以确定程序执行的路径是否符合预期,从而找到潜在的逻辑错误。

       同时可以观察程序在执行过程中变量值的变化。这对于检查变量是否包含正确的数据是非常有用的。通过在程序中设置断点并使用调试工具查看变量的值,可以确保程序在运行时正确的操作变量。

        同时调试可以帮忙识别有关内存的问题。比如说内存泄露、非法内存访问或栈溢出。

        优化性能。可以通过调试程序,了解程序的性能瓶颈和效率问题。识别并找到导致程序效率低下的部分。使用调试信息和性能分析工具来优化代码,以改善程序的执行速度和资源利用率。

        总之,在 MDK 中进行程序调试可以帮助我们检测和解决程序中的问题,提高程序的质量、性能和可靠性。通过调试,可以客观的了解程序的运行情况,并进行必要的修改和优化,以确保程序达到预期并满足需求。

1. 编译 + 调试

        在线调试主要分为软件在线调试硬件在线调试。随着现代技术的发展,硬件的成本普遍比较低,一般我们都使用硬件在线调试,也就是在 MDK 中编译好程序后,将程序下载到单片机的芯片中。在 MDK 中进行硬件调试。(进入调试界面的要求是必须先将程序下载到芯片中)

打开软件工程 ---> 编译 ---> 下载 ---> 调试,如下图的步骤:

进入调试以后的界面如下图所示:

2. 复位 + 全速运行

首先先进行复位,将程序复位到初始值处;然后 F5 进行全速运行,我们可以在很多的地方打断点,这样 F5 全速运行就会到达断点位置,到达断点位置对应程序也就停止了。前提是程序从初始状态到断点位置中间没有错误,能运行到断点位置。

复位以后的界面如下图所示:

在此设置四个断点,F5 全速运行,或者点击 RESET 旁边的图标全速运行,如下图所示:

3. 单步调试

顾名思义,单步调试就是每点一次按钮,程序就运行一步,遇到函数会进入函数

点击下图中的图标进行单步调试,或者使用快捷键 F11。(这里取消上面的断点)

在具体的使用过程中,就会明白什么叫没点一次,程序就运行一步,遇到函数进入函数。(比如说 main 函数,main 开始时首先 delay_init(168); F11 来到这一行时,就会进入函数 delay.c 中,将 delay_init 函数运行完以后,又会重新返回主函数 main 中,运行下一个 usart_init(115200);之后又会进入 usart.c 中,进入 usart_init 函数中,如此进行循环)

4. 逐步调试

逐步调试也是一行一行的进行运行,也就是每点一次按钮,程序运行一行。但是遇到函数不会进入函数

点击下图中的图标,或者使用快捷键 F10。

5. 跳出调试

跳出调试就是跳出函数调试,也就是每点一次按钮,程序跳出一个函数,直到跳出最外面的的函数为止(main 函数)。点击图标按钮,或者按快捷键 Ctrl + F11。

6. 运行到光标处

运行到光标处即将光标放在某一处,点击该按钮(或者 Ctrl + F10),程序执行到光标的位置就会停止下来(当然前提是程序可以运行到光标处)

7. 跳转到暂停行

跳转到暂停行这个功能在程序停止运行时有效,主要的作用就是我们打开了很多文件,这个时候不知道程序运行到哪里了,点击该按钮,就可以找到我们程序暂停的位置。

8. 调试窗口

调试窗口是在调试的时候可以查看的窗口,进入调试模式后,点击 View 菜单,即可查看下面的窗口菜单。

其中用的比较多的有:

Memory Windows:内存窗口,也就是我们查看变量的窗口。

System Viewer:系统外设窗口,查看外设寄存器数值的窗口。(这对于我们查看寄存器值是非常有帮助的!)

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

嵌入式_Keil (MDK - ARM) 的调试步骤 的相关文章

  • day 7

    封装一个学生的类 定义一个学生这样类的vector容器 里面存放学生对象 至少3个 再把该容器中的对象 保存到文件中 再把这些学生从文件中读取出来 放入另一个容器中并且遍历输出该容器里的学生 include
  • windows系统中用Python调用linux系统shell脚本

    一 windows系统先安装 1 安装python3 5 2 安装paramiko pip install paramiko 3 卸载cryptography 2 5 python m pip uninstall cryptography

随机推荐

  • linux+rwx+权限值,linux权限管理:rwx

    权限管理简介 r w x 对文件及目录进行权限管理 从而达到文件及目录管理 1 rwx对于文件而言 r 可读 可以使用类似cat等命令查看文件内容 w 可写 可以编辑或删除此文件 x 可执行 exacutable 可以命令提示符下当作命令提
  • 华为机试题70-矩阵乘法计算量估算

    描述 矩阵乘法的运算量与矩阵乘法的顺序强相关 例如 A是一个50 10的矩阵 B是10 20的矩阵 C是20 5的矩阵 计算A B C有两种顺序 AB C 或者 A BC 前者需要计算15000次乘法 后者只需要3500次 编写程序计算不同
  • 新手必看!最简单的MySQL数据库详解

    本篇文章主要跟大家介绍的是详解MySQL数据库 对于新手来说帮助很大的 而且MySQL是最流行的关系型数据库管理系统 在web应用方面 MySQL也是最好的RDBMS应用软件之一 因此 感兴趣的朋友记得要看完 是什么数据库 数据库 Date
  • 微信商户平台结算周期T+1是什么意思

    我们在商户平台的管理后台 有的时候 用户支付了 可是却没有看到有资金信息 这个一般是因为您的账户类似的T 1的原因 那结算周期T 1是什么意思呢 通俗的理解就是 交易日的次日 T就是today 今天的意思 的第一个字母的大写 T 1 T 2
  • C语言中的static的用法(超级详细)

    作者 云小逸 个人主页 云小逸的主页 码云 云小逸 YunXiaoYi003 motto 要敢于一个人默默的面对自己 强大自己才是核心 不要等到什么都没有了 才下定决心去做 种一颗树 最好的时间是十年前 其次就是现在 学会自己和解 与过去和
  • yii2 ajax增删改查,Yii2 中常用的增删改查操作总结

    一 新增 1 使用save model newUser model gt name test model gt phone 13000000000 model gt email 123456 qq com model gt save 2 使
  • c语言24点核心算法,24点游戏的核心算法时.doc

    24点游戏的核心算法时 24点游戏的核心算法 时间 2010 10 15 15 10 点击 873 次 24 点游戏 就是在给定的几个数字之间加入数学运算符号 使最终结果等于 24 如下图所示 算法的思路是 1 考虑没有括号的情况 运算符为
  • 「面试」拿到B站的意向书

    此次B站服务端开发面试之旅可谓惊险 不过通过对大部分面试题套路的掌握 不出意外还是拿下了 下面我们来看看这些骚题是不是常见的不能再常见的了 这些面试题看了就能面上 当然不是 只是通过这些题让自己知道所欠缺的是什么 以及可以去看看哪些资料 1
  • React 从零开始学习(二)—— JSX

    接上一篇 搭建的项目基本结构如下 上面可以看到 React 应用程序是由 组件 组成的 一个组件是 UI 用户界面 的一部分 有自己的逻辑和外观 组件可以小到一个按钮 也可以大到整个页面 JSX React 组件是返回标签的 JavaScr
  • MySQL 用户管理

    目录 用户管理 用户 用户信息 创建用户 删除用户 修改用户密码 数据库的权限 给用户 注意 如果发现赋权限后 没有生效 执行如下指令 回收权限 用户管理 如果我们只能使用 root 用户 这样存在安全隐患 这时 就需要使用 MySQL 的
  • 【正点原子STM32连载】 第三十章 PVD电压监控实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv
  • [951]numpy.concatenate()函数

    numpy concatenate 官方文档 numpy concatenate a1 a2 axis 0 out None 将具有相同结构的array序列结合成一个array axis是拼接方向 0为横轴 1为纵轴 axis 0 拼接方向
  • clickhouse集群安装

    环境介绍 准备四台服务器搭建clickhouse集群 创建两个分片 每个分片一个副本 在任意三台服务器上安装zookeeper 服务 clickhouse集群依赖zookeeper进行服务器之间的数据同步 192 168 1 1 ch1 t
  • 自学python?一般人我还是劝你算了吧

    自我介绍 本人其实属于一枚屌丝 在真正开始学python之前 其实也就是对电脑的认知只限于上个网 玩个office办公软件 废话不多说 我为啥说自学python 一般人我还是劝你算了吧 因为我就是那个不一般的人 基础真的很简单 是个人稍微认
  • Android RxJava:图文详解 变换操作符

    前言 Rxjava 由于其基于事件流的链式调用 逻辑简洁 使用简单的特点 深受各大 Android开发者的欢迎 Github截图 如果还不了解 RxJava 请看文章 Android 这是一篇 清晰 易懂的Rxjava 入门教程 RxJav
  • 黑莓手机时代落幕;阿里巴巴为 Linux 内核调度器提出新概念;清理 Linux 内核“依赖地狱”

    整理 宋彤彤 责编 屠敏 开源吞噬世界的趋势下 借助开源软件 基于开源协议 任何人都可以得到项目的源代码 加以学习 修改 甚至是重新分发 关注 开源日报 一文速览国内外今日的开源大事件吧 一分钟速览新闻点 开源大新闻 黑莓手机时代落幕 阿里
  • 解决异常报错java.sql.SQLException: Value ‘0000-00-00 00:00:00‘ can not be represented as java.sql.Timestam

    今天在执行某个分页查询时 查询MySQL的结果集时遇到如下报错 java sql SQLException Value 0000 00 00 00 00 00 can not be represented as java sql Times
  • SpringBoot 集成PageHelper 分页组件

    第一步 添加依赖
  • 一文读懂如何使用starUML绘制类关系图

    正文 前言 接下来我们画一张比较完整的类图 类间关系有 继承 组合 聚合 依赖 关联 参照的图是 开始画图 如图所示先点击左边Toolbox 中的class 然后在中间白色画布上点击一下 这样就出来了一个类 我们会看到这个类右边有一大堆黑色
  • 嵌入式_Keil (MDK - ARM) 的调试步骤

    目录 1 编译 调试 2 复位 全速运行 3 单步调试 4 逐步调试 5 跳出调试 6 运行到光标处 7 跳转到暂停行 8 调试窗口 首先为什么需要在 MDK 中进行程序的调试呢 在 MDK 中进行程序调试的主要目的是识别和解决程序中的问题