Keil在线或使用调试器调试仿真教程

系列文章目录

STM32单片机系列专栏

C语言术语和结构总结专栏


文章目录


1. 打开调试

在Keil中有两种调试模式:在线调试和调试器仿真(ST-Link)。如果不了解如何使用ST-Link,可以看一下下面的文章:

STM32单片机通过ST-Link 烧录和调试

首先先点击魔术棒,点击Debug,这里要注意,左边的Use Simulator 是在线仿真,不需要连接ST-Link 和STM32,图片中勾选的就是在线仿真。如果想使用实物ST-Link进行调试,勾选右边的Use。

接着点击Debug按钮进入调试模式(Ctrl + F5)

接着就会加入调试仿真界面

2. 调试界面

进入调试界面后,会看到下面的画面

  • 菜单栏和工具栏:提供了各种命令和工具的快速访问,包括编译、构建、调试控制(如启动、停止、单步执行等)以及访问Keil的各种功能。

  • 主界面窗口设置:包含打开和关闭各种窗口,下面会详细解释。

  • 调试模式的启动/关闭

  • 断点设置:设置、取消、关闭、删除所有断点等操作。在这个区域,你可以设置、删除或禁用断点。断点是调试过程中的一个关键部分,允许你停止程序的执行以检查变量的值或程序的行为。

  • 寄存器窗口:显示当前CPU寄存器的值,这些寄存器包含了执行状态、指针、地址和一些重要的硬件信息。

  • C代码对应的汇编程序窗口:代码左侧灰色部分代码已编译部分,可设置断点(此部分可以查看代码是否编译或者是否被编辑器优化)

  • 代码窗口:工程C语言源代码

  • Command窗口:调试命令行,可通过设置命令执行所有调试操作,如断点设置、变量寄存器访问、数据转换、基本计算等功能通常也显示编译器或调试器的输出信息,比如错误消息、警告和打印输出。

  • 调用栈和局部变量窗口:显示了当前函数调用的层次结构和调用栈,以及当前函数中局部变量的值。

3. 调试操作

从左到右依次是:

复位 - 全速运行 - 停止 - 单步运行 - 单行运行 - 跳出函数体 - 运行到光标处 - 跳转PC指针

  • 复位按钮:用于重置微控制器。点击这个按钮会使目标硬件复位,通常相当于硬件上的复位按钮或者电源重启。

  • 全速运行/继续执行:开始或继续执行程序。如果程序已经停在一个断点上,点击这个按钮将继续执行程序直到遇到下一个断点或程序结束。也就是说如果没有断点,程序会一直运行。

  • 停止执行:停止程序执行。这个按钮将中止当前正在运行的程序。

  • 单步执行:执行程序中的下一行代码。如果当前行调用了函数,IDE将进入该函数内部。

  • 单步跳过:执行下一行代码,但是不进入函数内部。如果当前行调用了函数,IDE将执行整个函数,然后停在下一行。也就是说,如果在主函数中使用这个功能,会一直停留在主函数页面运行每一行代码,不会调转到其他函数中去。

  • 单步退出:当运行在函数内部时,这个按钮将执行完当前函数的剩余代码,并停在返回点之后的下一行。

  • 运行到光标位置 :程序执行将继续进行,直到到达当前代码编辑器中光标所在的行。

  • 跳转PC指针这个按钮允许你在调用栈中上移一级,这对于检查函数调用的历史和来龙去脉很有用。

4. 窗口功能

从左到右依次是:

命令行 - 反汇编窗口 - 符号窗口 - 内核寄存器 - 回调栈及局部变量 - 变量显示 - 内存窗口 - 虚拟串口 - 系统分析窗口 - TRACE窗口 - 外设寄存器

  • 命令行:它显示与调试会话相关的信息,包括用户输入的调试命令和由调试器返回的消息。它允许用户直接输入命令,例如管理断点、控制程序执行等。
  • 反汇编窗口:显示当前执行的汇编代码,与源代码视图同步,有助于理解C/C++代码是如何转换为处理器指令的,以及在调试时实际执行的指令。
  • 符号窗口:列出了所有编译后的符号,包括函数、变量和类型定义。这个窗口让你可以确认是否有符号未定义或检查变量的地址和值。
  • 内核寄存器:显示处理器内核的寄存器值。有助于理解程序的当前状态和执行流程,尤其是在硬件层面的调试中。
  • 回调部变量:当调试时停留在断点时,这里会显示函数的调用关系,以及压进的变量值,可以在这里看到函数的调用关系和传递给函数的参数值。这个一般和断点配合,反推异常调用以及查看局部变量,无需使用变量查看串口。
  • 变量显示:用于查看单片机中某个变量的值,一般多用于查看全局变量以及外设寄存器数值、表达式显示变量,也可直接操作变量值。
  • 内存窗口:显示内存地址以及地址处内存的数据,一般可查看变量以及寄存器数据、函数地址等
  • 虚拟串口窗口:如果程序使用了串口(例如USART),此窗口将显示由模拟器重定向的串口输出。
  • 系统分析窗口:提供高级的代码性能分析功能,例如代码覆盖率、执行时间分析等。软件逻辑分析仪功能也包含在这里。
  • TRACE窗口:如果硬件支持,此功能允许实时跟踪指令执行,以及程序的行为和性能分析。
  • 外设寄存器窗口:显示和控制单片机外设寄存器的状态,可以在这里查看和修改外设寄存器的值,如定时器、串口等的配置和状态。

5. 实时查看变量值

选择需要查看的变量,例如这里选择temp变量。

右击选中“Add 'temp[0]' to... ”的变量, 接着选择watch1,watch2都可以。

右上方会自动打开窗口,窗口中的值为当前变量值,后面一列是变量的数据类型。

在窗口中右击,可以选择显示类型是十进制还是十六进制,图片中没有勾选Hex显示(16进制禁止) ,就是以十进制显示。

 

如果想查看数据的实时值,在上方菜单栏中找到view,如图所示,选中Periodic Window Update(实时显示串口)。

5. 寄存器查看与操作

这里注意,有三种方法使用这个功能:

网上大多数的方法是进入调试界面后, 点击"Peripherals" 然后在System Viewer中打开想要查看的寄存器,但如果只有一个"core Peripherals", 没有其他寄存器,就是一些后面两个方法。

1. 点击"Peripherals",然后选择要查看的寄存器名称。

 

2. 在上方菜单栏点击"View->System Viewer", 然后选择要查看的寄存器名称。

3. 点击"View->Watch Windows",如下图所示:打开watch1 watch2 都可以

想查看谁的数值就直接在第一列输入就可以,例如还是想查看 Temp 的值,输入Temp就可以了。

6. 断点详解

Keil5中调试断点有三种类型:存取断点,执行断点,条件断点。

存取断点:某一个变量度或者写操作时执行断点操作。

执行断点:执行到代码某个位置时产生断点操作。一般直接在代码左侧打的断点就是此类断点。

条件断点:当满足某个表达式时,如某个变量==0x01时执行断点。

除了执行断点是直接在代码左侧设置执行断点外,其余断点需要通过断点管理窗口来实现。在上方菜单栏点击Debug,再点击Breakpoints (Ctrl + B)

打开后看到下面的窗口:

Current Breakpoints:这里显示目前所有的断点。

Expression:表达式为某个函数地址时为执行断点。无论是存取断点还是条件断点,都需要设置。

Count:表示执行次数,无论是存取断点还是条件断点,都需要设置。

Command:输入条件指令。这部分为条件断点,如变量等于或大于某个值时,执行printf指令打印变量值。注意此处的printf仅输出到调试界面的Command窗口。command指令的执行并不会使程序中断停止,相当于此处为软件断点。

Access:Size表示存取变量的字节大小,Bytes与Objects的区别在于单一变量与结构体的不同。这部分为存取断点,当存取某个变量或者结构体中某个成员时使用Bytes,存取某个结构体时使用Objects。

  • 23
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TENET-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值