Keil调试查看运行时间(精确)
- 格式:doc
- 大小:282.50 KB
- 文档页数:7
Keil软件及其调试功能简介目前流行的51系列单片机开发软件是德国Keil公司推出的Keil C51软件,它是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。
Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:μVision IDE集成开发环境(包括工程管理器①、源程序编辑器②、程序调试器③,见图2)、C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及Monitor-51、RTX51实时操作系统。
应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存—建立工程并添加源文件—设置工程—编译/汇编、连接,产生目标文件—程序调试。
Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。
工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。
首先选择菜单File-New…,在源程序编辑器中输入汇编语言或C语言源程序(或选择File-O pen…,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project-New Project…,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。
这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group ‘Source Group1’”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。
keil调试高级用法Keil是一款非常常用的嵌入式开发工具,用于开发和调试嵌入式系统。
它具有强大的功能和灵活的调试选项,可以帮助开发人员有效地调试代码。
在本文中,我将介绍一些Keil调试的高级用法,以帮助用户更好地利用该工具进行嵌入式系统的调试。
一、单步调试单步调试是Keil中最基本的调试功能之一、通过单步调试,我们可以一次执行一条机器指令,以逐行检查代码的执行情况。
Keil提供了多种单步调试的选项,包括单步进入(Step Into),单步跳过(Step Over),单步返回(Step Return)等。
- 单步进入(Step Into): 当程序运行到函数调用语句时,可以使用这个选项进入被调用函数并逐行执行。
- 单步跳过(Step Over): 当程序运行到函数调用语句时,可以使用这个选项跳过被调用函数,直接执行下一行代码。
- 单步返回(Step Return): 当程序运行到函数返回语句时,可以使用这个选项返回到调用该函数的地方,并继续执行下一行代码。
通过这些单步调试选项,我们可以有效地检查代码的执行情况,查找代码中的错误。
二、设置断点设置断点是Keil中另一个常用的调试功能。
通过设置断点,我们可以在代码的其中一行上暂停程序的执行,以便检查变量的值和程序的状态。
Keil提供了多种类型的断点,包括软件断点(Software Breakpoint)、数据断点(Data Breakpoint)和条件断点(Conditional Breakpoint)等。
- 软件断点(Software Breakpoint): 在程序的其中一行上设置软件断点,程序执行到该行时将会暂停。
这对于调试复杂的代码非常有用。
- 数据断点(Data Breakpoint): 在一些特定的变量上设置数据断点,当该变量的值发生变化时,程序将会暂停。
这对于调试特定变量的值变化非常有用。
- 条件断点(Conditional Breakpoint): 在一些条件上设置断点,当条件满足时,程序将会暂停。
Keil实例教程(三)Kei调试窗⼝Keil 程序调试窗⼝上⼀讲中我们学习了⼏种常⽤的程序调试⽅法,这⼀讲中将介绍Keil 提供各种窗⼝如输出窗⼝、观察窗⼝、存储器窗⼝、反汇编窗⼝、串⾏窗⼝等的⽤途,以及这些窗⼝的使⽤⽅法,并通过实例介绍这些窗⼝在调试中的使⽤。
⼀、程序调试时的常⽤窗⼝Keil 软件在调试程序时提供了多个窗⼝,主要包括输出窗⼝(Output Windows )、观察窗⼝(Watch&Call Statck Windows )、存储器窗⼝(Memory Window )、反汇编窗⼝(Dissambly Window )串⾏窗⼝(Serial Window )等。
进⼊调试模式后,可以通过菜单View 下的相应命令打开或关闭这些窗⼝。
图1是输出窗⼝、观察窗⼝和存储器窗⼝,各窗⼝的⼤⼩可以使⽤⿏标调整。
进⼊调试程序后,输出窗⼝⾃动切换到Command 页。
该页⽤于输⼊调试命令和输出调试信息。
对于初学者,可以暂不学习调试命令的使⽤⽅法。
1、存储器窗⼝存储器窗⼝中可以显⽰系统中各种内存中的值,通过在Address 后的编缉框内输⼊“字母:数字”即可显⽰相应内存值,其中字母可以是C 、D 、I 、X ,分别代表代码存储空间、直接寻址的⽚内存储空间、间接寻址的⽚内存储空间、扩展的外部RAM 空间,数字代表想要查看的地址。
例如输⼊D :0即可观察到地址0开始的⽚内RAM 单元值、键⼊C :0即可显⽰从0开始的ROM 单元中的值,即查看程序的⼆进制代码。
该窗⼝的显⽰值可以以各种形式显⽰,如⼗进制、⼗六进制、字符型等,改变显⽰⽅式的⽅法是点⿏标右键,在弹出的快捷菜单中选择,该菜单⽤分隔条分成三部份,其中第⼀部份与第⼆部份的三个选项为同⼀级别,选中第⼀部份的任⼀选项,内容将以整数形式显⽰,⽽选中第⼆部份的Ascii 项则将以字符型式显⽰,选中Float 项将相邻四字节组成的浮点数形式显⽰、选中Double 项则将相邻8字节组成双精度形式显⽰。
如何在Keil (RVMDK) 中观察程序的执行时间
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
ARM公司收购了Keil公司之后,升级了Keil,使之与ARM相结合,即我们常知的RealView MDK。
RVMDK的操作与原来的Keil 的单片机版本基本相同。
关于如何在Keil 中观察程序的执行时间,方法有二种:
(一)等你进入调试状态时,在Project_Workspace下的“寄存器”标签页下有一个“Sec”,这个就是用来模拟记录程序运行的时刻的,如果你要查看一段程序运行了多长时间,可以笔记记录运行到程序开头的时刻,在记录运行到程序尾的时刻,两者相减,就能得到运行的时间了。
(二)运行调试状态下的“性能分析器”(菜单“调试”---“性能分析器”),同样能通过两个时刻的相减来得到程序运行时间。
注意:(1)必须在软件仿真的前提下,你才可以使用这两种方式;
(2)在仿真之前设置你时钟频率和你实际使用的时钟频率一样(其实在Keil的设置是来模拟实际运行的情况的),方法:右键“目标1”---“为目标1设置选项”----“项目”标签页,在下面的“时钟”里设置你所用的频率。
Keil调试命令(转载)Keil调试命令(转载)在Memory窗口上输入address_type:address才能看到正确地址的变量debug~perfermance analyzer加入要察看的模块名称,然后view~perfermance analyzerwindow 可以察看各个模块运行时间①Display address_type:addressB:Bit addressC:Code MemoryBx:Code BankD D:80H 命令可以查看特殊寄存器 dataD I:0 命令可以查看内部RAM数据iData;D X:0 命令可以查看外部RAM数据xData;②R1 //显示R1 register~R1 //显示变量R1R1 = R7 //对寄存器Rx操作R1 = --R7R1 = 0x20③main //显示main()的开始地址d main //显示main()的代码④向RAM.ROM中写数据Enter data_type address_type:address expr,expr....data_type:int char double float longE char data:0x20 1,2,3,4 //向data区0x20开始的地址写1,2,3,4变量放在RAM的30H,要把定义放在main前面!另外特别注意,内部RAM通常供C程序存放中间变量等,所以一定要看看编译后的程序中是否存在存储单元冲突的情况,比如如果程序中使用了别的寄存器组的话,08-1FH单元就不能用了unsigned long data i _at_ 0x30如何用Keil的uVision2仿真外部中断?方法一:调试状态下,打开PeriPherals->I/O PORTS->P3 用鼠标将相应的端口变高或低即可产生中断方法二:在命令窗口中输入DEFINE BUTTON "INTERUPT","P3=0XFE"然后打开TOOLBOX,即可以看见按钮INTERUPT,按下按钮即可Define Button "button_label","command"注意:Define Button "show R5 Register","printf(\"R5=%04xh\\n\")"kill button x //x为按钮在toolbox上位置方法三:用调试函数,可参考uv2\hlp\gs51.pdf第五和第六章信号函数写在一个ini文件中,调试主程序时用debug-Function Editor调入,会有一个框出现,可在里面修改,然后complie。
Keil 程序调试窗口上一讲中我们学习了几种常用的程序调试方法,这一讲中将介绍Keil 提供各种窗口如输出窗口、观察窗口、存储器窗口、反汇编窗口、串行窗口等的用途,以及这些窗口的使用方法,并通过实例介绍这些窗口在调试中的使用。
Keil软件在调试程序时提供了多个窗口,主要包括输出窗口(Output Windows )、观察窗口(Watch&Call Statck Windows )、存储器窗口(Memory Window )、反汇编窗口(Dissambly Window )串行窗口(Serial Window )等。
进入调试模式后,可以通过菜单View 下的相应命令打开或关闭这些窗口。
图1是输出窗口、观察窗口和存储器窗口,各窗口的大小可以使用鼠标调整。
进入调试程序后,输出窗口自动切换到Command 页。
该页用于输入调试命令和输出调试信息。
对于初学者,可以暂不学习调试命令的使用方法。
1、存储器窗口存储器窗口中可以显示系统中各种内存中的值,通过在Address 后的编缉框内输入“字母:数字”即可显示相应内存值,其中字母可以是C 、D 、I 、X ,分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM 空间,数字代表想要查看的地址。
例如输入D :0即可观察到地址0开始的片内RAM 单元值、键入C :0即可显示从0开始的ROM 单元中的值,即查看程序的二进制代码。
该窗口的显示值可以以各种形式显示,如十进制、十六进制、字符型等,改变显示方式的方法是点鼠标右键,在弹出的快捷菜单中选择,该菜单用分隔条分成三部份,其中第一部份与第二部份的三个选项为同一级别,选中第一部份的任一选项,内容将以整数形式显示,而选中第二部份的Ascii 项则将以字符型式显示,选中Float 项将相邻四字节组成的浮点数形式显示、选中Double 项则将相邻8字节组成双精度形式显示。
第一部份又有多个选择项,其中Decimal 项是一个开关,如果选中该项,则窗口中的值将以十进制的形式显示,否则按默认的十六进制方式显示。
Keil C51 精确延时程序执行时间引言单片机因具有体积小、功能强、成本低以及便于实现分布式控制而有非常广泛的应用领域[1]。
单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。
有时还要求有很高的精度,如使用单总线芯片 DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。
用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统软件的主流工具为C语言,用C51写延时程序时需要一些技巧[3]。
因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法。
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。
1 使用定时器/计数器实现精确延时单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。
第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。
本程序中假设使用频率为12 MHz的晶振。
最长的延时时间可达216=65 536 μs。
若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。
在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。
使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。
但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。
这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。
Keil软件查看程序运行时间
Keil5软件调试运行时间,精确度很高,在进行调试前需进行相关设置,直接上图:
点击“Target options”设置,或者“project->Options for file”,进入设置界面如下图:
“Device”所用芯片为STM32F103VE
然后设置第二项“Target”如下图
芯片型号为Cortex-M3 的STM32F103VE,晶振选72MHz,然后设置“C/C++”:
注意程序文件路径。
接着是“Debug”选项:
使用的常用调试工具“J-link/j-trace cortex”, 注意“Utilities”选项与”Debug”一致为Jlink
返回“Debug”选项,点击“Settings”如下图:
必须选择“SW”模式,速率可选“500khz”,然后进入选项“Trace”如下:
芯片工作频率选择“72MHZ”,”SW0 Settings”的选项“Autodetect max SW0 C1”打勾选中,然后“Enable”选项打勾选中。
最后,选择相应FLASH,如下图:
点击“确定”,OK。
在调试过程查看时间:进入debug状态
查看左侧
时间单位为秒/s
查看两段时间间隔:
断点后延时300ms
当准确。