<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          KeilC51使用詳解 (三)

          作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
          第五章 Keil C51庫(kù)函數(shù)參考

          C51強(qiáng)大功能及其高效率的重要體現(xiàn)之一在于其豐富的可直接調(diào)用的庫(kù)函數(shù),多使用庫(kù)函數(shù)使程序代碼簡(jiǎn)單,結(jié)構(gòu)清晰,易于調(diào)試和維護(hù),下面介紹C51的庫(kù)函數(shù)系統(tǒng)。

          本文引用地址:http://www.ex-cimer.com/article/201611/315905.htm

          第一節(jié) 本征庫(kù)函數(shù)(intrinsic routines)和非本征證庫(kù)函數(shù)

          C51提供的本征函數(shù)是指編譯時(shí)直接將固定的代碼插入當(dāng)前行,而不是用ACALL和LCALL語(yǔ)句來(lái)實(shí)現(xiàn),這樣就大大提供了函數(shù)訪問(wèn)的效率,而非本征函數(shù)則必須由ACALL及LCALL調(diào)用。C51的本征庫(kù)函數(shù)只有9個(gè),數(shù)目雖少,但都非常有用,列如下:_crol_,_cror_:將char型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回_iror_,_irol_:將int型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回_lrol_,_lror_:將long型變量循環(huán)向左(右)移動(dòng)指定位數(shù)后返回_nop_: 相當(dāng)于插入NOP_testbit_: 相當(dāng)于JBC bitvar測(cè)試該位變量并跳轉(zhuǎn)同時(shí)清除。_chkfloat_: 測(cè)試并返回源點(diǎn)數(shù)狀態(tài)。使用時(shí),必須包含#inclucle 一行。如不說(shuō)明,下面談到的庫(kù)函數(shù)均指非本征庫(kù)函數(shù)。

          第二節(jié) 幾類重要庫(kù)函數(shù)

          1. 專用寄存器include文件

          例如8031、8051均為REG51.h其中包括了所有8051的SFR及其位定義,一般系統(tǒng)都必須包括本文件。

          2. 絕對(duì)地址include文件absacc.h

          該文件中實(shí)際只定義了幾個(gè)宏,以確定各存儲(chǔ)空間的絕對(duì)地址。

          3. 動(dòng)態(tài)內(nèi)存分配函數(shù),位于stdlib.h中

          4. 緩沖區(qū)處理函數(shù)位于“string.h”中

          其中包括拷貝比較移動(dòng)等函數(shù)如:memccpy memchr memcmp memcpy memmove memset這樣很方便地對(duì)緩沖區(qū)進(jìn)行處理。

          5. 輸入輸出流函數(shù),位于“stdio.h”中

          流函數(shù)通8051的串口或用戶定義的I/O口讀寫數(shù)據(jù),缺省為8051串口,如要修改,比如改為L(zhǎng)CD顯示,可修改lib目錄中的getkey.c及putchar.c源文件,然后在庫(kù)中替換它們即可。

          第三節(jié) Keil C51庫(kù)函數(shù)原型列表

          1. CTYPE.H

          bit isalnum(char c); bit isalpha(char c); bit iscntrl(char c); bit isdigit(char c); bit isgraph(char c); bit islower(char c); bit isprint(char c); bit ispunct(char c); bit isspace(char c); bit isupper(char c); bit isxdigit(char c); bit toascii(char c); bit toint(char c); char tolower(char c); char __tolower(char c); char toupper(char c); char __toupper(char c);

          2. INTRINS.H

          unsigned char _crol_(unsigned char c,unsigned char b); unsigned char _cror_(unsigned char c,unsigned char b); unsigned char _chkfloat_(float ual); unsigned int _irol_(unsigned int i,unsigned char b); unsigned int _iror_(unsigned int i,unsigned char b); unsigned long _irol_(unsigned long l,unsigned char b); unsigned long _iror_(unsigned long L,unsigned char b); void _nop_(void); bit _testbit_(bit b);

          3. STDIO.H

          char getchar(void); char _getkey(void); char *gets(char * string,int len); int printf(const char * fmtstr[,argument]…); char putchar(char c); int puts (const char * string); int scanf(const char * fmtstr.[,argument]…); int sprintf(char * buffer,const char *fmtstr[;argument]); int sscanf(char *buffer,const char * fmtstr[,argument]); char ungetchar(char c); void vprintf (const char *fmtstr,char * argptr); void vsprintf(char *buffer,const char * fmtstr,char * argptr);

          4. STDLIB.H

          float atof(void * string); int atoi(void * string); long atol(void * string); void * calloc(unsigned int num,unsigned int len); void free(void xdata *p); void init_mempool(void *data *p,unsigned int size); void *malloc (unsigned int size); int rand(void); void *realloc (void xdata *p,unsigned int size); void srand (int seed);

          5. STRING.H

          void *memccpy (void *dest,void *src,char c,int len); void *memchr (void *buf,char c,int len); char memcmp(void *buf1,void *buf2,int len); void *memcopy (void *dest,void *SRC,int len); void *memmove (void *dest,void *src,int len); void *memset (void *buf,char c,int len); char *strcat (char *dest,char *src); char *strchr (const char *string,char c); char strcmp (char *string1,char *string2); char *strcpy (char *dest,char *src); int strcspn(char *src,char * set); int strlen (char *src); char *strncat (char 8dest,char *src,int len); char strncmp(char *string1,char *string2,int len); char strncpy (char *dest,char *src,int len); char *strpbrk (char *string,char *set); int strpos (const char *string,char c); char *strrchr (const char *string,char c); char *strrpbrk (char *string,char *set); int strrpos (const char *string,char c); int strspn(char *string,char *set);

          第六章 Keil C51例子:Hello.c

          Hello位于/C51/excmples/Hello/目錄,其功能是向串口輸出“Hello,world”整個(gè)程序如下:#pragma DB OE CD#indule #includevoid main(void) { SCOn=0x50; TMOD=0x20 TH1=0xf3; Tri=1; TI=1; printf(“Hello,world /n”); while(1) { } }

          第一節(jié) uVision for Windows的使用步驟

          (1) file_new新建一個(gè)hello.c文件,輸入如上內(nèi)容或直接用目錄下源文件。(2) file_save或工具欄將文件存盤。(3) project_new project創(chuàng)建一個(gè)project名為hello,并在其中加入hello.c。這時(shí)該project已是打開狀態(tài),或用open project打開已存在的project。(4) option_C51 compiler中選出至少包括兩項(xiàng)DB OE。(5) option_dscope Debugger選中hello/DS51.INI查看DS51.INI看其是否為: “load…/…/BIN/8051.DLL map 0, 0xffff”否則修改。(6) 在option_make選make文件順序。(7) project選Build project,看是否有語(yǔ)法錯(cuò)誤,若無(wú)則生成HEX文件,若有則修改源文件后重復(fù)以上部分步驟。(8) run_dScope debugger進(jìn)入dScope51后裝入hello則可用go直接運(yùn)行看serial窗口有無(wú)輸出,正常每系統(tǒng)運(yùn)行一次,serial窗口均出現(xiàn)一個(gè)“Hello,world”表明運(yùn)行無(wú)誤。

          第二節(jié) Ishell for Dos使用步驟

          (1) 進(jìn)入Ishell 用Setup editer選擇編輯器。然后單擊Edit或用Edit命令編輯hello.c源文件,存盤,也可以在files窗口中直接選中hello.c。(2) 用cd改換project目錄至hello目錄。(3) 在setup_target一項(xiàng)目選8051。(4) 在setup_C51中輸出DB OE。(5) 在setup_project輸入project名hello。(6) 在setup_save保存Ishell.CFG文件。(7) 編輯一個(gè)Link文件hello.lin中有“hell.obj”一行。(8) 由光標(biāo)落在files菜單中的Hello.c上,單擊“translate”,如無(wú)語(yǔ)法錯(cuò),再擊“link”,則Hex文件生成。(9) 單擊Simulate如在8051.CDF中選Simulate為dScope則進(jìn)入dScope調(diào)試直接“Go”,看serial窗口輸出為“Hello.world”。(10) 如程序有誤修改源代碼后不必再translate或link了,只要一步Amake即可。若project中包括不止一個(gè)文件,在DOS的Ishell中不能用Translate編譯,而應(yīng)建立bat文件,直接在命令窗編譯,然后link連接。如還需用Translate則只能多個(gè)文件分別編譯,然后連接。

          第七章 Keil C51的代碼效率

          C51程序編譯生成匯編代碼的效率,是由許多因素共同決定的,對(duì)于Keil C51,主要受以下兩種因素影響:

          第一節(jié) 存儲(chǔ)模式的影響

          存儲(chǔ)模式?jīng)Q定了缺省變量的存儲(chǔ)空間,而訪問(wèn)各空間變量的匯編代碼的繁簡(jiǎn)程度決定了代碼率的高低。例如:一個(gè)整形變量i,如放于內(nèi)存18H、19H空間,則++i的操作編譯成四條語(yǔ)句:INC 0x19MOV A,0x19JNZ 0x272DINC 0x180x272D:而如果放于外存空間0000H、0001H則++i的操作編譯成九條語(yǔ)句:MOV DPTR,0001MOVX A,@ DPTRINC AMOVX @ DPTR,AJNz #5MOV OPTR,#0000MOVX A,@DPTRINC AMOVX @ DPTR,A就匯編之后的語(yǔ)句而言,對(duì)外部存儲(chǔ)器的操作較內(nèi)部存儲(chǔ)器操作代碼率要低得多,生成的語(yǔ)句為內(nèi)存的兩倍以上,而程序中有大量的這種操作,可見存儲(chǔ)模式對(duì)代碼率的響了。因此程序設(shè)計(jì)的原則是1、存儲(chǔ)模式從small-Compact-large依次選擇,實(shí)在是變量太多,才選large模式。2、即使選擇了large模式,對(duì)一些常用的局部的或者可放于內(nèi)存中的變量,最好放于內(nèi)存中,以盡量提高程序的代碼率。

          第二節(jié) 程序結(jié)構(gòu)的影響

          程序的結(jié)構(gòu)單元包括模塊、函數(shù)等等。同樣的功能,如果結(jié)構(gòu)越復(fù)雜,其所涉及的操作、變量、功能模塊函數(shù)等就越多,較之結(jié)構(gòu)性好,代碼簡(jiǎn)單的程序其代碼率自然就低得多。此外程序的運(yùn)行控制語(yǔ)句,也是影響代碼率的關(guān)鍵因素,例如:switch -case語(yǔ)句,許多編譯器都把它們譯得非常復(fù)雜,Keil C51也不例外,相對(duì)較為簡(jiǎn)易的Switch-case語(yǔ)句,編譯成跳轉(zhuǎn)指令形式,代碼率較高,但對(duì)較為復(fù)雜的Switch-Case,則要調(diào)用一個(gè)系統(tǒng)庫(kù)函數(shù)?C?ICASE進(jìn)行處理,非常復(fù)雜。再如if( ),while( ),等語(yǔ)句也是代碼相對(duì)較低的語(yǔ)句,但編譯以后比switch-case要高得多。因此建議設(shè)計(jì)者盡量少用switch-case之類語(yǔ)句來(lái)控制程序結(jié)構(gòu),以提高代碼率。除以上兩點(diǎn)外,其它因素也會(huì)對(duì)代碼率產(chǎn)生影響,例如:是否用寄存器傳遞參數(shù) 即NOAREGS選項(xiàng)是否有是否包括調(diào)試信息:即DEBUG選項(xiàng)是否包括擴(kuò)展的調(diào)試信息:即BJECTEXTEND

          第八章 dScope for Windows使用詳解

          第一節(jié) 概述

          1. 主窗口(Mainframe Window)

          可設(shè)置其它各種調(diào)試窗口,設(shè)置斷點(diǎn)、觀察點(diǎn),修改地址空間,加載文件等等;

          2. 調(diào)試窗口(DEBUG Window)

          支持用戶程序的各種顯示方式,可連續(xù)運(yùn)行,單步運(yùn)行用戶程序,并可在線 匯編;

          3. 命令窗口(Command Window)

          支持命令行的輸入;

          4. 觀察窗口(Watch Window)

          可設(shè)置所要觀察的變量、表達(dá)式等;

          5. 寄存器窗口(Registe Window)

          顯示內(nèi)部寄存器的內(nèi)容,程序運(yùn)行次數(shù)等;

          6. 串口窗口(Serical Windows)

          顯示串口接收和發(fā)送的數(shù)據(jù);

          7. 性能分析窗口

          顯示所要觀察的各程序段占用CPU的空間;

          8. 內(nèi)存窗口(Memory Window)

          顯示所選擇的內(nèi)存中的數(shù)據(jù);

          9. 符號(hào)瀏覽窗口(Symbol Browser Window)

          顯示各種符號(hào)名稱,包括專有符號(hào),用戶自定義符號(hào)(函數(shù)名、變量、標(biāo)號(hào))等;

          10. 調(diào)用線窗口(Call-Stack Window)

          動(dòng)態(tài)顯示當(dāng)前執(zhí)行的程序段的函數(shù)調(diào)用關(guān)系;

          11. 代碼覆蓋窗口

          提供當(dāng)前模塊內(nèi)各程序段中被執(zhí)行代碼的比率;。

          12. 外圍設(shè)備窗口(peripherals)

          可顯示I/O口,定時(shí)器,中斷,串口等外圍設(shè)備狀態(tài);

          第二節(jié) dScope for Windows基本操作

          1. 指定初始化文件

          在uVision的Option菜單dScope Debugger中指定dScope的初始化文件,用uVision的RUN啟動(dòng)dScope將自動(dòng)加載此初始化文件,自動(dòng)執(zhí)行其中命令;下面是一個(gè)例子,可以看出調(diào)入一個(gè)調(diào)試代碼的過(guò)程。Ds51.ini:load 8051.dllload testslog>>test.logxtal=11.0592define button "go to main","g,main"ws RevCounterws rm.rg,mainPA RESETPA serialPA timer0

          2. 觀察變量

          方法1:命令行WS expression [, numberbase ] [ LINE ]其中numberbase為顯示數(shù)制,10對(duì)應(yīng)10進(jìn)制,16對(duì)應(yīng)16進(jìn)制,缺省為16進(jìn)制。LINE為單行顯示,缺省為多行顯示。方法2:setup->Watchpoints,在對(duì)話框中輸入變量

          3. 顯示RAM的值

          d i(x,d):起始地址,終止地址d 變量名

          4. 觀察堆棧

          View->Call-stack->Show invocation,可以跟蹤調(diào)用過(guò)程;

          5. 中斷處理程序調(diào)試

          在裝入8051.dll后,在dScope的主菜單中將增加Peripherial,其有4個(gè)字菜單:I/0 port:Pi端口狀態(tài)Interrupt:中斷設(shè)置Timer:定時(shí)器中斷狀態(tài)Serial:串口中斷狀態(tài)設(shè)置相應(yīng)的中斷請(qǐng)求標(biāo)志位即可產(chǎn)生中斷。

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

          PA用來(lái)分析一段代碼執(zhí)行占用CPU的百分比。定義:命令行 PA func_name

          第三節(jié) dScope for Windows命令文件的編制

          dScope除了用命令行的方式進(jìn)行調(diào)試以外,還可將各種調(diào)試命令匯集于一個(gè)調(diào)試文件中,然后調(diào)用該文件,就可達(dá)到自動(dòng)測(cè)試用戶源代碼的目的。dScope的命令文件支持C/PL/M的格式,因而編制調(diào)試命令文件與編制C語(yǔ)言程序有些類似。

          1. 地址空間及地址空間類型

          (1) 地址空間分段

          dScope提供的最大可用空間為16M,實(shí)際上我們只用以下三段:① 內(nèi)部數(shù)據(jù)空間段(0X00段或D段)0X00:0X0000~0X00:0XFFFF(對(duì)MSC51而言為0X00:0X00FF)② 外部數(shù)據(jù)空間段(0X01段式或X段)0X01:0X0000~0X01~0XFFFF③ 程序空間段(0XFF段或C段)0XFF:0X0000~0XFF:0XFFFF

          (2) 地址空間類型

          C:代碼空間D:內(nèi)部直接尋址空間I: 內(nèi)部間接尋址空間X:外部數(shù)據(jù)空間B:位尋址空間P:I/O口EB:擴(kuò)展的位尋址空間(MCS251專有)ED:擴(kuò)展的數(shù)據(jù)空間(MCS251專有)CO:常數(shù)空間(MCS251專有)HC:正常數(shù)空間(MCS251專有)

          2. 常量

          dScope支持十六進(jìn)制、八進(jìn)制、十進(jìn)制、二進(jìn)制常數(shù),其后綴分別為H、Q(O)、T(或無(wú))、Y;dScope不區(qū)分常量的大、小寫。

          (1) 整型常量

          分為整型(int),無(wú)符號(hào)整型(uint,00rd),長(zhǎng)整型(long),無(wú)符號(hào)長(zhǎng)整型(Wlong、Word)。

          (2) 浮點(diǎn)型常量

          與ANSI C相同。

          (3) 字符串常量

          與ANSI C相同

          (4) 字符常量

          分為字符型(Char)和無(wú)符號(hào)字符型(Uchar)一種。

          (5) 行號(hào)常數(shù)

          指用戶程序中的行號(hào),實(shí)際上是個(gè)地址

          (6) 位常量(Bit):

          0和1

          (7) 地址常數(shù)

          地址常數(shù)的種類很多,地址常數(shù)不同于行號(hào)常數(shù),行號(hào)常數(shù)就是一個(gè)地址,而地址數(shù)被引用時(shí),實(shí)際上是取該地址中的數(shù)據(jù)。C:代碼地址常數(shù),如C:0X0012或0XFF:0X0012D:內(nèi)部直接尋址地址常數(shù),如D:0X0068或0X00:0X0068I:內(nèi)部間按尋址地址常數(shù),如I:0X0010或0X00:0X0010X:外部數(shù)據(jù)空間地址常數(shù),如X:0X0028或0X01:0X0028B:位地址常數(shù),如B:0X20或B:0X24.0EB:擴(kuò)展的位地址常數(shù)(MCS251專有), ED:擴(kuò)展的數(shù)據(jù)空間地址常數(shù)(MCS251專有)CO:常數(shù)空間地址常數(shù)(MCS251專有)HC:正常數(shù)空間地址常數(shù)(MCS251專有)

          (8) 標(biāo)識(shí)符常量

          即用戶源程序中的標(biāo)號(hào)、函數(shù)名等,實(shí)際上代表某一地址。

          (9) 用戶源程序中定義的常數(shù)

          3. 變量

          dScope所支持的變量名或標(biāo)識(shí)符最多可由31個(gè)字符組成,第一個(gè)字母為A~Z,a~z,下劃線或問(wèn)號(hào),后續(xù)字符可為字母、數(shù)字、下劃線和問(wèn)號(hào)。除CPU變量和系統(tǒng)變量外,dScope不支持全局變量,但可視“define”命令定義的變量為全局變量。Dscope所, 支持的變量分為以下幾種(變量名稱不區(qū)分大、小寫),支持類型轉(zhuǎn)換:

          (1) 整型變量

          分為整型變量(int)、無(wú)符號(hào)整型變量(uint/word),長(zhǎng)整型(Long) 、無(wú)符號(hào)長(zhǎng)整型(Ulong/dword)。

          (2) 浮點(diǎn)型變量(float)

          與ANSI C相同。

          (3) 字符型變量L

          分為字符型(char)變量和無(wú)符號(hào)字符型(Uchar)

          (4) 位變量(Bit)

          (5) 系統(tǒng)變量

          dScope自己定義了一系列內(nèi)部變量,用戶可對(duì)這些變量進(jìn)行讀或讀/寫操作, 可被用戶自定義數(shù)所引用。a. Cycles (Read Only)32位變量(Ulong),指示當(dāng)前程序執(zhí)行已花費(fèi)的指令周期(cycle)。b. Ramsize(R/W)16位變量(Uint),指示內(nèi)部可直接尋址的數(shù)據(jù)空間大小。c. Radix(R/N)8位變量(Uchar),決定輸出的數(shù)制Radix=0X0A (10進(jìn)制),Radix=0X10 (16進(jìn)制)d. -IIP-(R/W)8位變量(Uchar),指示當(dāng)前的中斷嵌套數(shù)目。e. $ (R/W)32位變量(Ulong),指出PC值,通過(guò)對(duì)其進(jìn)行寫操作,可改變程序執(zhí)行的流程。f. Itrace (R/W)8位變量(Uchar),決定是否對(duì)程序運(yùn)行情況進(jìn)行記錄 Itrace=1,使能記錄操作 Itrace=0,根本上記錄操作g. __Break__(R/W)8位變量(Uchar) __Break__=1,中止程序的運(yùn)行h. __Mode__和__Frame size__是MCS 251專有的變量。

          (6) CPU變量

          即R0~R7、A、C(位變量)、B、DPTR及特殊功能寄存器變量,對(duì)這些變量均可進(jìn)行讀、寫操作。

          (7) 用戶源程序中定義的變量、數(shù)組、結(jié)構(gòu)等

          4. 運(yùn)算符

          dScope支持ANSI C的運(yùn)算符,包括算術(shù)運(yùn)算符,邏輯運(yùn)算符,關(guān)系運(yùn)算符。

          5. 表達(dá)式

          以運(yùn)算符將dScope所支持的常量、變量、函數(shù)等連接在一起,就構(gòu)成了dScope的表達(dá)式。

          6. 數(shù)組

          dScope不支持在命令文件中定義數(shù)組,但可引用用戶程序中的數(shù)組,引用方式如同C。

          7. 結(jié)構(gòu)和聯(lián)合

          dScope不支持在命令文件中定義結(jié)構(gòu)和聯(lián)合,但可引用用戶程序中的結(jié)構(gòu)和聯(lián)合,引用方式如同C,但如要輸出整個(gè)結(jié)構(gòu)或聯(lián)合的結(jié)果,就要用命令“OBJ”。

          8. 指針:

          不可自定義指針,但支持用戶源程序中的指針變量。

          9. dScope命令語(yǔ)句

          dScope提供了一系列調(diào)試命令。在命令文件中,dScope只支持這些語(yǔ)句及前述定義的表達(dá)式,C語(yǔ)言的語(yǔ)句均不被支持,但在命令文件所包含的用戶自定義函數(shù)(非用戶源程序中的函數(shù))中支持C語(yǔ)句,但用戶自定義函數(shù)中同樣不支持?jǐn)?shù)組、結(jié)構(gòu)、聯(lián)合和指針。

          (1) ASM

          在線匯編命令,格式如下:ASM C:0Xnnnn (或標(biāo)號(hào));設(shè)定插入匯編指令的地址ASM 匯編指令A(yù)SM 匯編指令插入完畢后,在debug窗口內(nèi)選擇“Assemble->Assemble”完成編譯。

          (2) Assign

          串行口分配指令,格式如下:Assign channeloutreg對(duì)MCS51為:Assign Win Soot但目前的dScope版本并未提供完整串口窗口功能。

          (3) Define

          用戶自定義變量指令,格式如下:Define <類型> <變量名>類型一為如前所述的變量類型,Define指令定義的變量可能為全局變量,可為用戶自定義函數(shù)所引用。

          (4) Display

          內(nèi)存顯示命令,格式如下二:D 起始地址,結(jié)束地址地址如前所述的地址常數(shù),標(biāo)識(shí)符常量。

          (5) Enter

          內(nèi)存修改指令,格式如下:E 類型地址=表達(dá)式 [表達(dá)式2],[……]類型如前所述,地址如前所述的地址常數(shù)。表達(dá)式如前所述,但如果是函數(shù)名稱(含標(biāo)號(hào)、指針變量),則關(guān)鍵字E→EP

          (6) Map/Reset map

          Map為內(nèi)存段修改指令,Reset map將內(nèi)存段復(fù)位或缺省值。

          (7) Object

          用以引用用戶源程序中的結(jié)構(gòu)(聯(lián)合)、數(shù)組、格式如下:Obj表達(dá)式 [n,],[Line]表達(dá)式為用戶源程序中的數(shù)組,結(jié)構(gòu)(聯(lián)合)名稱。當(dāng)Line缺省時(shí),數(shù)目、結(jié)構(gòu)(聯(lián)合)的內(nèi)容按n行輸出;如有Line,則單行輸出。

          (8) U

          反匯編命令,格式如下: U [地址]地址包括地址常 數(shù)及標(biāo)識(shí)符常量,指明反匯編的起始地址。

          (9) WK

          觀察點(diǎn)刪除命令,格式如下: WK n1[n2 ],[……] ;刪除指定的觀察點(diǎn),n為字符型,整型 常數(shù) WK * ;刪除所有的觀察點(diǎn)

          (10) WS

          觀察點(diǎn)設(shè)置命令,格式如下:WS 表達(dá)式[,n][LINE]關(guān)鍵字LINE存在時(shí),觀察點(diǎn)表達(dá)式單行輸出LINE缺省時(shí),觀察點(diǎn)表達(dá)式n行輸出。

          (11) G

          連續(xù)運(yùn)行命令,格式如下: G [起始地址],[終止地址]地址為標(biāo)識(shí)符常量或地址常數(shù),地址缺省時(shí),為連續(xù)運(yùn)行。

          (12) T/P

          單步運(yùn)行指令,格式如下: T/P n ;n指至單行運(yùn)行的步數(shù),P指給用戶當(dāng)調(diào)用某函數(shù)時(shí),把它作為一步處理,并不進(jìn)入該函數(shù)運(yùn)行。

          (13) PA

          性能分析操作指令,其分以下幾種:PA顯示當(dāng)前所設(shè)置的性能分析程度段PA Kill *刪除當(dāng)前所設(shè)置的所有性能分析程序段PA Kill n1 [,n2],[……]刪除指定的性能分析程序段PA 地址范圍設(shè)置性能分析程序段,地址范圍可以起始地址和結(jié)束地址的方式給出,也可給出函數(shù)名,行號(hào)范圍。PA Reset復(fù)位性能分析窗口(PA Windows),清除所有的記錄。

          (14) BD

          斷點(diǎn)失效命令,格式如下:BD n1 [,n2],[,……] ;disable指定的斷點(diǎn)DB * ;disable所有的斷點(diǎn)

          (15) BE

          斷點(diǎn)使能命令,格式如下:BE M [,n2],[,……] ;使能指定的斷點(diǎn)BE * ;使能所有的斷點(diǎn)

          (16) BK

          斷點(diǎn)刪除指令,格式如下:BK M[,n2],[,……] ;刪除指定的斷點(diǎn)BK * ;刪除所有的斷點(diǎn)

          (17) BL

          斷點(diǎn)顯示指令,顯示所有被定義的斷點(diǎn)。

          (18) BS

          斷點(diǎn)定義指令,dScope支持多達(dá)40個(gè)斷點(diǎn),具體格式如下:a.BS 表達(dá)式[,count] [,“cmd”]count:經(jīng)過(guò)該斷點(diǎn)的次數(shù) [選項(xiàng)]“cmd”:斷點(diǎn)到達(dá)后附帶執(zhí)行的dScope命令(連項(xiàng))表達(dá)式一個(gè)條件表達(dá)式,此時(shí)該斷點(diǎn)稱為條件斷點(diǎn)(運(yùn)算符為&.&&,<<=>,>=,= =,!=)BS READ 表達(dá)式 [,count] [,“cmd”]BS WRITE 表達(dá)式 [,count] [“cmd”]BS READWRITE 表達(dá)式 [,count] [,“cmd”]以上三種斷點(diǎn)稱訪問(wèn)式(Access斷點(diǎn)),當(dāng)某一址或變量被訪問(wèn)(R/W)或某些值被讀寫時(shí),程序被中斷。

          (19) Define button

          圖標(biāo)定義指令,用于當(dāng)窗口(Toolbox)

          (20) !

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

          (21) Include

          文件包含命令,格式如下:Include [路徑] 文件名dScope支持以文件包含的方式調(diào)入并執(zhí)行調(diào)試命令文件,用戶自定義函數(shù)文件,調(diào)試命令文件可以有后綴,也可無(wú)后綴。

          (22) Load

          加載命令,格式如下:Load [路徑] 文件名 Load指令能夠加載的文件必須具有以下格式之一。Intel Hex/Hex 386格式Intel Object (OMF_51) 格式Intel Object (OMF-251) 格式dScope的CPU驅(qū)動(dòng)文件(.DLL)

          (23) LOG

          Command Window存盤指令,用于將Command Windows中的內(nèi)容輸出到指定的文件中,格式如下:LOG > [路徑]文件名 ;創(chuàng)建一個(gè)新文件LOG >> [路徑]文件名 ;將Command Windows的內(nèi)容輸出到某個(gè)已 存在的文件中。LOG OFF 完成輸出操作并開閉該文件LOG指令只將LOG>或LOG>>與LOG OFF指令之間的操作命令存入該指定文件。

          (24) Reset

          復(fù)位指令,具體格式如下:Reset ;執(zhí)行dScope的復(fù)位Reset Map ;復(fù)位外部數(shù)據(jù)空間Reset Var ;復(fù)位SET指令定義的變量

          (25) Save

          該指令將一段內(nèi)存映象以19EX386/HEX的格式存盤,具體格式如下:Save 路徑 文件名:地址1、地址2地址1、地址2指所要保存的空間范圍,既可是標(biāo)識(shí)符,也可是址常數(shù)。

          (26) SET

          該指令回來(lái)定義dScope目標(biāo)代碼預(yù)定義變量的含義,這些預(yù)定義變量包括以下二種:SRC ;指出所在的路徑F1~F12;對(duì)應(yīng)于鍵盤上的12個(gè)功能鍵,定義這些功能鍵的 含義。SET指令的格式為:SET 變量=“字符串”SET 變量

          10. 函數(shù)

          dScope支持三種函數(shù),即dScope預(yù)定義函數(shù),用戶自定義函數(shù)和信號(hào)函數(shù),分別詳述如下:

          (1) dScope預(yù)定義函數(shù)

          dScope號(hào)提供8個(gè)預(yù)定義函數(shù)(可視為dScope的庫(kù)函數(shù))①Void Printf(“String”,輸出表列)屏幕打印函數(shù),與ANSI C的Printf ( ) 函數(shù)相同②Void exec(“Command__String”)Command__String為一有效的命令字符串,此函數(shù)用于在運(yùn)行用戶自定義函數(shù)的過(guò)程中執(zhí)行dScope命令,這個(gè)函數(shù)提供了一個(gè)很重要的編制測(cè)試命令文件的方法。③int getint(“Prompt__String”);從鍵盤輸入一個(gè)整數(shù)int getlong (“Prompt__String”);從鍵盤輸入一個(gè)長(zhǎng)整數(shù)float getfloat (“Prompt__String”);從鍵盤輸入一個(gè)浮點(diǎn)數(shù)以上這三個(gè)函數(shù)被執(zhí)行時(shí),dScope會(huì)彈出一個(gè)dialog box等待用戶輸入數(shù)據(jù),其標(biāo)題欄上是“Prompt__String”,利用這個(gè)函數(shù),不僅可以為變量賦值,也可使用戶得以看清前一階段的測(cè)試結(jié)果。④int rand (int seed) 該函數(shù)會(huì)輸出一個(gè)隨機(jī)數(shù)(-32768~32768)⑤Void memeset (ulorg start , ulong end ,uchar val) 該函數(shù)用于給地址范圍(Start__end)內(nèi)的內(nèi)存賦值(Val)⑥Void twatch (Long cycles)定時(shí)函數(shù),時(shí)間由(Long cycles)決定,它是以指令周期計(jì)數(shù)的,它也 用于產(chǎn)生一個(gè)信號(hào)波形,該函數(shù)必須用于信號(hào)函數(shù)中。

          (2) 用戶自定義函數(shù)

          這類函數(shù)不同于用戶源程序中的數(shù)函,其定義格式為Func 返回類型 函數(shù)名(參數(shù)序列) { 語(yǔ)句}返回類型如前所述的變量類型用戶自定義函數(shù)中的語(yǔ)句與ANSI C相似,只是不支持?jǐn)?shù)組結(jié)構(gòu)、聯(lián)合、指針,可引用dScope系統(tǒng)變量,define語(yǔ)句定義的變量和用戶源程序變量,不支持dScope命令,如想在函數(shù)中執(zhí)行dScope命令,要借助于exec(“Command__String”)函數(shù),可引用dScope預(yù)定義的函數(shù)(除了twatch ( )函數(shù)),不支持ANSI C的庫(kù)函數(shù)。

          (3) 信號(hào)函數(shù)

          用于產(chǎn)生具有某一波形的信號(hào),定義格式為:Signal返回類型函數(shù)名(參數(shù)長(zhǎng)列){ 語(yǔ)句 }信號(hào)函數(shù)主要是利用twatch ( )函數(shù),目前dScope版本在提供這一功能上面還有一定問(wèn)題。

          (4) dScope函數(shù)與ANSI函數(shù)的區(qū)別

          ① 不支持條件匯編② 不支持頭文件③ 無(wú)變量的初始化④ 不支持?jǐn)?shù)組、結(jié)構(gòu)、指針⑤ 調(diào)用方式不同,自定義函數(shù)和信號(hào)函數(shù)首先要包含一個(gè)函數(shù)文件之中,然而在測(cè)試命令文件中以Inclule指令調(diào)用該函數(shù)文件,最后才能以函數(shù)名調(diào)用之。⑥ 函數(shù)調(diào)用只支持傳值方式。



          關(guān)鍵詞: KeilC51使用詳

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();