原创 第八章 dScope for Windows使用详解(转帖)

2009-2-9 08:33 3164 4 4 分类: MCU/ 嵌入式

第一节 概述


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的值<?XML:NAMESPACE PREFIX = O />


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段)


0X010X00000X010XFFFF


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


0XFF0X00000XFF0XFFFF


(2) 地址空间类型


C:代码空间


D:内部直接寻址空间


I 内部间接寻址空间


X:外部数据空间


B:位寻址空间


PI/O


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


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


CO:常数空间(MCS251专有)


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


2. 常量


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


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


(1) 整型常量


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


(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变量


R0R7AC(位变量)、BDPTR及特殊功能寄存器变量,对这些变量均可进行读、写操作。


(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 channel<unreg>outreg


MCS51为:Assign  Win<SOIN> 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指令调用该函数文件,最后才能以函数名调用之。


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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /3 下一条