目录

  • keil5调试功能
    • 软件仿真设置
    • 硬件调试设置
    • 调试方法
  • 调试选项及介绍
  • 调试窗口
    • Command
    • Disassembly
    • Symbols
    • Registers
    • Call Stack(+Locals)
    • Watch
    • Memory
    • Serial
    • Logic Analyzer
  • 外设寄存器查看
  • 软件仿真限制

keil5调试功能

keil5的Debug选项分为软件仿真和硬件调试。两种方式的区别在于,前者不需要硬件平台,而是通过软件模拟芯片的运行,此时可以通过逻辑分析仪等查看(模拟)芯片输出(当然硬件调试也可以使用逻辑分析仪等功能)。

软件仿真设置

  1. 点击魔术棒后点击Target选项,如下图所示,检查芯片型号以及晶振频率(Keil MDK5.35好像禁用修改了)与所需是否相同。
  2. 打开Debug选项选择操作类型,以及设置DialogDLL等参数,具体操作及作用如下:
    (1)勾选Use Simulator设置使用软件仿真。
    (2)勾选Run to main()使调试时,程序自动运行到main函数。
    (3)Restore Debug Session Setting一般默认即可,该部分为复位调试窗口的组件,勾选后,调试时对应的窗口或状态恢复默认值。
    (4)设置Dialog DLL为DARMSTM.DLL以及设置Parameter为-pSTM32F103ZE(芯片参数按使用的芯片相应修改即可,当然,部分芯片无法仿真),这部分为DLL文件及芯片参数设置区。

Dialog DLL和Parameter不修改的话,后面运行时可能会报错。

硬件调试设置

  1. 打开Debug选项选择操作调试器
  2. 设置Dialog DLL为TARMSTM.DLL以及设置Parameter为-pSTM32F103ZE

调试方法

设置结束后,点击“Debug”-“Start/Stop Debug Session”开始Debug。

       此时,一般界面如下所示,在代码编辑区的左侧,会出现灰色区域、蓝色和黄色箭头,黄色三角形代表将要执行的代码,蓝色的三角形表示当前光标所在代码,点击灰色区域可添加断点。通过调试选项或调试窗口即可对代码进行Debug。

断点是调试器的功能之一,可以让程序停止在设置断点的语句。在调试过程中,可在程序的某一处设置断点再点击Run运行,此时当程序运行至该位置时自动停止。

调试选项及介绍

调试窗口

通过“View”或调试选项旁的图标可以打开相应的调试窗口:

Command

命令显示窗口,如下图所示,在该窗口“命令输入区”输入相应调试命令即可完成相应功能,调试命令参考调试命令文档。

注意文档的第2句话:例如,BreakAccess 必须输入为 BA 或 ba。即文档的表格中第一列展示的命令不能直接输入到命令输入区,可以点击以查看真正的命令。

Disassembly

反汇编窗口,如下图所示,该窗口将原代码(即代码编辑区的代码)、机器码和反汇编代码比对显示,其中,红色字体为原代码,原代码前是对应语句的行号。红色字体下面的黑色字体为对应的机器码和反汇编代码,黑色字体可以分为三个部分。

  1. 0x开头的16进制字符串:语句(或者说上面红色字体的原代码)在芯片内存中存储的位置。(一般为代码段)
  2. 16进制字符串(4/8个字符):16位/32位机器码编码。
  3. 其它部分:通过机器码反汇编形成的代码。(汇编语言语法)
           此时,点击Disassembly窗口,代码编辑窗口的蓝色箭头会指向对应的代码。

根据《ARM Cortex-M3与Cortex-M4权威指南》一书的图2.5,反汇编代码由机器代码生成,而不是由编译器将C语言代码直接编译而成(这样好像反汇编的“反”更说得通)。

Symbols

模块窗口,如下图所示,该窗口用于显示了工程下各个文件中的函数(名称、地址、类型)以及函数内的变量(名称、地址、类型),在函数位置右键点击可以进行跳转或复制函数的位置,在变量位置右键点击可以将其添加至watch、memory或复制位置。

Registers

寄存器窗口,如下图所示,该窗口用于显示R0~R15、xPSR等内核寄存器的值(不是外设寄存器),如下图所示,关于内核寄存器的介绍可以查看ARM架构基本寄存器。

Call Stack(+Locals)

调用关系和局部变量窗口,如下图所示,该窗口用于展示当前函数调用关系及函数的局部变量(包括参数和内部变量),如下图所示,调用关系为main函数调用SetTimeVal函数,SetTimeVal函数中包括type和timeVal两个参数。

Watch

如下图所示,该窗口用于查看变量,包括变量名、值以及变量类型,可以点击Value一栏对变量的值修改。

       将变量添加至Watch窗口有多种方法,除了从其他窗口添加外,还可以从代码编辑区添加,如下图所示,点击变量再鼠标右键,选择“Add ‘type’ to”-“Watch1”即可,Watch1和Watch2没有区别,估计只是为了方便用户多个窗口同时查看。

Memory

内存窗口,如下图所示,该窗口用于显示存储器中的数据,上方Address区用于输入变量名或地址值,此时下面的显示栏会移动到对应地址存储的数据。

Serial

串口模拟窗口,该窗口用于模拟串口输出数据,UART #1对应UART1,UART #2对应UART2。将鼠标移至显示区并点击右键,选择相应选项后可清空串口、复制到剪贴板或切换显示模式(切换成ASCII、HEX等)

Logic Analyzer

逻辑分析仪窗口,如下图所示,该窗口作用类似逻辑分析仪。使用前需要点击左上角的“Setup…”后在弹出窗口内添加引脚,确定后点击运行即可查看引脚的输出波形。(添加方法和文件路径添加方法类似,以添加PB5引脚为例,在弹出窗口点击右上角的虚线框并输入PORTB.5即可),引脚添加后,在“Setup…”下的灰色区域鼠标右键可设置输出类型(Analog、bit、state)

注意,如果前面调试选项的Dialog DLL和Parameter没有相应设置的话,添加引脚可能会报错。


       添加完毕后并修改输出类型为bit后,点击Run即可查看该引脚的输出电平(这里使用了PWM输出实验作为示例)

外设寄存器查看

上述的Register窗口查看的是处理器使用的工作寄存器,一般只有汇编语言会用到,通过固件库或寄存器开发单片机时,都是通过C语言设置单片机的各个寄存器,而通过keil5的软件仿真或硬件调试可以对芯片的外设寄存器查看及修改。
       如下图所示,通过“View”-“System Viewer”-“GPIO”-“GPIOA”查看相应的寄存器。

       点击后,弹出如下图所示的GPIOA窗口,点击对应的Value值即可对其修改。

       当然,像上面那样修改比较麻烦,还需要查阅对应的手册,通过“Peripherals”-“General Purpose I/O”可打开其它形式的寄存器窗口。

       点击GPIOA后,弹出如下图所示的General Purpose I/O A窗口,选中相应引脚即可在Selected Port Pin Configuration设置其模式,也可以在下方勾选某个寄存器的某个位,达到引脚输入/输出高/低电平的设置。

软件仿真限制

软件仿真不是所有芯片都可以,部分芯片(如stm32F4以及GD各款)是无法软件仿真,会报错,好像听说要修改DLL文件或修改读写权限,但感觉可能性不大,文档中包含了可进行软件模拟的芯片,如其中的表所示。

汇编语言笔记-keil5软件仿真及调试相关推荐

  1. ardupilot软件仿真及调试(vscode版)

    前言 本博客着重讲述如何进行对ardupilot软件仿真和调试,搭建编译环境和vscode的使用教程不再本文的讲述范围. 一.安装vscode 下载地址:Visual Studio Code - Co ...

  2. 从0使用keil5软件仿真调试GD32F305

    搜集到的一些资料: RTT提供的F303的库 GD32 BSP制作1 RTT制作GD32系列BSP 移植RTT到GD32 兆易创新资料下载 GD32标准库移植 (兆易创新官网只提供了标准库) 标准库点 ...

  3. 【工具使用】Keil5软件使用-进阶调试篇

    一.概述     本文面向已经懂得软件基本操作的职业老手,如果是未使用过该软件的小鲜肉,请移步基础篇.这里以STM32芯片为例对工具进行讲解,其他品牌的芯片在调试方面上可能存在差异. 二.软件说明   ...

  4. KEIL5软件仿真支持的器件

    问题的提出 用KEIL进行软件仿真,想观察一下处理器STM32F091RCY的I2C和DAC引脚输出的波形,发现无法向波形中添加信号,如下图所示 当在命令行中输入 dir vtreg 指令时,仅仅能够 ...

  5. keil5软件仿真出现unknown signal解决方法。

    用keil uvision5软件仿真时,MDK Logic Analyzer添加current logic analyzer signals时总是显示Unknown Signal? 解决方法如下: D ...

  6. 【51】keil5软件仿真基本操作

    选择软件仿真 开始仿真 点击设置断点 运行到断点 查看变量的值 选中要查看的变量 右键添加 i的值为0 更改断点并运行 i的值为1 查看内存 找到memory窗口 没有就重新打开 输入x的地址:D:0 ...

  7. KEIL5软件仿真出现*** error 65: access violation at 0xE0001004 : no ‘read‘ permission的解决方法

    故障图: 解决方法: 第一步: 设置下面的"Dialog DLL"项为"DARMSTM.DLL"和"TARMSTM.DLL":paramet ...

  8. 如何使用Keil5中的虚拟示波器进行软件仿真

    首先先打开一个工程,编译,无错误,我用的是高级定时器TIM1互补输出的程序,输出信号的引脚分别为 PA8 和 PB13 . 在使用之前先更改一些配置: 点击keil5里的魔术棒选项:选择debug,把 ...

  9. MDK stm32软件仿真调试

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

最新文章

  1. 中间件(5)负载均衡
  2. 复制windows对话框内容的方法
  3. cassandra mongodb选择——cassandra:分布式扩展好,写性能强,以及可以预料的查询;mongodb:非事务,支持复杂查询,但是不适合报表...
  4. Action framework BAdI Definition TRIGGER_EXECUTED
  5. 经典面试题(10):关于this指向,以下代码将输出什么?
  6. java源代码连接jsp,java网络五子棋的源代码-JSP教程,Java技巧及代码
  7. 用html编写勾股定理,一种勾股定理演示器的制作方法
  8. notepad++查看16进制文件
  9. linux挂载iso镜像文件_Linux服务器如何识别移动硬盘?
  10. 【模板】prim的heap优化
  11. 解决flash builder 4.6调试不可用
  12. linux centos 安装mysql,linux/centos安装mysql
  13. 客户端的云桌面平台配置与开启(附,登录“云电脑”与切换登录账号)
  14. 毕业旅行之天府之国——徒步峨眉
  15. 雷电模拟器修改系统语言
  16. pat1121 Damn Single
  17. 非科班AI小哥火了:他没有ML学位,却拿到DeepMind的offer
  18. c语言环境变量的作用,C语言程序的环境变量
  19. java list键值对解析
  20. java基于ssm的学校教务管理系统的设计与实现论文-计算机毕业设计

热门文章

  1. Mysql报错 Cannot delete or update a parent row: a foreign key constraint fails
  2. 以桨为楫 修己度人(一)
  3. PMBOK(第六版) PMP笔记——《十三》第十三章(项目干系人管理)
  4. 暴雪即将公布《暗黑破坏神3》新职业
  5. 百度飞桨第一课--让人拍案叫绝的创意都是如何诞生的?
  6. 计算机网络IP地址分配
  7. 通过Cookie跳过登录验证码
  8. 自定义下拉刷新之仿AcFun下拉刷新
  9. 一个浪漫又悲情的爱情故事——笛卡尔心形线
  10. 使用AWS的python库boto3调用ec2服务