【正文】
(2) 浮點(diǎn)型常量 與ANSI C相同。1. 地址空間及地址空間類型(1) 地址空間分段 dScope提供的最大可用空間為16M,實(shí)際上我們只用以下三段:① 內(nèi)部數(shù)據(jù)空間段(0X00段或D段)0X00:0X0000~0X00:0XFFFF(對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(或無)、Y;dScope不區(qū)分常量的大、小寫。定義: 命令行 PA func_name第三節(jié) dScope for Windows命令文件的編制 dScope除了用命令行的方式進(jìn)行調(diào)試以外,還可將各種調(diào)試命令匯集于一個(gè)調(diào)試文件中,然后調(diào)用該文件,就可達(dá)到自動(dòng)測試用戶源代碼的目的。方法2:setupWatchpoints,在對話框中輸入變量3. 顯示RAM的值d i(x,d):起始地址,終止地址d 變量名4. 觀察堆棧ViewCallstackShow invocation,可以跟蹤調(diào)用過程;5. 中斷處理程序調(diào)試,在dScope的主菜單中將增加Peripherial,其有4個(gè)字菜單:I/0 port:Pi端口狀態(tài)Interrupt:中斷設(shè)置Timer:定時(shí)器中斷狀態(tài)Serial:串口中斷狀態(tài)設(shè)置相應(yīng)的中斷請求標(biāo)志位即可產(chǎn)生中斷。:load load testslogxtal=define button go to main,g,mainws RevCounterws g,mainPA RESETPA serialPA timer02. 觀察變量方法1:命令行WS expression [, numberbase ] [ LINE ]其中numberbase為顯示數(shù)制,10對應(yīng)10進(jìn)制,16對應(yīng)16進(jìn)制,缺省為16進(jìn)制。除以上兩點(diǎn)外,其它因素也會(huì)對代碼率產(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í)行代碼的比率;。 再如if( ),while( ),等語句也是代碼相對較低的語句,但編譯以后比switchcase要高得多。同樣的功能,如果結(jié)構(gòu)越復(fù)雜,其所涉及的操作、變量、功能模塊函數(shù)等就越多,較之結(jié)構(gòu)性好,代碼簡單的程序其代碼率自然就低得多。即使選擇了large模式,對一些常用的局部的或者可放于內(nèi)存中的變量,最好放于內(nèi)存中,以盡量提高程序的代碼率。例如:一個(gè)整形變量i,如放于內(nèi)存18H、19H空間,則++i的操作編譯成四條語句:INC 0x19MOV A,0x19JNZ 0x272DINC 0x180x272D:而如果放于外存空間0000H、0001H則++i的操作編譯成九條語句:MOV DPTR,0001MOVX A, DPTRINC AMOVX DPTR,AJNz 5MOV OPTR,0000MOVX A,DPTRINC AMOVX DPTR,A就匯編之后的語句而言,對外部存儲(chǔ)器的操作較內(nèi)部存儲(chǔ)器操作代碼率要低得多,生成的語句為內(nèi)存的兩倍以上,而程序中有大量的這種操作,可見存儲(chǔ)模式對代碼率的響了。如還需用Translate則只能多個(gè)文件分別編譯,然后連接。(10) 如程序有誤修改源代碼后不必再translate或link了,只要一步Amake即可。(8) ,單擊“translate”,如無語法錯(cuò),再擊“l(fā)ink”,則Hex文件生成。(6) 。(4) 在setup_C51中輸出DB OE。(2) 用cd改換project目錄至hello目錄。第二節(jié) Ishell for Dos使用步驟(1) 進(jìn)入Ishell 用Setup editer選擇編輯器。(7) project選Build project,看是否有語法錯(cuò)誤,若無則生成HEX文件,若有則修改源文件后重復(fù)以上部分步驟。(5) option_dscope Debugger選中hello\: “l(fā)oad…\…\BIN\ map 0, 0xffff”否則修改。 這時(shí)該project已是打開狀態(tài),或用open project打開已存在的project。(2) file_save或工具欄將文件存盤。 printf(“Hello,world \n”)。 Tri=1。 int strspn(char *string,char *set);第六章 Keil C51例子: Hello位于\C51\excmples\Hello\目錄,其功能是向串口輸出“Hello,world”整個(gè)程序如下:#pragma DB OE CDindule includevoid main(void) { SCOn=0x50。 char *strrpbrk (char *string,char *set)。 int strpos (const char *string,char c)。 char strncpy (char *dest,char *src,int len)。 char *strncat (char 8dest,char *src,int len)。 int strcspn(char *src,char * set)。 char strcmp (char *string1,char *string2)。 char *strcat (char *dest,char *src)。 void *memmove (void *dest,void *src,int len)。 char memcmp(void *buf1,void *buf2,int len)。 void srand (int seed);5. void *memccpy (void *dest,void *src,char c,int len)。 int rand(void)。 void free(void xdata *p); void init_mempool(void *data *p,unsigned int size)。 long atol(void * string)。 void vsprintf(char *buffer,const char * fmtstr,char * argptr);4. float atof(void * string)。 char ungetchar(char c)。 int scanf(const char * fmtstr.[,argument]…); int sprintf(char * buffer,const char *fmtstr[。 char putchar(char c)。5. 輸入輸出流函數(shù),位于“”中 流函數(shù)通8051的串口或用戶定義的I/O口讀寫數(shù)據(jù),缺省為8051串口,如要修改,比如改為LCD顯示,然后在庫中替換它們即可。2. 該文件中實(shí)際只定義了幾個(gè)宏,以確定各存儲(chǔ)空間的絕對地址。如不說明,下面談到的庫函數(shù)均指非本征庫函數(shù)。_chkfloat_: 測試并返回源點(diǎn)數(shù)狀態(tài)。第一節(jié) 本征庫函數(shù)(intrinsic routines)和非本征證庫函數(shù) C51提供的本征函數(shù)是指編譯時(shí)直接將固定的代碼插入當(dāng)前行,而不是用ACALL和LCALL語句來實(shí)現(xiàn),這樣就大大提供了函數(shù)訪問的效率,而非本征函數(shù)則必須由ACALL及LCALL調(diào)用。OPTIMIZE(SIZE)AK OPTIMIZE(speed)提供6級(jí)優(yōu)化功能,缺省為: OPTIMIZE(6,SPEED)。NOAREGS:不使用絕對寄存器訪問,程序代碼與寄存器段獨(dú)立。具體六級(jí)優(yōu)化的內(nèi)容可參考幫助。2. 程序優(yōu)化 C51編譯器是一個(gè)具有優(yōu)化功能的編譯器,它共提供六級(jí)優(yōu)化功能。4. 其它文件 C751適用的函數(shù),可參考源代碼。缺?。簗XOFF是流控標(biāo)志,換行符“\*n”自動(dòng)轉(zhuǎn)化為回車/換行“\r\n”。 set to 1 if pdata object are used.PPAGE EQU 0 。 in the linker invocation.。 The following EQU statements define the xdata page used for pdata。 Page Definition for Using the Compact Model with 64 KByte xdata RAM。 set top of stack to highest location+1.。 Stack Space for reentrant functions in the COMPACT model. PBPSTACK EQU 0 。 set top of stack to highest location+1.。 Stack Space for reentrant functions in the LARGE model. XBPSTACK EQU 0 。 set top of stack to highest location+1.。 Stack Space for reentrant functions in the SMALL model.IBPSTACK EQU 0 。 functions and initialized it:。 runtime routines must be set to zero.。 Notes: The IDATA space overlaps physically the DATA and BIT areas of the。 the length of PDATA memory in bytes.。PDATASTART EQU 0H 。 the absolute startaddress of XDATA memoryXDATALEN EQU 0H 。 the length of IDATA memory in bytes.。 。 at processor reset can be defined:。 To link the modified file to your application use the following。 A51 。 To translate this file use A51 with the following invocation:。 : This code is executed after processor reset.。 Copyright KEIL ELEKTRONIK GmbH 1990。缺省為0IBPSTACKTOP 指定小模式重入堆棧頂部地址XBPSTACK 是否大模式重入堆棧指