当前位置: 首页 > news >正文

keil调试专题篇

调试的前提是需要连接调试器比如STLINK。

然后点击菜单或者快捷图标均可进入调试模式。

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

示意:

 

相关指令

上面一行红框内,从左到右分别是:打断点(断点最多只能打7个)、失能单个断点、失能所有断点、取消所有断点。

下面一行红框内,从左到右:

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

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

停止运行(Stop):当程序全速运行时,点击此按键可停止程序运行。点击停止时程序执行到哪了就停在哪。

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

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

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

全速运行到光标所在行(Run to Cursor Line)

变量查看窗口——Watch1,Watch2

也可通过view菜单内对应子菜单选择。

Watch窗口如下:

 

通过选中一个变量,右键添加入对应的Watch窗口,可以追踪查看当前变量的变化状态。

注意,只有全局变量可以全程监视,临时变量只有在进入当前函数中才可监视到其数据,用static关键词修饰的变量无法监视。

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

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

 

变量值默认是以十六进制来显示的,可以在变量名上右键,取消十六进制显示,则会以十进制进行显示。

内存查看窗口——Memory

通过"View->Memory Windows->Memory1/2/3/4"打开Memory窗口,也可以通过工具栏打开

 

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

 

另外如果查看的是Ram的地址,那其中的数据也可以直接通过此窗口进行修改。

同样,右键可以选择以什么数据形式来显示。 

系统视窗——System Viewer Windows

可以在"Peripherals"选项栏中选择"System Viewer"系统视窗中对应的外设,选择"Core Peripherals"则是内核调试窗口。另外系统视窗也可以通过工具栏打开。

 

这个根据不同芯片会有不同的展示。

这个窗口用于查看当前单片机外设及内核寄存器的值,在调试外设底层时经常会使用到。

以GPIOA为例:

在这个窗口中可以直接修改外设寄存器的值,当然部分只读寄存器是无法修改的,有些则是需要在特定条件下才可以设置生效,具体就得看对应的芯片手册里寄存器的说明了。

调度关系窗口——Call Stack Window

可以在"View->Call Stack Window"打开此窗口,也可以在工具栏中打开。

 

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

寄存器窗口——Register Window

该窗口可在"View->Registers Window"处打开,也可以在工具栏打开。

 

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

另外"Banked"中的MSP为当前程序系统主栈,PSP则为操作系统的任务栈,这两者的区别是,如果使用了操作系统,则当前任务中的所有调度关系使用的是任务栈,而类似中断这种内核的操作使用的是主栈;如果未使用操作系统,则只会使用主栈,不会使用任务栈。

 

通过"Internal"可以查看当前是处在中断还是任务中,Mode为"Thread"表示是在线程/任务中,或者是函数中(非中断),为"Handle"表示是在中断中;Privilege为"Privelege"表示当前处于特权模式。Stack为"PSP"表示当前使用的是任务栈,为"MSP"则表示使用的是主栈。

 

反汇编调试窗口——Disassembly Window

该窗口在"View->Disassembly Window"中可以打开,也可以在工具栏中打开。

 

该窗口是通过bin文件(即二进制文件)反汇编出来的汇编文件(汇编跟二进制原本就是一一对应的关系)。当设置了优化等级后,部分C语言的调试会变得困难(汇编跟C语言不是一一对应,而程序运行又是完全根据汇编来走的),此时可能需要使用汇编窗口进行调试。

函数地址表——Symbols Window

该窗口在"View->Symbols Window"中打开,也可能在工具栏打开。

可以查看当前所有程序的函数调用关系及其所在地址。 

其他窗口

命令窗口——Command Window

该窗口在"View->Command Window"中可以打开,也可能在工具栏中打开。

这个窗口可用来输入一些控制命令。  

串口调试窗口——Serial Windows

该窗口在"View->Serial Windows"中打开,也可以在工具栏打开。

暂略。

逻辑分析窗口——Analysis Windows

这个貌似只能在软件模拟仿真中使用。 

跟踪窗口——Trace Windows

 

暂略。

更多总结

直接参考:

【工具使用】Keil5软件使用-进阶调试篇_keil5调试_知识噬元兽的博客-CSDN博客

注意事项

待补充。

相关文章:

  • alter table column 列属性
  • 数据库面试题——锁
  • MySQL:索引与事物
  • springboot Aspect切面
  • 【Python】P1 Python 基础语法
  • Windows Server 2022 中文版、英文版下载 (updated Mar 2023)
  • 智能灯泡一Homekit智能家居系列
  • Java设计模式(二)——工厂模式
  • 半入耳蓝牙耳机哪款好?音质好高性价比的半入耳式蓝牙耳机
  • Matter名词解释
  • 什么是 LuaJIT?为什么 Apache APISIX 选择了 LuaJIT?
  • Java实用类之String、StringBuffer、StringBuilder
  • Uploadifive 批量文件上传
  • 什么是语法糖?Java中有哪些语法糖?
  • 24. linux系统基础
  • 【译】理解JavaScript:new 关键字
  • CSS3 变换
  • CSS实用技巧
  • hadoop集群管理系统搭建规划说明
  • JS+CSS实现数字滚动
  • Mysql5.6主从复制
  • spark本地环境的搭建到运行第一个spark程序
  • supervisor 永不挂掉的进程 安装以及使用
  • vue 配置sass、scss全局变量
  • Vue全家桶实现一个Web App
  • 产品三维模型在线预览
  • 和 || 运算
  • 前端攻城师
  • 算法-插入排序
  • 写给高年级小学生看的《Bash 指南》
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 第二十章:异步和文件I/O.(二十三)
  • ​io --- 处理流的核心工具​
  • # .NET Framework中使用命名管道进行进程间通信
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (11)MSP430F5529 定时器B
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (windows2012共享文件夹和防火墙设置
  • (备忘)Java Map 遍历
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (七)Knockout 创建自定义绑定
  • (一)appium-desktop定位元素原理
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Framework杂记
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NetCore项目nginx发布
  • .Net中的设计模式——Factory Method模式