0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

keil在Debug的高级用法

撞上电子 2024-12-26 21:01 次阅读

第一节 软件说明

Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。目前软件对中文的支持不友好,不建议安装网上的一些汉化包之类的。另外建立的工程文件路径也尽量不要存在中文,否则可能会出现一些异常。

第二节 基本调试方法

1,基本调试操作:首先点击"Debug->Start/Stop Debug Session"或下图2位置,进入调试:

846d5200-c389-11ef-9434-92fbcf53809c.png

如果前面工程配置里选择了复位调试,则进入调试后,会停在main函数头部:

8488de80-c389-11ef-9434-92fbcf53809c.png

2,复位:对程序进行复位操作,根据烧录器不同的复位方式配置会触发不同的复位类型。

84991a98-c389-11ef-9434-92fbcf53809c.png

3,全速运行:使当前程序开始正常全速运行,直到程序遇到断点时停止。

84aa3a3a-c389-11ef-9434-92fbcf53809c.png

4,停止运行:当程序全速运行时,点击此按键可停止程序运行,停的是当前点击时的程序运行位置。

84bb36b4-c389-11ef-9434-92fbcf53809c.png

5,单步调试:根据当前调试的窗口的语言,执行单条语句。如果遇到函数,则会进入函数内部。如果是在反汇编窗口中,则只执行一条汇编指令。

84cc95d0-c389-11ef-9434-92fbcf53809c.png

6,单步跳过调试:如果是在C语言窗口中,则是按单条语句执行,与单步调试不同的是,遇到函数不会进入函数内部,而是直接全速运行函数,并跳到下一条语句。

84de221e-c389-11ef-9434-92fbcf53809c.png

7,单步返回调试:如果是在C语言窗口中,则是直接全速运行当前函数后面所有内容,直到函数返回上一级。

84e5d8ec-c389-11ef-9434-92fbcf53809c.png

8,插入/移除断点:如果当前光标所在行未有断点,则插入断点(前提是当前行可以插入,如果无法插入会显示一个感叹号),在有断点的情况下则是移除断点。插入断点后,当前行前面会有个红圆表示断点位置。也可以通过直接点击红圆位置进行插入/移除断点的操作。另一种断点方式,是通过指令来控制,当然也可以使用Keil提供的界面化操作,设置某个变量读或写时触发断点。不过目前貌似有部分芯片不支持这种操作。注:断点最多只能打7个。

84f64d94-c389-11ef-9434-92fbcf53809c.png

9,使能/禁止断点:开启或禁止当前光标所在行的断点。禁止后红圆变成白圆。

8507c196-c389-11ef-9434-92fbcf53809c.png

10,禁止所有断点:禁止当前所有的断点。

851553d8-c389-11ef-9434-92fbcf53809c.png

11,删除所有断点:删除所有断点。

852f62e6-c389-11ef-9434-92fbcf53809c.png

第三节 变量调试方法

通过"View->Watch Windows->Watch1、Watch2"可以选择打开Watch窗口:

85427304-c389-11ef-9434-92fbcf53809c.png

通过选中一个变量,右键添加入对应的Watch窗口,可以追踪查看当前变量的变化状态。注意,只有全局变量可以全程监视,临时变量只有在进入当前函数中才可监视到其数据,用static关键词修饰的变量无法监视。

855f337c-c389-11ef-9434-92fbcf53809c.png

如果当前变量没有实时更新,则需要点击"View->Periodic Window Update"将其勾选上。

8576468e-c389-11ef-9434-92fbcf53809c.png

在"Watch"窗口中,可以查看当前变量名称、值、数据类型,如果当前变量类型为结构体,则可以以对应的结构形式进行展开查看。

858f68c6-c389-11ef-9434-92fbcf53809c.png

第四节 内存调试方法

通过"View->Memory Windows->Memory1/2/3/4"打开Memory窗口:

85a3188a-c389-11ef-9434-92fbcf53809c.png

这个图标打开的状态下,再次选中则可关闭:

85b6b7c8-c389-11ef-9434-92fbcf53809c.png

在Memory窗口中输入想要查看内存的起始地址,另外右上角的锁可以把当前界面锁定下来。

85c21e7e-c389-11ef-9434-92fbcf53809c.png


第五节 系统调试方法

通过"View->System Viewer"打开窗口,这个窗口用于查看当前单片机外设及内核寄存器的值,在调试外设底层时经常会使用到。在这个窗口中可以直接修改外设寄存器的值,当然部分只读寄存器是无法修改的,有些则是需要在特定条件下才可以设置生效,具体就得看对应的芯片手册里寄存器的说明了。

85cd7b84-c389-11ef-9434-92fbcf53809c.png


第六节 调度调试方法

可以在"View->Call Stack Window"打开此窗口:

85e21a30-c389-11ef-9434-92fbcf53809c.png

这个窗口用于查看当前程序调度关系,当出现有进入硬件错误异常调试时可以快速定位到是哪里触发的异常。这个窗口是的调度关系是从当前程序堆栈里获取的数据并将其图形化,所以如果当前堆栈数据被破坏,则此窗口也将无法查看调度关系。该窗口里显示的调度关系是从下至上调用的,最上面的表示当前程序所处的函数。展开对应的函数,可以查看各层调用函数跳转之前保存的一些临时变量等信息

第七节 寄存器调试方法

该窗口可在"View->Registers Window"处打开:

85f6e6f4-c389-11ef-9434-92fbcf53809c.png

这个窗口用于查看当前内核的相关寄存器,如汇编里常说的15个通用寄存器。当然调试中比较常用的是其中的SP、LR、PC三个寄存器。SP为当前栈的地址位置,PC为当前程序地址,LR为函数跳转前的地址,即当前函数返回的地址。

85ffae42-c389-11ef-9434-92fbcf53809c.png

另外"Banked"中的MSP为当前程序系统主栈,PSP则为操作系统的任务栈,这两者的区别是,如果使用了操作系统,则当前任务中的所有调度关系使用的是任务栈,而类似中断这种内核的操作使用的是主栈;如果未使用操作系统,则只会使用主栈,不会使用任务栈。通过"Internal"可以查看当前是处在中断还是任务中,Mode为"Thread"表示是在线程/任务中,或者是函数中(非中断),为"Handle"表示是在中断中;Privilege为"Privelege"表示当前处于特权模式。Stack为"PSP"表示当前使用的是任务栈,为"MSP"则表示使用的是主栈。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • keil
    +关注

    关注

    68

    文章

    1213

    浏览量

    166875
  • 调试器
    +关注

    关注

    1

    文章

    305

    浏览量

    23739
  • DEBUG
    +关注

    关注

    3

    文章

    94

    浏览量

    19920
收藏 人收藏

    评论

    相关推荐

    Arduino串口高级用法,你都掌握了吗?

    本文为Arduino串口的一些高级用法,希望能帮助创客及相关工程师云梯优化设计。
    发表于 07-16 11:05 1.2w次阅读

    C语言中位运算符的高级用法(1)

    在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法
    发表于 08-22 10:44 324次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(1)

    C语言中位运算符的高级用法(2)

    在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法
    发表于 08-22 10:45 329次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(2)

    C语言中位运算符的高级用法(3)

    在上一篇文章中,我们介绍了|运算符的高级用法,本篇文章,我们将介绍^ 运算符的一些高级用法
    发表于 08-22 10:47 258次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(3)

    C语言中位运算符的高级用法(4)

    在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~ 运算符的一些高级用法
    发表于 08-22 10:48 224次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(4)

    C语言中位运算符的高级用法(5)

    在上一篇文章中,我们介绍了~运算符的高级用法,本篇文章,我们将介绍
    发表于 08-22 10:49 343次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(5)

    STM32延时函数的高级用法是什么

    STM32延时函数的高级用法是什么
    发表于 12-01 06:32

    ActiveMQ高级用法

    ActiveMQ 高级用法一、嵌入式MQ实际开发中,如果项目没能给太多资源,而现在业务中又需要用到MQ,可以考虑嵌入式MQ,嵌入式MQ不需要安装ActiveMQ,只需要导入相关依赖就可以1、pom文件需导入依赖:(在前两篇关于
    发表于 12-17 07:49

    KEIL断点调试窗口的常规用法有哪些

    程序运行过程中的数据是怎么修改的?在哪里修改的?KEIL断点调试窗口的常规用法有哪些?
    发表于 02-17 06:32

    Nuvoton 8051 Keil uVision Driver v1.08安装后keil debug中显示Driver为“Nuvoton 8051 KEIL C51 Driver”的原因?

    最新的Nuvoton 8051 Keil uVision Driver v1.08安装后keil debug中显示Driver为“Nuvoton 8051
    发表于 06-27 08:33

    keil调试延时,除了debug还有别的办法吗?

    keil调试延时,除了debug,还有别的办法吗,还有0.0000001s等于一微妙吗?
    发表于 11-03 07:02

    LPC17XX_Keil_高级例程

    LPC17XX_Keil_高级例程源代码,有需要的下来看看。
    发表于 05-20 15:55 23次下载

    #define的高级用法简介

    #define的高级用法
    的头像 发表于 02-05 11:50 3931次阅读

    STM32单片机---keil5中debug无法进入main函数

    keil5中debug无法进入main函数问题描述解决方法问题描述使用keil5软件,进行调试debug时,无法进入main函数中解决方法
    发表于 12-03 20:36 18次下载
    STM32单片机---<b class='flag-5'>keil</b>5中<b class='flag-5'>debug</b>无法进入main函数

    STM32单片机无法进入debug,怎么cubmx中打开debug

    初学32单片机发现在keil中程序无法进入debug
    发表于 12-31 19:48 7次下载
    STM32单片机无法进入<b class='flag-5'>debug</b>,怎么<b class='flag-5'>在</b>cubmx中打开<b class='flag-5'>debug</b>