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

news/2024/5/6 6:44:04/文章来源:https://blog.csdn.net/light_2025/article/details/131585666

目录

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.luyixian.cn/news_show_328269.aspx

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

相关文章

【CANopen】周立功轻松入门CANopen笔记

前言 想学习些新东西了,原本想直接学学Ethercat,但是简单看了看对象字典啥的概念一头雾水的,决定先从CANopen开始,Ethercat看着头疼。Etehrcat和CANopen有挺多类似的地方。感谢ZLG的这个入门笔记,我似乎是看懂了些&am…

一、枚举类型——新特性(模式匹配-支配性)

switch 中 case 语句的顺序很重要。如果基类先出现,就会支配任何出现在后面的 case: Dominance.java JDK 17 sealed interface Base { }record Derived() implements Base { }public class Dominance {static String test(Base base) {return switch (ba…

视频行为识别(一)——综述

Deep Neural Networks in Video Human Action Recognition: A Review 本次分享的文章是2023年收录在计算机视觉领域的顶刊“CVPR”(级别:视觉类TOP)期刊上。该期刊详细信息可关注公众号 AI八倍镜 点击菜单项查询。 论文地址:http…

代码随想录二刷day46 | 动态规划之139.单词拆分

day46 139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满…

第三章 SSD存储介质:闪存 3.4

3.4 闪存数据完整性 可采用以下数据完整性的技术确保用户数据不丢失: (1)ECC纠错; (2)RAID数据恢复; (3)重读(Read Retry); &#xff…

vue 进阶---动态组件 插槽 自定义指令

目录 动态组件 如何实现动态组件渲染 使用 keep-alive 保持状态 keep-alive 对应的生命周期函数 keep-alive 的 include 属性和exclude属性 插槽 插槽的基础用法 具名插槽 作用域插槽 自定义指令 自定义指令的分类 私有自定义指令 全局自定义指令 了解 eslint 插件…

免费开源 | 基于SpringBoot的博客系统

介绍 基于springboot后端架构,websocket实现私信,前端采用thymeleafbootstraplayuiRedis 注册使用邮箱验证注册,且验证码存在redis中,所以需要有redis环境 软件架构 springbootwebsocketthymeleafbootstraplayuiRedismysql 8.…

Vue 数据双向绑定

双向数据绑定 : 通过前面学习知道 Vue 是数据驱动的,数据驱动有一个精髓之处是数据双向绑定, 即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。(就是mvvm数据发生变化…

C#,中国福利彩票《刮刮乐》的数学算法(01)——幸运123

彩票名称:幸运123面值:20元/张最高奖:100万(人民币)全套款式:2款玩法介绍: 一份好运,二倍快乐,三重惊喜。福彩刮刮乐新游戏“幸运123”,红色的票面上点缀着礼…

spring 详解二 IOC(Bean xml配置及DI)

配置列表 Xml配置 功能描述 <bean id"" class""></bean> Bean的id&#xff0c;配置id会转为Bean名称和不配就是全限定类名 <bean name"" ></bean> Bean的别名配置&#xff0c;存储在Factory的aliasMap中通过别名也…

Qt自定义控件之动画文本

文章目录 前言一、动画文本的效果二、具体实现定义动画对象设置动画时长的实现设置text函数实现绘制代码设置字体函数 三、高级部分操作代码总结 前言 在 Qt 中&#xff0c;自定义控件可以让我们实现丰富的用户界面效果和交互体验。其中&#xff0c;动画文本是一种常见的效果&…

使用 tail -f 实时观测服务器日志输出

在开发阶段, 有 console 端的输出, 总是可以方便实时地看到应用的日志. 可一旦应用部署到服务器上之后呢, 日志被输出到文件中, 在某些情景下需要不停地查看日志文件的输出以定位某些问题, 此时是否还能像开发那样实时查看日志呢? 答案是可以的! 这个命令就是 tail -f . tail…

Git使用详细教程

1. cmd面板的常用命令 clear&#xff1a;清屏cd 文件夹名称----进入文件夹cd … 进入上一级目录(两个点)dir 查看当前目录下的文件和文件夹(全拼:directory)Is 查看当前目录下的文件和文件夹touch 文件名----创建文件echo 内容 > 创建文件名----创建文件并写入内容rm 文件名…

Redis知识补充(1)

1)Redis本身就是在内存中进行存储数据的&#xff0c;那么为什么不直接定义一个变量来针对数据直接进行存储呢&#xff1f;因为Redis主要是应用于分布式系统&#xff0c;才能发挥它的最大威力&#xff0c;如果只是一个单机程序&#xff0c;通过变量存储数据的方式&#xff0c;是…

Kotlin~Composite组合模式

概念 能够帮助实现树状结构的模式。 主要特点 递归组合树状结构统一处理所有对象 角色介绍 Component: 组合接口Leaf: 叶子节点&#xff0c;无子节点Composite&#xff1a;枝节点&#xff0c;用来存储子部件 UML 代码实现 interface Organ {fun personCount():Int } cla…

[VUE学习】从头搭建权限管理系统前端-初始化

1.安装Node 2.安装Vue Cli vue的一个脚手架 npm install -g vue/cli 3.vue ui搭建vue项目 cmd 运行 vue ui 然后创建新项目 选择npm 选择配置 Babel 是编译的 Router 是路由 vuex 是状态保存的 Linter/fomatter 代码检测和格式化 创建完成 这个时候 代码在我们本地…

解决IDEA/WebStorm的Ctrl+Shift+F冲突失效

IDEA 的 CtrlShiftF 是全文或全项目搜索搜索快捷键&#xff0c;非常好用。 当这个快捷键偶而会失效时&#xff0c;基本可以确定是快捷键冲突了。 检查所有运行的软件的快捷键&#xff0c;若有设置为CtrlShiftF的则改掉。特别是输入法会占用较多的快捷键。 例如我这里的搜过输…

Skywalking高级使用

Skywalking高级使用 RPC调用监控Mysql调用监控Skywalking常用插件获取追踪ID过滤指定的端点告警功能Skywalking原理Open Tracing介绍 RPC调用监控 Skywalking(6.5.0)支持的RPC框架有以下几种&#xff1a; (1) Dubbo 2.5.4 -> 2.6.0 (2) Dubbox 2.8.4 (3) Apache Dubbo 2.7.…

Git gui教程---第四篇 Git gui的使用 添加文件,并提交

添加文件&#xff0c;并提交 新建一个txt文件点击扫描重新扫描&#xff0c;未缓存改动多了我们刚刚新建的文件。 点击缓存改动&#xff0c;文件位置变换。 如果缓存选错&#xff0c;想撤销&#xff0c;在菜单栏选择“提交”&#xff0c;“从本次提交撤销”&#xff0c;文件变更…

实例解释在lingo中使用集合模型

某部门有三个生产同一产品的工厂&#xff08;产地&#xff09;&#xff0c;生产的产品运往四个销售点&#xff08;销地&#xff09;出售&#xff0c;各个工厂的生产量、各销地的销量&#xff08;单位&#xff1a;吨&#xff09;、从各个工厂到各个销售点的单位运价&#xff08;…