Keil软件仿真的方法: μVision2调试器

news2024/11/16 16:38:00

目录

  • 1. μVision2调试器
  • 2. 调试工具
  • 3. 单步调试
  • 4. 使用断点调试
  • 5. 使用监视窗口调试
  • 6. 调试按钮的功能
    • 1.“单步”按钮
    • 2.“跟踪”按钮
    • 3.“运行到退出”按钮
    • 4.“运行到光标行”按钮
  • 参考资料


软件仿真是利用PC的CPU来模拟单片机的运行,在模拟运行的过程中,通过监测程序的方向、时间、寄存器以及变量值等关键因素来分析程序,找出存在的问题。对于8051单片机进行软件仿真的方法是使用集成开发环境提供的软件模拟器,它不需要有专用的硬件编程器或系统板的配合,可以独立完成单片机的模拟运行,接下来我们就以位操作流水灯的程序为例,来说明如何对8051系列单片机进行软件仿真。


1. μVision2调试器

μVision2集成开发环境中集成了专用的调试器,其内部有一个高速的软件模拟器,可以模拟整个8051单片机CPU、片上外围器件和寄存器的运行,并可以直观地查看程序运行时单片机的状态。

μVision2集成开发环境有两种工作模式,一种是创建模式,它是μVision2集成开发环境默认的工作模式,在为8051系列单片机开发应用程序时使用的是创建模式。

另一种工作模式是调试模式,用于对创建模式下编译完成的程序代码进行仿真调试。

这里需要说明的是,调试的过程不是软件开发所必需的,只有当我们有需要的时候才进入到该状态。为了得到正确的仿真结果,在进入到调试模式之前,需要完成以下两个步骤的设置:

1)更改晶振频率。方法是单击工具栏上的“目标选项”按钮,在“目标”选项卡中将晶振的频率设成和系统板一致的11.0592M,具体方法如图:

在这里插入图片描述

2)编译应用程序。程序在开始调试前需要进行一次成功的编译,以使所有的设置和代码生效,成功编译后会有相应提示,如图:

在这里插入图片描述

2. 调试工具

在更改了晶振频率并对程序进行正确编译后,就可以开始仿真调试了。首先需要将集成开发环境置于调试模式,方法是单击工具栏上的“开始/停止调试”按钮,将集成开发环境置于调试模式,如图

在这里插入图片描述

进入到调试模式后,软件界面有两个明显的变化,一个是工具栏上的“建造工具”按钮组会被“调试工具”按钮组替代,另一个是黄色的程序指针会出现在主函数的入口处,如图

在这里插入图片描述

μVision2集成开发环境下调试任务可以通过使用按钮来完成,这些按钮如图所示,按钮所能实现的功能也可以在“调试”菜单中找到。
在这里插入图片描述

在这里插入图片描述

μVision5集成开发环境下:
在这里插入图片描述

以下,我们要分别介绍一下这些调试按钮的功能:

1) 复位:复位后单片机各寄存器恢复到默认设置,RAM全部清零。

2)运行:程序开始全速运行,遇到断点或按下“停止”按钮会停止运行。

3)暂停:当程序处于运行状态时,执行此命令将中止程序的运行。当程序停止时,所有窗口中的信息将会被更新。

4) 跟踪:单步跟踪运行程序。每次按下该按钮,程序都会执行一条指令,如果待运行的语句是调用子函数的语句,使用“跟踪”按钮将会进入子函数的内部运行程序。

5) 单步:单步执行程序,跳过子函数。与“跟踪”功能相似,每按下一次该按钮,程序都会执行一条指令,但在运行子函数时,不会进入到子函数内部,而是将子函数作为一步执行完毕,程序指针指向下一条语句。

6) 运行到退出:单步运行并跳出子程序。如果程序当前运行在子函数内部,使用“运行到退出”按钮将会全速完成该子函数的运行并退出子函数,程序指针指向下一条语句。

7) 运行到光标行:程序将运行到光标所在位置。

8) 下一状态:表明该程序指针指示的程序行将在下一步时运行。

9) 使能/禁止跟踪记录:使能或禁止程序运行轨迹的标识。

10) 观察跟踪记录:观察程序运行的轨迹。

11) 反汇编窗口:将C代码反汇编为汇编代码并在编辑器中进行察看。

12) 查看调用堆栈窗口:打开调用堆栈 窗口。

13) 代码覆盖窗口:打开代码覆盖窗口。

14)串行口窗口:打开串行口窗口。

15) 存储器窗口:打开存储器窗口。

16) 性能分析器窗口:打开设置性能分析的窗口。

17) 工具栏:打开工具栏更新窗口。

3. 单步调试

以下将使用调试工具按钮,让程序在我们的控制下分步运行,并观察程序运行时间的变化。

1)进入调试模式后,我们会发现程序指针已经停留在主函数的第一个程序行前,程序运行到此处,花费的时间为0.00042209s,即422.09μs,如图:
在这里插入图片描述
2)单击“复位”按钮,各寄存器恢复为初始状态,时间从0开始,如图
在这里插入图片描述
3)单击“单步”按钮,程序运行至主函数的程序入口处,所用时间是422.09μs,如图
在这里插入图片描述

4)单击“单步”按钮,程序执行到下一步,所用时间是423.18μs,程序从上一步运行到这里,所用时间为1.09μs,如图
在这里插入图片描述
5)单击“单步”按钮,程序执行下一步,所用时间是424.26μs。程序从上一步运行到这里,所用时间同样为1.08μs,如图
在这里插入图片描述
6)多次单击“单步”按钮,程序执行至延时函数之后,所用时间变为441523.44μs,据此我们可以大致推断出延时函数的延时时间为441ms。更改延时函数的入口参数,多次使用软件调试的方法,可以将延时函数的延时时间精确地调整为500ms,如图
在这里插入图片描述

4. 使用断点调试

为了便于调试,我们通常会**在程序里设置一个或多个断点(Breakpoint),程序运行至断点处会停止,再次启动时程序会从断点处继续运行。**设置断点的方法有几种,最简单的是双击程序行,当程序行的前面出现红色的方块形图标时,断点即设置完成。再次在该程序行上双击鼠标,可以取消该断点,断点的设置和使用方法如下:

1)在要设置断点的地方双击鼠标,就可以在此处设置断点(红色方块)可以在程序行前点击鼠标 右键,在出现的菜单中选择“插入/删除断点”项来设置断点,如图

在这里插入图片描述

在这里插入图片描述
2)单击“运行”按钮,让程序全速运行,当程序运行至断点处时会自动停止。

在这里插入图片描述
3)再次单击“运行”按钮,程序执行完后,又回到断点处停止。
在这里插入图片描述

4)在已经设置了断点的程序行上,再次在鼠标右键菜单中,选择“插入/删除断点”项来取消断点,或选择“有效/禁止断点项”来使能或失能断点,同样的功能也可以在“调试”菜单中找到,如图

在这里插入图片描述

5. 使用监视窗口调试

在调试的过程中,可以使用观察窗口来查看寄存器的状态、时间值、变量值等。打开观察窗口的方法可以使用调试工具栏上的相关按钮,也可以在“视图”和“外围设备”菜单中打开。使用监视窗口进行调试的方法如下:

在这里插入图片描述
在这里插入图片描述

6. 调试按钮的功能

在调试工具栏上,有四个按钮从外观上看有着相似之处,它们分别为:“单步”“跟踪”“运行到退出”和“运行到光标行”按钮。

在这里插入图片描述

1.“单步”按钮

这个按钮的英文名字为“step over”,意思就是单步运行完一条指令的意思,如果待运行的语句是调用子程序的语句,使用“单步”按钮将全速运行完该子程序,并停在下一条指令处。也就是说,使用“单步”按钮,执行到调用子程序语句时,也只是用一步就执行完成,程序指针指向下一条语句上。

2.“跟踪”按钮

“跟踪”按钮在英文名称是“step into”,意思为单步跟踪运行一条指令,如果待运行的语句是调用子程序的语句,使用“跟踪”按钮将会跟踪进入子程序的内部。

3.“运行到退出”按钮

“运行到退出”按钮英文名称是“step out”,意思是“单步全速运行并跳出子程序”。

如果当前运行的是调用子程序的语句,使用“单步全速运行并跳出子程序”按钮将会全速完成子程序的运行,停在调用子程序语句的下面一行上。

例如:当程序指针运行至延时函数内部时,按下“运行到退出”按钮,程序会立即运行完延时函数,跳转到主程序中,并指向调用“delay_ms(500); ”语句的下面一行,如图。
在这里插入图片描述

4.“运行到光标行”按钮

在程序调试时,我们将光标放置在我们想让程序到达的地方,点击“运行到光标行”按钮,程序全会全速运行到光标所在位置,并且停留在这一行上,如图。

在这里插入图片描述
在这里插入图片描述


参考资料

  • [1] 《迷人的8051单片机》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙API9手机号验证

鸿蒙API9手机号验证 做一个app用户认证,之前一直想着都是通过HMS Core里边来接入,但是里边的文档最高只支持到API7。 由于想直接用API9来接,毕竟感觉后续ts/java混合开发要被舍弃,尽量还是用新的来弄。看了一遍新的API9的文档&am…

The-MIFARE-Hack-1 -mifare技术

RFID卡的使用变得越来越普遍。 一般来说,使用两种类型的RFID卡:有源卡和无源卡。 主动系统有自己的能源,而被动系统则依赖读卡器提供的能量。 最常见的 RFID 卡之一是 MIFARE Classic,由 NXP Semiconductors(以前是 Ph…

如何强化九小场所安全检查隐患排查工作

九小场所与人们的日常生活息息相关,相关部门对这些场所的消防安全非常重视;但是由于各种原因,经营者安全意识薄弱,导致存在严重的安全隐患。凡尔码开发的九小场所巡检系统针对九小场所基数大、底数不清、责任不明、主体意识薄弱等…

Python大数据之Python进阶(六)多线程的使用

文章目录 多线程的使用1. 导入线程模块2. 线程类Thread参数说明3. 启动线程4. 多线程完成多任务的代码5. 小结 线程执行带有参数的任务1. 线程执行带有参数的任务的介绍2. args参数的使用3. kwargs参数的使用4. 小结 线程的注意点1. 线程的注意点介绍2. 线程之间执行是无序的3.…

5.编写程序 超强力方法

5.1 创建战舰游戏 创建一个类似战舰的游戏:攻击网站 有一种棋盘类的战舰游戏,目标是要猜测对方战舰的坐标,然后轮流开炮攻击,命中数发就可以打沉对方的战舰。不过我们不喜欢战争,只要打垮这些达康公司就好(因为与商业…

10.10为什么要用二进制

由选择器引发的疑问与思考 ?想的是就让每位表示得越多,不就越能节省空间开销,从而不需要那么多的位数? 状态总量为S,R进制的N位数有SR*N, 表示当前这个位数的进制数所能表示最多的状态总量 客观存在的数量在不同进制…

springcloud----检索中间件 ElasticSearch 分布式场景的运用

如果对es的基础知识有不了解的可以看 es看这个文章就会使用了 1.分布式集群场景下的使用 单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。 海量数据存储问题:将索引库从逻辑上拆分为N个分片&#xff08…

【opencv】windows10下opencv4.8.0-cuda版本源码编译教程

【opencv】windows10下opencv4.8.0-cuda版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda版本源码编译教程前言准备工具cuda/cudnncmakeopencv4.5.0opencv_contrib CMake编译VS2019编译可…

Hadoop2.0探讨

文章目录 8. Hadoop 再探讨8.1 Hadoop的优化与发展8.2 HDFS 的FA和Federation(Hadoop2.0新特性)8.2.1 HDFS HA8.2.2 HDFS Federation 8.3 YARN8.3.1 MapReduce1.0的缺陷8.3.2 Yarn设计思路8.3.3 Yarn体系结构8.3.4 Yarn工作流程8.3.5 Yarn框架和MapReduce1.0框架对比分析8.3.6 …

C# Onnx GFPGAN GPEN-BFR 人像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace 图像修复 {public partial class Form1 : For…

MAX17058_MAX17059 STM32 iic 驱动设计

本文采用资源下载链接,含完整工程代码 MAX17058-MAX17059STM32iic驱动设计内含有代码、详细设计过程文档,实际项目中使用代码,稳定可靠资源-CSDN文库 简介 MAX17058/MAX17059 IC是微小的锂离子(Li )在手持和便携式设备的电池电量计。MAX170…

MTK8183/MT8183安卓4G核心板_联发科安卓手机开发板主板方案定制

MediaTek MT8183 整合先进功能和 AI 的主流 Chromebook 平台 MTK8183又称为MediaTek Kompanio 500,是一款支持强大功能的Chromebook平台,结合多种高功能硬件于单一高效能芯片。支持连接选项包括 Wi-Fi、蓝芽和 GNSS,外围设备可选择连接 USB …

Flutter 直接调用so动态库,或调用C/C++源文件内函数

开发环境 MacBook Pro Apple M2 Pro | macOS Sonoma 14.0 Android Studio Giraffe | 2022.3.1 Patch 1 XCode Version 15.0 Flutter 3.13.2 • channel stable Tools • Dart 3.1.0 • DevTools 2.25.0 先说下历程,因为我已经使用了Flutter3的版本,起初…

【考研408真题】2022年408数据结构41题---判断当前顺序存储结构树是否是二叉搜索树

文章目录 思路408考研各数据结构C/C代码(Continually updating) 思路 很明显,这是一个顺序存储结构的树的构成方法。其中树的根节点位置从索引0开始,对于该结构,存在有:如果当前根节点的下标为n&#xff0c…

波奇学C++:哈希

哈希本质是的值和位置建立关联起来,这种关联关系就是哈希函数 示例:除留余数:对输入的数字取模。 哈希冲突:多个不同的值指向同一个位置 解决方法: 闭散列:开发地址法。 把24放在下一个位置 哈希桶 闭散列法 闭散列…

NNDL:作业3

在Softmax回归的风险函数(公式(3.39))中如果加上正则化项会有什么影响? (1) 在 Softmax 回归的风险函数中加入正则化项会对模型的训练产生影响。正则化项的作用是对模型的复杂度进行惩罚,防止过拟合的发生。 (2) 原书公式为: 在加入正则化后损失函数…

STM32单片机入门学习(六)-光敏传感器控制LED

光敏传感器模块和LED接线 LED负极接B12,正极接VCC 光敏传感模块一DO端接B13,GND接GND,VCC接VCC,AO不接。 如图: 主程序代码:main.c #include "stm32f10x.h" #include "Delay.h" //delay函数所在头文件 #include …

Python中套接字实现服务端和客户端3-3

3 创建客户端的步骤 创建客户端的步骤如图5所示。 图5 创建客户端的步骤 从图5可以看出,对于客户端来说,首先创建套接字,之后通过创建的套接字去连接服务端,如果连接成功,则继续通过该套接字向服务端发送数据&#x…

扩展windows 10 文件夹文件路径位数

Enable Long Paths in Windows 10, Version 1607, and Later PowerShell Copy New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force 管理员权限运行 PowerShell…

【开源电商网站】(2),使用docker-compose和dockerfile进行配置,设置自定义的镜像,安装插件,增加汉化包,支持中文界面汉化。

项目相关代代码地址 相关内容: https://blog.csdn.net/freewebsys/category_12461196.html 原文地址: https://blog.csdn.net/freewebsys/article/details/133666433 包括以下运行的详细代码: https://gitee.com/study-demo-all/oscommerc…