Keil C51使用教程---dScope使用详解(八)

发布者:DazzlingSpirit最新更新时间:2016-11-24 来源: eefocus关键字:Keil  C51  dScope 手机看文章 扫描二维码
随时随地手机看文章

dScope for Windows使用详解


第一节 概述

1. 主窗口(MainFRAMe Window)

可设置其它各种调试窗口,设置断点、观察点,修改地址空间,加载文件等等;

2. 调试窗口(DEBUG Window)

支持用户程序的各种显示方式,可连续运行,单步运行用户程序,并可在线 汇编;

3. 命令窗口(Command Window)

支持命令行的输入;

4. 观察窗口(Watch Window)

可设置所要观察的变量、表达式等;

5. 寄存器窗口(Registe Window)

显示内部寄存器的内容,程序运行次数等;

6. 串口窗口(Serical Windows)

显示串口接收和发送的数据;

7. 性能分析窗口

显示所要观察的各程序段占用CPU的空间;

8. 内存窗口(Memory Window)

显示所选择的内存中的数据;

9. 符号浏览窗口(Symbol Browser Window)

显示各种符号名称,包括专有符号,用户自定义符号(函数名、变量、标号)等;

10. 调用线窗口(Call-Stack Window)

动态显示当前执行的程序段的函数调用关系;

11. 代码覆盖窗口

提供当前模块内各程序段中被执行代码的比率;

12. 外围设备窗口(peripherals)

可显示I/O口,定时器,中断,串口等外围设备状态;

第二节 dScope for Windows基本操作

1. 指定初始化文件

在uVision的Option菜单dScope Debugger中指定dScope的初始化文件,用uVision的RUN启动dScope将自动加载此初始化文件,自动执行其中命令;

下面是一个例子,可以看出调入一个调试代码的过程。Ds51.ini:

load 8051.dll

load test

slog>>test.log

xtal=11.0592

define button "go to main","g,main"

ws RevCounter

ws rm.r

g,main

PA RESET

PA serial

PA timer0

2. 观察变量

方法1:命令行

WS expression [, numberbase ] [ LINE ]

其中numberbase为显示数制,10对应10进制,16对应16进制,缺省为16进制。LINE为单行显示,缺省为多行显示。

方法2:setup->Watchpoints,在对话框中输入变量

3. 显示RAM的值

d i(x,d):起始地址,终止地址

d 变量名

4. 观察堆栈

View->Call-stack->Show invocation,可以跟踪调用过程;

5. 中断处理程序调试

在装入8051.dll后,在dScope的主菜单中将增加Peripherial,其有4个字菜单:

I/0 port:Pi端口状态

Interrupt:中断设置

Timer:定时器中断状态

Serial:串口中断状态

设置相应的中断请求标志位即可产生中断。

6. 性能分析(Performance Analyzer:PA)

PA用来分析一段代码执行占用CPU的百分比。定义:

命令行 PA func_name

第三节 dScope for Windows命令文件的编制

dScope除了用命令行的方式进行调试以外,还可将各种调试命令汇集于一个调试文件中,然后调用该文件,就可达到自动测试用户源代码的目的。dScope的命令文件支持C/PL/M的格式,因而编制调试命令文件与编制C语言程序有些类似。

1. 地址空间及地址空间类型

(1) 地址空间分段

dScope提供的最大可用空间为16M,实际上我们只用以下三段:

① 内部数据空间段(0X00段或D段)

0X00:0X0000~0X00:0XFFFF(对MSC51而言为0X00:0X00FF)

② 外部数据空间段(0X01段式或X段)

0X01:0X0000~0X01~0XFFFF

③ 程序空间段(0XFF段或C段)

0XFF:0X0000~0XFF:0XFFFF

(2) 地址空间类型

C:代码空间

D:内部直接寻址空间

I: 内部间接寻址空间

X:外部数据空间

B:位寻址空间

P:I/O口

EB:扩展的位寻址空间(MCS251专有)

ED:扩展的数据空间(MCS251专有)

CO:常数空间(MCS251专有)

HC:正常数空间(MCS251专有)

2. 常量

dScope支持十六进制、八进制、十进制、二进制常数,其后缀分别为H、Q(O)、T(或无)、Y;

dScope不区分常量的大、小写。

(1) 整型常量

分为整型(int),无符号整型(uint,00rd),长整型(long),无符号长整型(Wlong、Word)。

(2) 浮点型常量

与ANSI C相同。

(3) 字符串常量

与ANSI C相同

(4) 字符常量

分为字符型(Char)和无符号字符型(Uchar)一种。

(5) 行号常数

指用户程序中的行号,实际上是个地址

(6) 位常量(Bit):

0和1

(7) 地址常数

地址常数的种类很多,地址常数不同于行号常数,行号常数就是一个地址,而地址数被引用时,实际上是取该地址中的数据。

C:代码地址常数,如C:0X0012或0XFF:0X0012

D:内部直接寻址地址常数,如D:0X0068或0X00:0X0068

I:内部间按寻址地址常数,如I:0X0010或0X00:0X0010

X:外部数据空间地址常数,如X:0X0028或0X01:0X0028

B:位地址常数,如B:0X20或B:0X24.0

EB:扩展的位地址常数(MCS251专有),

ED:扩展的数据空间地址常数(MCS251专有)

CO:常数空间地址常数(MCS251专有)

HC:正常数空间地址常数(MCS251专有)

(8) 标识符常量

即用户源程序中的标号、函数名等,实际上代表某一地址。

(9) 用户源程序中定义的常数

3. 变量

dScope所支持的变量名或标识符最多可由31个字符组成,第一个字母为A~Z,a~z,下划线或问号,后续字符可为字母、数字、下划线和问号。除CPU变量和系统变量外,dScope不支持全局变量,但可视“define”命令定义的变量为全局变量。

Dscope所支持的变量分为以下几种(变量名称不区分大、小写),支持类型转换:

(1) 整型变量

分为整型变量(int)、无符号整型变量(uint/word),长整型(Long) 、无符号长整型(Ulong/dword)。

(2) 浮点型变量(float)

与ANSI C相同。

(3) 字符型变量L

分为字符型(char)变量和无符号字符型(Uchar)

(4) 位变量(Bit)

(5) 系统变量

dScope自己定义了一系列内部变量,用户可对这些变量进行读或读/写操作, 可被用户自定义数所引用。

a. Cycles (Read Only)

32位变量(Ulong),指示当前程序执行已花费的指令周期(cycle)。

b. Ramsize(R/W)

16位变量(Uint),指示内部可直接寻址的数据空间大小。

c. Radix(R/N)

8位变量(Uchar),决定输出的数制

Radix=0X0A (10进制),Radix=0X10 (16进制)

d. -IIP-(R/W)

8位变量(Uchar),指示当前的中断嵌套数目。

e. $ (R/W)

32位变量(Ulong),指出PC值,通过对其进行写操作,可改变程序执行的流程。

f. Itrace (R/W)

8位变量(Uchar),决定是否对程序运行情况进行记录

Itrace=1,使能记录操作

Itrace=0,根本上记录操作

g. __Break__(R/W)

8位变量(Uchar) __Break__=1,中止程序的运行

h. __Mode__和__FRAMe size__是MCS 251专有的变量。

(6) CPU变量

即R0~R7、A、C(位变量)、B、DPTR及特殊功能寄存器变量,对这些变量均可进行读、写操作。

(7) 用户源程序中定义的变量、数组、结构等

4. 运算符

dScope支持ANSI C的运算符,包括算术运算符,逻辑运算符,关系运算符。

5. 表达式

以运算符将dScope所支持的常量、变量、函数等连接在一起,就构成了dScope的表达式。

6. 数组

dScope不支持在命令文件中定义数组,但可引用用户程序中的数组,引用方式如同C。

7. 结构和联合

dScope不支持在命令文件中定义结构和联合,但可引用用户程序中的结构和联合,引用方式如同C,但如要输出整个结构或联合的结果,就要用命令“OBJ”。

8. 指针:

不可自定义指针,但支持用户源程序中的指针变量。

9. dScope命令语句

dScope提供了一系列调试命令。在命令文件中,dScope只支持这些语句及前述定义的表达式,C语言的语句均不被支持,但在命令文件所包含的用户自定义函数(非用户源程序中的函数)中支持C语句,但用户自定义函数中同样不支持数组、结构、联合和指针。

(1) ASM

在线汇编命令,格式如下:

ASM C:0Xnnnn (或标号);设定插入汇编指令的地址

ASM 汇编指令

ASM 汇编指令

插入完毕后,在debug窗口内选择“Assemble->Assemble”完成编译。

(2) Assign

串行口分配指令,格式如下:

Assign channeloutreg

对MCS51为:Assign Win Soot

但目前的dScope版本并未提供完整串口窗口功能。

(3) Define

用户自定义变量指令,格式如下:

Define

类型一为如前所述的变量类型,Define指令定义的变量可能为全局变量,可为用户自定义函数所引用。

(4) Display

内存显示命令,格式如下二:

D 起始地址,结束地址

地址如前所述的地址常数,标识符常量。

(5) Enter

内存修改指令,格式如下:

E 类型地址=表达式 [表达式2],[……]

类型如前所述,地址如前所述的地址常数。表达式如前所述,但如果是函数名称(含标号、指针变量),则关键字E→EP

(6) Map/Reset map

Map为内存段修改指令,Reset map将内存段复位或缺省值。

(7) Object

用以引用用户源程序中的结构(联合)、数组、格式如下:

Obj表达式 [n,],[Line]

表达式为用户源程序中的数组,结构(联合)名称。当Line缺省时,数目、结构(联合)的内容按n行输出;如有Line,则单行输出。

(8) U

反汇编命令,格式如下:

U [地址]

地址包括地址常 数及标识符常量,指明反汇编的起始地址。

(9) WK

观察点删除命令,格式如下:

WK n1[n2 ],[……] ;删除指定的观察点,n为字符型,整型

常数

WK * ;删除所有的观察点

(10) WS

观察点设置命令,格式如下:

WS 表达式[,n][LINE]

关键字LINE存在时,观察点表达式单行输出

LINE缺省时,观察点表达式n行输出。

(11) G

连续运行命令,格式如下:

G [起始地址],[终止地址]

地址为标识符常量或地址常数,地址缺省时,为连续运行。

(12) T/P

单步运行指令,格式如下:

T/P n ;n指至单行运行的步数,P指给用户当调用某函数时,把它作为一步处理,并不进入该函数运行。

(13) PA

性能分析操作指令,其分以下几种:

PA

显示当前所设置的性能分析程度段

PA Kill *

删除当前所设置的所有性能分析程序段

PA Kill n1 [,n2],[……]

删除指定的性能分析程序段

PA 地址范围

设置性能分析程序段,地址范围可以起始地址和结束地址的方式给出,也可给出函数名,行号范围。

PA Reset

复位性能分析窗口(PA Windows),清除所有的记录。

(14) BD

断点失效命令,格式如下:

BD n1 [,n2],[,……] ;disable指定的断点

DB * ;disable所有的断点

(15) BE

断点使能命令,格式如下:

BE M [,n2],[,……] ;使能指定的断点

BE * ;使能所有的断点

(16) BK

断点删除指令,格式如下:

BK M[,n2],[,……] ;删除指定的断点

BK * ;删除所有的断点

(17) BL

断点显示指令,显示所有被定义的断点。

(18) BS

断点定义指令,dScope支持多达40个断点,具体格式如下:

a.BS 表达式[,count] [,“cmd”]

count:经过该断点的次数 [选项]

“cmd”:断点到达后附带执行的dScope命令(连项)

表达式一个条件表达式,此时该断点称为条件断点(运算符为&.&&,<

BS READ 表达式 [,count] [,“cmd”]

BS WRITE 表达式 [,count] [“cmd”]

BS READWRITE 表达式 [,count] [,“cmd”]

以上三种断点称访问式(Access断点),当某一址或变量被访问(R/W)或某些值被读写时,程序被中断。

(19) Define button

图标定义指令,用于当窗口(Toolbox)

(20) !

DOS窗口Open命令,以“EXIT”命令退出DOS窗口。

(21) Include

文件包含命令,格式如下:

Include [路径] 文件名

dScope支持以文件包含的方式调入并执行调试命令文件,用户自定义函数文件,调试命令文件可以有后缀,也可无后缀。

(22) Load

加载命令,格式如下:

Load [路径] 文件名

Load指令能够加载的文件必须具有以下格式之一。

Intel Hex/Hex 386格式

Intel Object (OMF_51) 格式

Intel Object (OMF-251) 格式

dScope的CPU驱动文件(.DLL)

(23) LOG

Command Window存盘指令,用于将Command Windows中的内容输出到指定的文件中,格式如下:

LOG > [路径]文件名 ;创建一个新文件

LOG >> [路径]文件名 ;将Command Windows的内容输出到某个已

存在的文件中。

LOG OFF 完成输出操作并开闭该文件

LOG指令只将LOG>或LOG>>与LOG OFF指令之间的操作命令存入该指定文件。

(24) Reset

复位指令,具体格式如下:

Reset ;执行dScope的复位

Reset Map ;复位外部数据空间

Reset Var ;复位SET指令定义的变量

(25) Save

该指令将一段内存映象以19EX386/HEX的格式存盘,具体格式如下:

Save 路径 文件名:地址1、地址2

地址1、地址2指所要保存的空间范围,既可是标识符,也可是址常数。

(26) SET

该指令回来定义dScope目标代码预定义变量的含义,这些预定义变量包括以下二种:

SRC ;指出所在的路径

F1~F12;对应于键盘上的12个功能键,定义这些功能键的含义。

SET指令的格式为:

SET 变量=“字符串”

SET 变量

10. 函数

dScope支持三种函数,即dScope预定义函数,用户自定义函数和信号函数,分别详述如下:

(1) dScope预定义函数

dScope号提供8个预定义函数(可视为dScope的库函数)

①Void Printf(“String”,输出表列)

屏幕打印函数,与ANSI C的Printf ( ) 函数相同

②Void exec(“Command__String”)

Command__String为一有效的命令字符串,此函数用于在运行用户自定义函数的过程中执行dScope命令,这个函数提供了一个很重要的编制测试命令文件的方法。

③int getint(“Prompt__String”);从键盘输入一个整数

int getlong (“Prompt__String”);从键盘输入一个长整数

float getfloat (“Prompt__String”);从键盘输入一个浮点数

以上这三个函数被执行时,dScope会弹出一个dialog box等待用户输入数据,其标题栏上是“Prompt__String”,利用这个函数,不仅可以为变量赋值,也可使用户得以看清前一阶段的测试结果。

④int rand (int seed)

该函数会输出一个随机数(-32768~32768)

⑤Void memeset (ulorg start , ulong end ,uchar val)

该函数用于给地址范围(Start__end)内的内存赋值(Val)

⑥Void twatch (Long cycles)

定时函数,时间由(Long cycles)决定,它是以指令周期计数的,它也 用于产生一个信号波形,该函数必须用于信号函数中。

(2) 用户自定义函数

这类函数不同于用户源程序中的数函,其定义格式为

Func 返回类型 函数名(参数序列)

{

语句

}

返回类型如前所述的变量类型

用户自定义函数中的语句与ANSI C相似,只是不支持数组结构、联合、指针,可引用dScope系统变量,define语句定义的变量和用户源程序变量,不支持dScope命令,如想在函数中执行dScope命令,要借助于exec(“Command__String”)函数,可引用dScope预定义的函数(除了twatch ( )函数),不支持ANSI C的库函数。

(3) 信号函数

用于产生具有某一波形的信号,定义格式为:

Signal返回类型函数名(参数长列){

语句

}

信号函数主要是利用twatch ( )函数,目前dScope版本在提供这一功能上面还有一定问题。

(4) dScope函数与ANSI函数的区别

① 不支持条件汇编

② 不支持头文件

③ 无变量的初始化

④ 不支持数组、结构、指针

⑤ 调用方式不同,自定义函数和信号函数首先要包含一个函数文件之中,然而在测试命令文件中以Inclule指令调用该函数文件,最后才能以函数名调用之。

⑥ 函数调用只支持传值方式。


关键字:Keil  C51  dScope 引用地址:Keil C51使用教程---dScope使用详解(八)

上一篇:用keil编写的 C51错误 *** WARNING L1
下一篇:Keil C51使用教程---代码效率(七)

推荐阅读最新更新时间:2024-03-16 15:21

单片机解码万能红外遥控器C51程序
使用方法:打开串口调试助手,设置为9600 bps 单片机这边用11.0592MHz的晶振,使用sm0038或者其他型号的红外接收头按下面的电路连接好,其中out直接与单片机的p3.2脚相连.按下遥控器,串口调试助手便会出现解码值. /******************************************************************/ /* 本程序的蓝本从网上搜集,经修改并注释,万能遥控器解码成功 */ /* 晶振:11.0592MHz */ /* 整理与测试:单片机教程网 http://www.51hei.com 胡琴 2012.5.15
[单片机]
单片机解码万能红外遥控器<font color='red'>C51</font>程序
KEIL的C编译器不支持写二进制数
用KEIL写51的汇编程序,可以用二进制数字后加“B”表示,比如0x2A = 00101010B 而KEIL的C编译器不支持写二进制数,所以KEIL的C程序不能直接用二进制数表示。
[单片机]
基于Proteus软件仿真与Keil的单片机系统设计
1 概述   随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。   然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。如图1所示,用户程序需要在硬件完成的情况下才能进行联调,如果在调试过程中发现需修改硬件,则要重新制板。因此无论从硬件成本还是开发周期来看,其高风险、低效率的特性显露
[单片机]
keil51下使用sprintf问题
测试环境:keil c51 + STC89C52 说明: 1.keil的不定参数只有15个字节 也就是说sizeof(...) 加起来总共不能超过15字节,否则会出错 2.当不定参数中有常数时,你也会得不到你想要的结果,字符串除外 例: unsigned char count_sec=2, count_min=3, count_hour=4; xdata char buf = ; sprintf(buf, %2d:%2d:%2d , count_hour, count_min, count_sec); 则转换完的结果是不正确的。 解决方式1: unsigned char count_sec=2, count_min=3, cou
[单片机]
第5节:用keil软件新建,关闭,打开一个完整工程的操作流程
从业十年,教你单片机入门基础 第五讲: Keil平台软件的安装我就不多讲了,网上这方面的资料很多,大家可以百度一下如何安装keil的教程。下面开始讲解用keil软件新建,关闭,打开一个完整工程的操作流程。 第一步:新建一个工程文件夹。先在电脑D盘目录下新建一个文件夹,取名为 stc89c52rc 。 第二步:启动keil软件。双击桌面 keil uVision4 的图标启动keil软件。 第三步:关闭默认被打开的已有工程。打开keil软件时,如果发现此软件默认打开了一个之前已经存在的工程,请先关闭此工程。如果默认没有打开已有工程,这一步可以忽略跳过。关闭已有工程的操作是这样子的:点击上面 Project 选项,在弹出的下拉菜单
[单片机]
时钟芯片ds12c887的C51驱动程序
/************************************************************* 文件名称:ds12c887.c 适用范围:时钟芯片ds12c887的驱动程序 *************************************************************/ #include /* 命令常量定义 */ #define CMD_START_DS12C887 0x20 /* 开启时钟芯片 */ #define CMD_START_OSCILLATOR 0x70 /* 开启振荡器, 处于抑制状态 */ #define CMD_CLOSE_DS12C
[单片机]
关于KEIL MDK调试ARM程序不能仿真的问题
在单片机程序调试过程中,由于程序量小,利用仿真器进行仿真调试方便直观,所以一般经常使用。但是keil经常会出现罢工,无法用仿真器调试的现象,如下图: 解决方法也很简单,按照下图设置即可:
[单片机]
关于<font color='red'>KEIL</font> MDK调试ARM程序不能仿真的问题
如何创建51单片机KEIL工程步骤
1. 什么是Keil软件 Keil软件是一款专为嵌入式系统开发而设计的集成开发环境(IDE),常用于51、STM32单片机软件开发的编程软件。Keil编程软件不仅支持多种工具和扩展程序,还能够处理多种文件格式和数据交换方式;可支持单片机程序的在线仿真,或通过仿真器进行实物仿真,大大方便开发人员的工作。 其中,我们常用的Keil软件有两种,分别为Keil C51以及Keil MDK,前者主要用于51单片机等8051内核单片机的开发工具(不支持32位单片机),Keil MDK主要用于ARM架构单片机的开发工具,主要用于STM32单片机等32单片机。所以在使用Keil软件时需要主要这一点。 2.如何创建51单片机KEIL工程步骤
[单片机]
如何创建51单片机<font color='red'>KEIL</font>工程步骤
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved