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

news2024/11/19 1:21:06

目录

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:系统外设窗口,查看外设寄存器数值的窗口。(这对于我们查看寄存器值是非常有帮助的!)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

五种网络 I/O 模型

文章目录 1. 阻塞式 I/O 模型2. 非阻塞式 I/O 模型3. I/O 多路复用4. 信号驱动式 I/O5. 异步 I/O6. I/O 模型的分类 Unix 下有五种可用的 I/O 模型: 阻塞式 I/O 非阻塞式 I/O I/O 多路复用(select/poll/epoll) 信号驱动式 I/O(…

【Spring MVC】Spring MVC程序开发教程:常见的注解及使用方式详情

前言 Spring MVC是一种常用的Web框架,它可以帮助开发人员快速构建可扩展的Web应用程序。为了提供更好的开发体验和更高的代码效率,Spring MVC提供了各种注解。这些注解可以用于控制器、请求参数、响应类型、表单数据验证、异常处理等方面。在本文中&…

卡尔曼滤波(附C++代码)

是什么 任何时候对于动态系统存在不确定信息,都可使用卡尔曼滤波(Kalman Filter,下面简称为KF)对系统下一步要做什么做出有根据的猜测。 KF对于连续变化的系统是理想的,优点是占用内存小而且速度快,非常适…

在Linux中安装RabbitMQ

RabbitMQ下载网址 Socat下载网址 erlang下载网址 RabbitMQ安装包依赖于Erlang语言包的支持,所以需要先安装Erlang语言包,再安装RabbitMQ安装包 通过Xftp软件将这三个压缩包上传到linux中的opt目录下 ,双击即可 在安装之前先查询…

Android oss policy上传

OSS Policy方式上传 一、 流程对比1.1 普通上传1.2 服务端签名后直传 二、获取上传的policy签名配置三、请求OSS上传文件四、调用应用服务器接口同步文件五、关于上传OSS报错注意事项六、附送链接 一、 流程对比 1.1 普通上传 缺点: 上传慢:用户数据需…

数学建模常用模型(五):多元回归模型

数学建模常用模型(五):多元回归模型 由于客观事物内部规律的复杂性及人们认识程度的限制,无法分析实际对象内在的因果关系,建立合乎机理规律的数学模型。所以在遇到有些无法用机理分析建立数学模型的时候,…

docker中运行RabbitMq的启用插件指南

我们使用 Docker 来运行 RabbitMQ,有时需要启用一些插件,这个与正常安装的启用插件的步骤会有所不同。以下是在 Docker 中启用 RabbitMQ 插件的一般步骤: 首先,确认已经将 rabbitmq_delayed_message_exchange-3.12.0.ez 插件文件复…

raid5两块磁盘掉线导致阵列崩溃的服务器数据恢复案例

服务器数据恢复环境: DELL PowerVault系列某型号存储,15块硬盘搭建了一组RAID5磁盘阵列。 服务器故障&检测: 存储设备raid5阵列中一块磁盘由于未知原因离线,管理员对该磁盘阵列进行了同步操作。在同步的过程中又有一块磁盘指示…

使用 hbuilderx 配置 MuMu模拟器进行调试

第一步 先安装MuMu模拟器,调成手机模式。 第二步 查看MuMu模拟器监听的端口。 在安装目录下 /vms/MuMuPlayer-12.0-0/MuMuPlayer-12.0-0 旧端口7555,新端口号16384 切换到安装目录下的 /shell,然后shift右击,打开 powershell&a…

【服务器数据恢复】raid5崩溃的redhat linux系统数据恢复案例

服务器数据恢复环境: 一台ibm某型号服务器,5块硬盘组建一组raid5磁盘阵列,redhat linux操作系统,上层部署有oracle数据库。 服务器故障: raid5阵列中两块硬盘离线,服务器崩溃。经过初检发现故障服务器中的…

基于SpringBoot的医护人员排班系统【附开题(bao告)和万字文档(Lun文)和搭建文档】

主要功能 前台登录: ①首页:医院信息展示、医护信息展示、排班信息展示、投诉信息展示 ②医院信息:名称查询、医院查看、医院简介、可以点赞、可以评论、点我收藏 ③医护信息:根据工号、姓名查询、点击查看医护信息、可以收藏 ④…

Simulink仿真模块 - Band-Limited White Noise

Band-Limited White Noise模块的功能是在连续系统中引入白噪声。它所在的库为: Simulink / Sources 如图所示: Band-Limited White Noise 模块生成适合在连续系统或混合系统中使用的正态分布随机数。 白噪声仿真 从理论上讲,连续白噪声的相关时间为 0,功率谱密度 …

飞利浦的护眼台灯好用吗?南卡/飞利浦/雷士对比测评,看看哪款更好用!

日常生活中,灯光对于我们重要性不用多说。不管是学习还是办公等环境都需要合适的光线,而台灯作为补充光线小型家电,基本每个家庭里都会备着一台,特别是对于长期使用电脑的上班族或者需要长时间学习的学生这类人员。但是台灯的种类…

【大数据技术】hive 窗口函数sum range between的详细介绍

【大数据技术】hive 窗口函数sum range between的详细介绍 数据准备 建表 create table range_test( name string, month int , sales int ) row format delimited fields terminated by "," ;插入数据 load data local inpath "/home/xx/test/1.t…

双击就能运行的Win95,流畅稳定还内置大型游戏

像咱这样的新时代互联网民工,上班面对 Win10/11 下班也还是一样,难免有时候觉得腻。 回味起当初的 Win7、Win8、Win XP ,不管当初受过什么伤,现在只有美好的回忆。 大家可能还想象过,用现在配置去运行老系统。 不知高…

uniapp 小程序 vue TypeError: Cannot read property ‘toString‘ of undefined

是因为对字符串使用toString的时候页面中的数据还没有加载 。错误代码: 可以使用 v-if 修改为:

AR是现实的商业创新,还是虚幻的电子梦境?

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 在本期节目中,我们将深入探讨AVAR的创始人胡雅婷的创业故事。 我们从年轻人偏爱虚拟偶像和热衷元宇宙创业的社会话题出发&…

递归的深层次理解+初始搜索算法

1)什么是递归:就是函数自己调用自己的过程 2)为什么会使用到递归:主问题->相同的子问题,相同的子问题->一样相同的子问题 3)递归结束的条件:也就是细节和出口最小的不能在继续进行分割的子问题 4)宏观看待递归的过程: 1)不要在意递归展开的细节图 2)那递归的函…

全面分析MySQL?ERROR?1045出现的原因及解决

目录 通常从网上都能找到解决方案 1.停止服务2.跳过验证3.修改密码4.重启服务原因分析 SO 解决办法 在命令行输入mysql -u root –p,输入密码,或通过工具连接数据库时,经常出现下面的错误信息,相信该错误信息很多人在使用MySQL…

使用Kali Linux 暴力破解wifi密码详细步骤

使用Kali Linux 暴力破解wifi密码详细步骤所谓暴力破解就是穷举法,将密码字典中每一个密码依次去与握手包中的密码进行匹配,直到匹配成功。所以能否成功破解wifi密码取决于密码字典本身是否包含了这个密码。破解的时间取决于CPU的运算速度以及密码本身的…