MDK debug调试方法

  • 使用仿真器进行在线调试
    • ⭐基础调试方法
      • 调试环境的配置
      • 调试界面介绍
        • 执行操纵栏
        • 断点
        • 挂起
      • 调试窗口介绍
        • call stack windows
        • watch windows
        • peripheral工具栏
    • ⭐进阶调试方法
      • 区段函数执行时间
      • Memory查看寄存器地址
      • 查看中断执行的时间和次数
      • 全局变量读写时暂停

使用仿真器进行在线调试

硬件环境:STM32F407VET6核心板
软件环境:Keil 5.0
分类:此类为【技巧型】知识,需要多加练习才能掌握
你可以学到:如何通过MDK的自带的调试功能进行调试与检查可能出现的问题

⭐基础调试方法

调试环境的配置

  1. 配置好debug:点击魔术棒

    在Debug-setting选项中进行如下配置:


左侧和仿真器型号相关,右侧和单片机型号相关。
如果出现:
左边检测不到,是因为没有链接电脑
右边检测不到,是因为没有连接开发板
如果:
两侧都有显示,说明可以进行下载和调试,进入下一步调试阶段。

  1. 点击放大镜即可进入

调试界面介绍

执行操纵栏


分别是复位/程序运行/停止
复位:程序重头开始执行,(可以和断点进行配合使用)
Run:使程序正常进行
挂起:停止正在运行的程序

进入函数/执行过此函数/跳出函数/执行到光标处
这些按钮可以控制函数的执行流程,用以动态的查看函数的工作和运行

断点


只有在灰色区域可以设置断点
上图中,【黄色箭头】是程序执行到的地方/【绿色箭头】是光标所在地方
可以设置断点状态:

插入断点、使能/失能断点、失能所有断点、清楚所有断点。
这些选项可以对断点进行管理,方便使用断点。
【注意】点击 run 是执行到断点处,(此时断点所在的行【没有】被执行),断点是:即将执行某一行代码。

除了设置断点之外,还可以设置挂起:

挂起

挂起:程序执行到某个地方突然被中断
与断点的区别:挂起并不知道在哪里停下,知识知道在发生什么事件后停下,这个事件可以通过外部的标志进行判断

调试窗口介绍


先介绍比较常用的几个窗口

call stack windows

显示正在执行的程序中,函数的调用情况
点开后,是下列界面:

第一列是函数名称/第二列是函数地址或者函数值(返回值)第三列是函数类型
同时可以查看函数内部的局部变脸。

使用的时候,不需要将函数拖进去,就可以查看函数内部局部变量的值。

这里思考一个问题:为什么函数中的局部变量的值要在堆栈里查看?
猜测:因为C语言中调用函数内部的局部变量,是在调用时生成,调用结束后销毁的,
用堆栈存放这些变量,可能是考虑到了函数的嵌套调用的情况,
在函数调用完毕后,最后一个被存储的局部变量第一个被销毁。刚好符合堆栈后进先出的原则。

watch windows


直接将某个函数或者变量拖进来,就可以显示该函数或者变量的值。
如下图所示:

这样可以很方便的在调试过程中查看寄存器或者变量的情况。(函数对应的是函数入口地址)

需要特别注意MDK的优化问题
一定要使用level-0优化方式,否则优化登记太高,将不会显示某些变量的值,导致一些变量一直处于< not in scope>的状态
优化的选项在魔术棒中,如下图

peripheral工具栏


在这个工具栏下,几乎可以选择所有的片内外设,点开后,会显示外设的寄存器的所有状态
我们依照这些寄存器状态,去和数据手册进行比对,从而可以找出问题或者进行底层的修改

外设寄存器栏可以查看几乎所有外设的寄存器的数值⭐
可以对比数据手册,查看某个值是什么含义,从而了解某个数值是不是预期的数
也可以查看内核级别的寄存器
也可以查看对应中断向量的值

⭐进阶调试方法

区段函数执行时间


可以查看区段函数的执行时间
执行时间,将显示在debug模式下的窗口右下角(注意窗口需要全屏显示才能看到,否则会自动隐藏)

比如查看延时函数是否准确

Memory查看寄存器地址


需要输入带待查看数组或者函数的地址,可以结合watch窗口或者stack窗口进行查找地址
这里我们选择一个数组进行查看

把它的地址移到memory窗口中,可以查看对应内存的数据了。

例如,当一个数组很大(上千个)时,watch窗口无法显示,就需要用memory查看所有数值。

查看中断执行的时间和次数


可以查看所有中断的执行时间/次数

全局变量读写时暂停


【注意】与设置断点是不同,他会停留在读/写操作的下一行代码处。

stm32 MDK debug调试方法相关推荐

  1. MDK5 Debug调试方法总结

    常见的Debug方法 连接好硬件DAP之后,需要进行一些设置 Debug调试按钮分别对应的功能 按钮1->reset复位按钮 按钮2->run按钮,程序运行按钮 按钮3->stop按 ...

  2. Java-day12(面向对象中2 Debug 调试 方法的重写 多态性)

    继承性练习一 Circle类: package com.acoffee.exer;public class Circle {private double radius;//半径public Circl ...

  3. javascript代码前端debug调试方法

    1在js代码处写debugger;语句相当于在代码处加了断点(注意要想使用debugger这个断点功能,必须在浏览器下F12打开控制台console才能好用!) 2启动程序后 浏览器中触发相关代码功能 ...

  4. IDEA debug调试教程

    debug调试 idea提供断点debug调试方法 什么是断点:断点是指在代码中指定位置,当程序运行到指定位置时便中断下来,并让开发者可以查看此时各个变量的值:程序中断时,断点所在的行还没有执行,所以 ...

  5. MDK硬件调试_在Debug printf Viewer窗口显示打印信息_ITM

    平时调试代码的时候大家都喜欢用printf函数来输出一些打印信息,来提示自己代码的执行情况.在刚开始接触这个调试方法的时候,我采用的方式就是浪费一个芯片的串口,然后利用TTL转USB模块,在PC端的串 ...

  6. php和stm32,【STM32H7教程】第5章 STM32H7下载和调试方法(MDK5)

    第5章   STM32H7下载和调试方法(MDK5) 本章教程为大家介绍如何通过MDK5下载程序到芯片里面以及MDK5的调试和配置方法. 5.1 初学者重要提示 5.2 使用MDK调试和下载程序设置( ...

  7. MDK stm32软件仿真调试

    MDK stm32软件仿真调试 选择好单片机型号 配置Debug选项 选择好单片机型号 我选的STM32F103ZET6型号,大家可以根据自己手上stm32开发板的型号来选择. 外部晶振频率的选择:8 ...

  8. (五)stm32工程代码HardFault异常查错调试方法

    (五)stm32工程代码HardFault异常查错调试方法 参考文章: (1)(五)stm32工程代码HardFault异常查错调试方法 (2)https://www.cnblogs.com/zhan ...

  9. IDEA 点击进入方法内部_【推荐收藏】IDEA的Debug调试,你全会用么?

    Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化.通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方 ...

最新文章

  1. linux egg,Linux服务器部署egg,日志
  2. AI领域的人才短缺,原因是什么?该如何解决?
  3. java 枚举抽象方法_Java枚举抽象方法实战
  4. 揭秘阿里小蜜:基于检索模型和生成模型相结合的聊天引擎 | PaperDaily #25
  5. ib网卡命令_infiniband网卡安装、使用总结
  6. hbase中清空整张表的数据
  7. Apache专用笔记贴
  8. Flutter AnimatedAlign 使用解析
  9. jeecgboot配置文件_Jeecg-Boot 技术文档
  10. 决策树CART算法讲解
  11. 我的随身电脑-千脑(转载)
  12. 联合查询分组取最新数据
  13. 栈的初始化,入栈和出栈
  14. Redis命令INCRBY和INCR区别
  15. 送书 | 聊聊逆向爬取数据
  16. 民航飞行学院计算机研究生就业,数据说话:文科硕士研究生就业变迁史
  17. 钱德拉塞卡极限与钱德拉塞卡的极限
  18. 蚂蚁树林小游戏玩法介绍
  19. Qt编写安防视频监控系统(界面很漂亮)
  20. 多角度分析如何解决建筑/基础设施/三维可视化/BIM设计图形工作站慢卡顿问题

热门文章

  1. carbondate mysql_CarbonData集成Hive、Spark
  2. CVPR 2022 | 大连理工提出自校准照明框架,用于现实场景的微光图像增强
  3. asp.net(vb)与sql的连接(代码写在web.config中的)
  4. 3C认证---GB4943-2011 、YD1032、GB 19484.1
  5. 办理充电宝移动电源GB/T35590-2017费用多少钱
  6. 解决 mac安装或者更新第三方包安装不上的问题 mac OSX pip OSError: [Errno 1] Operation not permitted
  7. 原始DBHelper在.Net Core中的使用
  8. C++的lib文件到底是什么
  9. 2022-02-17 WPF上位机 120-三菱PLC协议之读写方法流程解析
  10. RK3588s imx415相机适配及ISP调优系列(一)