GOODKeil工程文件的建立設(shè)置與目標(biāo)文件的獲得_第1頁
GOODKeil工程文件的建立設(shè)置與目標(biāo)文件的獲得_第2頁
GOODKeil工程文件的建立設(shè)置與目標(biāo)文件的獲得_第3頁
GOODKeil工程文件的建立設(shè)置與目標(biāo)文件的獲得_第4頁
GOODKeil工程文件的建立設(shè)置與目標(biāo)文件的獲得_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實例教程(一)Keil工程建立及設(shè)置作者:教程來源:本站原創(chuàng)點擊數(shù):1700 更新時間:2008-7-23匕“Keil工程文件的建立、設(shè)置與目標(biāo)文件的獲得單片機(jī)開發(fā)中除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要 變?yōu)镃PU可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目 前已極少使用手工匯編的方法了。機(jī)器匯編是通過匯編軟件將源程序變?yōu)闄C(jī)器碼, 用于MCS-5單片機(jī)的匯編軟件有早期的A51,隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,從 普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機(jī)的開發(fā)軟件也在不斷發(fā)展, Keil軟件是目前最流行開發(fā) MCS-5系列單片機(jī)的軟件,這從近年來各仿真

2、機(jī)廠商 紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、 庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision )將這些部份組合在一起。運行 Keil軟件需要Pentium或以上的CPU 16MB或更多 RAM 20M以上空閑的硬盤空間、 WIN98 NT WIN2000 WINXP等操作 系統(tǒng)。掌握這一軟件的使用對于使用51系列單片機(jī)的愛好者來說是十分必要的,如 果你使用C語言編程,那么Keil幾乎就是你的不二之選(目前在國內(nèi)你只能買到 該軟件、而你買的仿真機(jī)也很可能只支持該軟件),即使不使用C語言而僅用匯編 語言編程,其方

3、便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會令你事半功倍。我們將通過一些實例來學(xué)習(xí) Keil軟件的使用,在這一部份我們將學(xué)習(xí)如何輸入 源程序,建立工程、對工程進(jìn)行詳細(xì)的設(shè)置,以及如何將源程序變?yōu)槟繕?biāo)代碼。圖 1所示電路圖使用89C51單片機(jī)作為主芯片,這種單片機(jī)性屬于MCS-5系列,其內(nèi)部 有4K的FLASH ROM可以反復(fù)擦寫,非常適于做實驗。89C51的 P1引腳上接8個發(fā)光 二極管,引腳上接4個按鈕開關(guān),我們的第一個任務(wù)是讓接在 P1引腳上的發(fā)光二極 管依次循環(huán)點亮。一、Keil工程的建立首先啟動Keil軟件的集成開發(fā)環(huán)境,這里假設(shè)讀者已正確安裝了該軟件, 可以 從桌面上直接雙擊uVis

4、ion的圖標(biāo)以啟動該軟件。UVison啟動后,程序窗口的左邊有一個工程管理窗口,該窗口有3個標(biāo)簽,分別是Files、Regs和Books,這三個標(biāo)簽頁分別顯示當(dāng)前項目的文件結(jié)構(gòu)、CPU勺寄存器及部份特殊功能寄存器的值(調(diào)試時才出現(xiàn))和所選CPU勺附加說明文件,如果是第一次啟動Keil,那么這三個標(biāo)簽頁全是空的。圖1簡單的鍵盤、顯示板1、源文件的建立使用菜單“ File -NeW或者點擊工具欄的新建文件按鈕,即可在項目窗口的右側(cè)打開一個新的文本編緝窗口,在該窗口中輸入以下匯編語言源程序,例1:MOV A,#OFEHMAIN:MOVP1 ,ARLALCALLDELAYAJMPMAINDELAY:M

5、OVR7,#255D1:MOVR6,#255DJNZR6,$DJNZR7,D1RETEND保存該文件,注意必須加上擴(kuò)展名(匯編語言源程序一般用asm或 a51為擴(kuò)展名), 這里假定將文件保存為。需要說明的是,源文件就是一般的文本文件,不一定使用Keil軟件編寫,可以使用任意文本編緝器編寫,而且,Keil的編緝器對漢字的支持不好,建議使用UltraEdit之類的編緝軟件進(jìn)行源程序的輸入。2、建立工程文件在項目開發(fā)中,并不是僅有一個源程序就行了,還要為這個項目選擇CPU( Keil支持?jǐn)?shù)百種CPU而這些CPU的特性并不完全相同),確定編譯、匯編、連接的參數(shù), 指定調(diào)試的方式, 有一些項目還會有多個

6、文件組成等,為管理和使用方便, Keil 使 用工程( Project )這一概念,將這些參數(shù)設(shè)置和所需的所有文件都加在一個工程 中,只能對工程而不能對單一的源程序進(jìn)行編譯(匯編)和連接等操作,下面我們 就一步一步地來建立工程。圖3加入文件圖2選擇目標(biāo) CPU點擊“ Project -New Project”菜單,出現(xiàn)一個對話框,要求給將要建立的 工程起一個名字,你可以在編緝框中輸入一個名字(設(shè)為exam。,不需要擴(kuò)展名。點擊“保存”按鈕, 出現(xiàn)第二個對話框, 如圖2所示,這個對話框要求選擇目標(biāo) CPU (即你所用芯片的型號),Keil支持的CPU多,我們選擇Atmel公司的89C51芯片。

7、點擊ATME前面的“+”號,展開該層,點擊其中的89C51,然后再點擊“確定”按 鈕,回到主界面,此時,在工程窗口的文件頁中, 出現(xiàn)了“ Target 1”,前面有“ +” 號,點擊“ +”號展開,可以看到下一層的“ Source GroupT,這時的工程還是一 個空的工程,里面什么文件也沒有,需要手動把剛才編寫好的源程序加入,點擊 “Source Group1 ”使其反白顯示,然后,點擊鼠標(biāo)右鍵,出現(xiàn)一個下拉菜單,如圖3所示。選中其中的“ Add file to Group ” Source Group1 ”,出現(xiàn)一個對話框, 要求尋找源文件, 注意,該對話框下面的“文件類型”默認(rèn)為 Cso

8、urce file(*.c) , 也就是以C為擴(kuò)展名的文件,而我們的文件是以 asm為擴(kuò)展名的,所以在列表框中 找不到,要將文件類型改掉,點擊對話框中“文件類型”后的下拉列表,找到并選中“ Asm Source File(*a51,*asm),這樣,在列表框中就可以找到文件了。ihdcutV endor : Atm elDevice: 89C51Family: IICS-51b普 gDe scripti qhi:I Sai lii l-ilfljlU ;ill*yleir 零遷2備!3i IXS:89C5285CE139CZ0518SC405139C558SF51ar?F51CS7F52 39

9、C1051 39CL051UAtm el87F5LC;CS1 1 ull S l 匚MOCullei wi th r;Lt Lvsl Pi 32 I/O lints 2 Tifftsr/Courtt srs? E lit terr up I; saurtfss 4 K FlAh Mm12B Bvt nuhin R iMI 確定 I 取消 ;_j Tarftt 1Select Devic for Tfirgftt I fir get I,Ofti ms for Group f Sour c Group V|Add Jilas to Group Source Croup LJXargets Gro

10、ups FilesR ano vs Group Sour m Group 1 and itm FilesOjen F:Lt-|g| Rebu.ild target iXj 鈕iL坎 targetTranslate File 基 Step bmldleyi qe f pf Target Tajr耳wt 雙擊文件,將文件加入項目,注意,在文件加入項目后,該對話框并不消失, 等待繼續(xù)加入其它文件,但初學(xué)時常會誤認(rèn)為操作沒有成功而再次雙擊同一文件, 這時會出現(xiàn)如圖4所示的對話框,提示你所選文件已在列表中,此時應(yīng)點擊“確 定”,返回前一對話框,然后點擊“ Close”即可返回主界面,返回后,點擊“ So

11、urce Group 1 ”前的加號,會發(fā)現(xiàn)文件已在其中。雙擊文件名,即打開該源程序。圖4】、工程的詳細(xì)設(shè)置工程建立好以后,還要對工程進(jìn)行進(jìn)一步的設(shè)置,以滿足要求。首先點擊左邊Project窗口的Target 1,然后使用菜單“ Project -Option for target targetl ”即出現(xiàn)對工程設(shè)置的對話框,這個對話框可謂非常復(fù)雜,共 有8個頁面,要全部搞清可不容易,好在絕大部份設(shè)置項取默認(rèn)值就行了。圖5對目標(biāo)進(jìn)行設(shè)置設(shè)置對話框中的Target頁面,如圖5所示,Xtal后面的數(shù)值是晶振頻率值,默 認(rèn)值是所選目標(biāo)CPU勺最高可用頻率值,對于我們所選的AT89C5而言是24M該數(shù)

12、 值與最終產(chǎn)生的目標(biāo)代碼無關(guān),僅用于軟件模擬調(diào)試時顯示程序執(zhí)行時間。正確設(shè) 置該數(shù)值可使顯示時間與實際所用時間一致,一般將其設(shè)置成與你的硬件所用晶振頻率相同,如果沒必要了解程序執(zhí)行的時間,也可以不設(shè),這里設(shè)置為12。Target Qutjrat | Listing | C5L 股 1| SL51 Locat B151 IHisc | Delruc |Atmel 69C51廠 血。On-chip RDM JtO-OjifFF)0 cltip Code mem or0 cliipiwemorjrStr t Si ze:Opti ffiis f qi T* Tax 1*圖5Memory Model用

13、于設(shè)置RAM使用情況,有三個選擇項,Small是所有變量都在 單片機(jī)的內(nèi)部RAM中; Compact是可以使用一頁外部擴(kuò)展 RAM而Larget則是可以 使用全部外部的擴(kuò)展RAM Code Model用于設(shè)置ROh空間的使用,同樣也有三個選 擇項,即Small模式,只用低于2K的程序空間;Compact模式,單個函數(shù)的代碼量 不能超過2K,整個程序可以使用64K程序空間;Larget模式,可用全部64K空間。 Use on-chip ROM選擇項,確認(rèn)是否僅使用片內(nèi) RO(注意:選中該項并不會影響 最終生成的目標(biāo)代碼量);Operating項是操作系統(tǒng)選擇,Keil提供了兩種操作系 統(tǒng):Rtx

14、 tiny 和Rtx full ,關(guān)于操作系統(tǒng)是另外一個很大的話題了,通常我們不 使用任何操作系統(tǒng),即使用該項的默認(rèn)值:None (不使用任何操作系統(tǒng));Off Chip Code memory用以確定系統(tǒng)擴(kuò)展 ROM勺地址范圍,Off Chip xData memory 組用于 確定系統(tǒng)擴(kuò)展RAM的地址范圍,這些選擇項必須根據(jù)所用硬件來決定,由于該例是 單片應(yīng)用,未進(jìn)行任何擴(kuò)展,所以均不重新選擇,按默認(rèn)值設(shè)置。設(shè)置對話框中的OutPut頁面,如圖6所示,這里面也有多個選擇項,其中Creat Hex file用于生成可執(zhí)行代碼文件(可以用編程器寫入單片機(jī)芯片的 HEX格式文件, 文件的擴(kuò)展名為

15、.HEX),默認(rèn)情況下該項未被選中,如果要寫片做硬件實驗,就必 須選中該項,這一點是初學(xué)者易疏忽的,在此特別提醒注意。選中Debug in formation 將會產(chǎn)生調(diào)試信息,這些信息用于調(diào)試,如果需要對程序進(jìn)行調(diào)試,應(yīng)當(dāng)選中該項。 Browse in formation 是產(chǎn)生瀏覽信息,該信息可以用菜單 view-Browse來查看, 這里取默認(rèn)值。按鈕“ Select Folder for objects ”是用來選擇最終的目標(biāo)文件 所在的文件夾,默認(rèn)是與工程文件在同一個文件夾中。Nameof Executable用于指定最終生成的目標(biāo)文件的名字,默認(rèn)與工程的名字相同,這兩項一般不需要更

16、改。圖6圖6對輸出進(jìn)行控制工程設(shè)置對話框中的其它各頁面與 C51編譯選項、A51的匯編選項、BL51連接器 的連接選項等用法有關(guān),這里均取默認(rèn)值,不作任何修改。以下僅對一些有關(guān)頁面 中常用的選項作一個簡單介紹。List ing 標(biāo)簽頁用于調(diào)整生成的列表文件選項。在匯編或編譯完成后將產(chǎn)生(*st )的列表文件,在連接完成后也將產(chǎn)生(*.m51)的列表文件,該頁用于對 列表文件的內(nèi)容和形式進(jìn)行細(xì)致的調(diào)節(jié),其中比較常用的選項是“C CompileListing ”下的“ Assamble Code項,選中該項可以在列表文件中生成C語言源程序所對應(yīng)的匯編代碼。圖7代碼生成控制C51標(biāo)簽頁用于對Keil

17、的C51編譯器的編譯過程進(jìn)行控制,其中比較常用的是“Code Optimization ”組,如圖7所示,該組中Level是優(yōu)化等級,C51在對源程 序進(jìn)行編譯時,可以對代碼多至9級優(yōu)化,默認(rèn)使用第8級,一般不必修改,如果在 編譯中出現(xiàn)一些問題,可以降低優(yōu)化級別試一試。Emphasis是選擇編譯優(yōu)先方式,第一項是代碼量優(yōu)化(最終生成的代碼量小);第二項是速度優(yōu)先(最終生成的代 碼速度快);第三項是缺省。默認(rèn)的是速度優(yōu)先,可根據(jù)需要更改。I treat | Output | Li stiikf C51| K51| B151 Loztm | BL51 Mi sc |9TreprO:essor Sy

18、mbolsifia: T)define: |b: CflmmorL Lail mrginjnphasii: pavor execution speedJjCsde OptimLEitLonWurm rtf iwAiikgLevel 2Bill Io und for 1at p彳 |廠 Global gi star Col oringDfln t al solute r-egs s ter accesses心 Interrispt vct cpts at a OwOOtlO 廠 Kg ep varia-bles in. ordarR Enable AH5I integer pronotion r

19、ulIn eludePathsMi. s cControlsCompiltir control stri ngEROE DEBUG OSJZCnnEND確定|j取消j圖7設(shè)置完成后按確認(rèn)返回主界面,工程文件建立、設(shè)置完畢、編譯、連接圖9正確編譯、連接之后的結(jié)果圖8有關(guān)編譯、連接、項目設(shè)置的工具條在設(shè)置好工程后,即可進(jìn)行編譯、連接。選擇菜單Project-Build target ,對當(dāng)前工程進(jìn)行連接,如果當(dāng)前文件已修改,軟件會先對該文件進(jìn)行編譯,然后再 連接以產(chǎn)生目標(biāo)代碼;如果選擇Rebuild All target files將會對當(dāng)前工程中的所有文件重新進(jìn)行編譯然后再連接,確保最終生產(chǎn)的目

20、標(biāo)代碼是最新的,而 Tran slate.項則僅對該文件進(jìn)行編譯,不進(jìn)行連接。以上操作也可以通過工具欄按鈕直接進(jìn)行。 圖8是有關(guān)編譯、設(shè)置的工具欄按鈕, 從左到右分別是:編譯、編譯連接、全部重建、停止編譯和對工程進(jìn)行設(shè)置。麟閤闔厲除卜址云13編譯過程中的信息將出現(xiàn)在輸出窗口中的Build頁中,如果源程序中有語法錯誤,會有錯誤報告出現(xiàn),雙擊該行,可以定位到出錯的位置,對源程序反復(fù)修改之 后,最終會得到如圖9所示的結(jié)果,提示獲得了名為的文件,該文件即可被編程器 讀入并寫到芯片中,同時還產(chǎn)生了一些其它相關(guān)的文件,可被用于Keil的仿真與調(diào)試,這時可以進(jìn)入下一步調(diào)試的工作。Build target T

21、arget 11linking creating h&z file from ezaml. - Error (s) , 0 Warn in g (呂)-用訂11 R航陽斤 Cdiwinsnil 入 Find iri Files J|圖9教程錄入:平凡責(zé)任編輯:平凡上一篇教程:下一篇教程:Keil的調(diào)試命令、在線匯編與斷點設(shè)置作者:教程來源:本站原創(chuàng)點擊數(shù):2100 更新時間:2008-7-24l; tJ :上一講中我們學(xué)習(xí)了如何建立工程、匯編、連接工程,并獲得目標(biāo)代碼,但是 做到這一步僅僅代表你的源程序沒有語法錯誤,至于源程序中存在著的其它錯誤, 必須通 過調(diào)試才能發(fā)現(xiàn)并解決,事實上,除了極簡

22、單的程序以外,絕大部份的程 序都要通過反復(fù)調(diào)試才能得到正確的結(jié)果,因此,調(diào)試是軟件開發(fā)中重要的一個環(huán) 節(jié),這一 講將介紹常用的調(diào)試命令、利用在線匯編、各種設(shè)置斷點進(jìn)行程序調(diào)試 的方法,并通過實例介紹這些方法的使用。一、常用調(diào)試命令在對工程成功地進(jìn)行匯編、連接以后,按Ctrl+F5或者使用菜單 Debug-Start/Stop Debug Session即可進(jìn)入調(diào)試狀態(tài),Keil內(nèi)建了一個仿真 CPU用來模擬執(zhí)行程序,該仿真 CPU功能強(qiáng)大,可以在沒有硬件和仿真機(jī)的情況下進(jìn) 行程序的調(diào)試,下面將要學(xué)的就是該模擬調(diào)試功能。不過在學(xué)習(xí)之前必須明確,模 擬畢竟只是模擬,與真實的硬件執(zhí)行程序肯定還是有區(qū)

23、別的,其中最明顯的就是時序,軟件模擬是不可能和真實的硬件具有相同的時序的,具體的表現(xiàn)就是程序執(zhí) 行的速度和各人使用的計算機(jī)有關(guān),計算機(jī)性能越好,運行速度越快。圖1調(diào)試工具條進(jìn)入調(diào)試狀態(tài)后,界面與編緝狀態(tài)相比有明顯的變化,Debug菜單項中原來不能用的命令現(xiàn)在已可以使用了,工具欄會多出一個用于運行和調(diào)試的工具條,如圖 1所示,Debug菜單上的大部份命令可以在此找到對應(yīng)的快捷按鈕,從左到右依次是復(fù)位、運行、暫停、單步、過程單步、執(zhí)行完當(dāng)前子程序、運行到當(dāng)前行、下一狀 態(tài)、打開跟蹤、觀察跟蹤、反匯編窗口、觀察窗口、代碼作用范圍分析、1#串行窗口、內(nèi)存窗口、性能分析、工具按鈕等命令。|F a ?%L

24、1J玉圖1調(diào)試工具條圖2調(diào)試窗口學(xué) 習(xí)程序調(diào)試,必須明確兩個重要的概念,即單步執(zhí)行與全速運行。全速執(zhí)行 是指一行程序執(zhí)行完以后緊接著執(zhí)行下一行程序,中間不停止,這樣程序執(zhí)行的速 度很 快,并可以看到該段程序執(zhí)行的總體效果,即最終結(jié)果正確還是錯誤,但如 果程序有錯,則難以確認(rèn)錯誤出現(xiàn)在哪些程序行。單步執(zhí)行是每次執(zhí)行一行程序, 執(zhí)行完 該行程序以后即停止,等待命令執(zhí)行下一行程序,此時可以觀察該行程序 執(zhí)行完以后得到的結(jié)果,是否與我們寫該行程序所想要得到的結(jié)果相同,借此可以 找到程序 中問題所在。程序調(diào)試中,這兩種運行方式都要用到。使用菜單STEP或相應(yīng)的命令按鈕或使用快捷鍵 F11可以單步執(zhí)行程序

25、,使用菜 單STEP OVE或功能鍵F10可以以過程單步形式執(zhí)行命令,所謂過程單步,是指將 匯編語言中的子程序或高級語言中的函數(shù)作為一個語句來全速執(zhí)行。按下F11鍵,可以看到源程序窗口的左邊出現(xiàn)了一個黃色調(diào)試箭頭,指向源程 序的第一行,如圖2所示。每按一次F11,即執(zhí)行該箭頭所指程序行,然后箭頭指向 下一行,當(dāng)箭頭指向LCALL DELAY行時,再次按下F11,會發(fā)現(xiàn),箭頭指向了 延時子程序DELAY勺第一行。不斷按F11鍵,即可逐步執(zhí)行延時子程序。jJj(J件實例載惻J.期世取反.如果懐植接有皺光二極轡則二根管閃煉笈光;作者:1UIN:CPLPl.OLCALLDELAYAJF1HAINDEL

26、AY:K07R7,#0FFHD1:MOVR6,d2eiid|DJNZRETR7,D1圖2單步執(zhí)行通過單步執(zhí)行程序,可以找出一些問題的所在,但是僅依靠單步執(zhí)行來查錯有 時是困難的,或雖能查出錯誤但效率很低,為此必須輔之以其它的方法,如本例中 的延時程序是通過將 D2: DJNZ R6,D2這一行程序執(zhí)行六萬多次來達(dá)到延時的目 的,如果用按F11六萬多次的方法來執(zhí)行完該程序行,顯然不合適,為此,可以采 取以下一些方法,第一,用鼠標(biāo)在子程序的最后一行(ret )點一下,把光標(biāo)定位于該行,然后用菜單Debug-Runto Cursor line (執(zhí)行到光標(biāo)所在行),即可全速 執(zhí)行完黃色箭頭與光標(biāo)之間

27、的程序行。第二,在進(jìn)入該子程序后,使用菜單 Debug-Step Out of Curre nt Fun ction(單步執(zhí)行到該函數(shù)外),使用該命令后,即全速執(zhí)行完調(diào)試光標(biāo)所在的子程序或子函數(shù)并指向主程序中的下一行程序(這里 是JMP LOOF行) o第三種方法,在開始調(diào)試的,按 F10而非F11,程序也將單步執(zhí) 行,不同的是,執(zhí)行到lcall delay 行時,按下F10鍵,調(diào)試光標(biāo)不進(jìn)入子程序 的內(nèi)部,而是全速執(zhí)行完該子程序,然后直接指向下一行“JMPLOOP。靈活應(yīng)用這幾種方法,可以大大提高查錯的效率。二、在線匯編圖3在線匯編窗口在進(jìn)入Keil的調(diào)試環(huán)境以后,如果發(fā)現(xiàn)程序有錯,可以直接

28、對源程序進(jìn)行修改, 但是要使修改后的代碼起作用,必須先退出調(diào)試環(huán)境,重新進(jìn)行編譯、連接后再次 進(jìn)入調(diào)試,如果只是需要對某些程序行進(jìn)行測試,或僅需對源程序進(jìn)行臨時的修改, 這樣的過程未免有些麻煩,為此 Keil軟件提供了在線匯編的能力,將光標(biāo)定位于 需要修改的程序行上,用菜單Debug-Inline Assambly即可出現(xiàn)如圖3的對話框, 在Enter New后面的編緝框內(nèi)直接輸入需更改的程序語句,輸入完后鍵入回車將自 動指向下一條語句,可以繼續(xù)修改,如果不再需要修改,可以點擊右上角的關(guān)閉按 鈕關(guān)閉窗口。Inline AssemblerCurrent Instructi dn: (C OkOO

29、OE BEFE DJUZDE CC; QQQE)Current Assembly |c :OkOOOE圖3在線匯編三、斷點設(shè)置程序調(diào)試時,一些程序行必須滿足一定的條件才能被執(zhí)行到(如程序中某變量 達(dá)到一定的值、按鍵被按下、串口接收到數(shù)據(jù)、有中斷產(chǎn)生等),這些條件往往是異步發(fā) 生或難以預(yù)先設(shè)定的,這類問題使用單步執(zhí)行的方法是很難調(diào)試的,這時 就要使用到程序調(diào)試中的另一種非常重要的方法一一斷點設(shè)置。斷點設(shè)置的方法有 多種,常 用的是在某一程序行設(shè)置斷點,設(shè)置好斷點后可以全速運行程序,一旦 執(zhí)行到該程序行即停止,可在此觀察有關(guān)變量值,以確定問題所在。在程序行設(shè)置 /移除斷點的方法是將光標(biāo)定位于需要設(shè)

30、置斷點的程序行,使用菜單Debug-In sert/Remove BreakPoi nt 設(shè)置或移除斷點(也可以用鼠標(biāo)在該行雙擊實 現(xiàn)同樣的功能);Debug-Enable/Disable Breakpoint是開啟或暫停光標(biāo)所在行的斷點功能; Debug-Disable All Breakpoi nt暫停所有斷點;Debug-Kill AllBreakPoi nt清除所有的斷點設(shè)置。這些功能也可以用工具條上的快捷按鈕進(jìn)行設(shè) 置。除了在某程序行設(shè)置斷點這一基本方法以外, Keil軟件還提供了多種設(shè)置斷點 的方法,按Debug-Breakpoints即出現(xiàn)一個對話框,該對話框用于對斷點進(jìn)行詳 細(xì)

31、的設(shè)置,如圖4所示。圖4中Expression后的編緝框內(nèi)用于輸入表達(dá)式,該表達(dá)式用于確定程序停止 運行的條件,這里表達(dá)式的定義功能非常強(qiáng)大,涉及到Keil內(nèi)置的一套調(diào)試語法,這里不作詳細(xì)說明,僅舉若干實例,希望讀者可以舉一反三。圖4斷點表達(dá)式1) 在Experssion中鍵入a=0xf7,再點擊Define即定義了一個斷點,注意,a后有兩個等號,意即相等。該表達(dá)式的含義是:如果a的值到達(dá)0xf7則停止程序運行。除使用相等符號之外,還可以使用,=,=,!=(不等于),&(兩值按位與),& (兩值相與)等運算符號。2) 在Experssion后中鍵入Delay再點擊Define,其含義是如果執(zhí)行

32、標(biāo)號為 Delay的行則中斷。3)圖4斷點設(shè)置對話框在Experssion后中鍵入Delay,按Count后的微調(diào)按鈕,將值調(diào)到3,其意義 是當(dāng)?shù)谌螆?zhí)行到Delay時才停止程序運行。4) 在 Experssi on 后鍵入 Delay,在 Comma nd后鍵入 printf(“ SubRouti ne Delay has been Called n”)主程序每次調(diào)用 Delay程序時并不停止運 行,但會在輸出窗口 Comman頁輸出一行字符,即SubRoutine Delay has been Called。其中“ n”的用途是回車換行,使窗口輸出的字符整齊。5) 設(shè)置斷點前先在輸出窗口的

33、 Comman頁中鍵入DEFINE int I,然后在斷點設(shè)置時同 4),但是 Commar后鍵入 printf(“SubRoutine Delay has beenCalled %dn”,+l ),則主程序每次調(diào)用 Delay時將會在Comman窗口輸出該字符及被調(diào)用的次數(shù),如SubRout ine Delay has bee n Called10 times。對于使用C源程序語言的調(diào)試,表達(dá)式中可以直接使用變量名,但必須要注意, 設(shè)置時只能使用全局變量名和調(diào)試箭頭所指模塊中的局部變量名。四、實例調(diào)試為進(jìn)行程序的調(diào)試,我們首先給源程序制造一個錯誤,將延時子程序的第三行 D2 DJNZ R6,

34、D2)后的D2改為D1,而將下一行的D1改為D2,然后重新編譯, 這樣并無語法錯誤,所以不會有任何出錯提示,但由于轉(zhuǎn)移目的地出錯,所以子程 序?qū)⑾萑霟o限循環(huán)中。進(jìn)入調(diào)試狀態(tài)后,按 F10以過程單步的形式執(zhí)行程序,當(dāng)執(zhí)行到LCALL DELAY行時,程序不能繼續(xù)往下執(zhí)行,同時發(fā)現(xiàn)調(diào)試工具條上的Halt按鈕變成了紅色,說明程序在此不斷地執(zhí)行著,而我們預(yù)期這一行程序也將執(zhí)行完后停止,這個結(jié)果 與預(yù)期不同,可以看出調(diào)用的子程序出了差錯。為查明出錯原因,按Halt按鈕使程序停止執(zhí)行,然后按RST按鈕使程序復(fù)位,再次按下F10單步執(zhí)行,但在執(zhí)行到 LCALLDELAY亍時,改按F11鍵跟蹤到子程序內(nèi)部(如

35、果按下 F11鍵沒有反應(yīng),請在 源程序窗口中用鼠標(biāo)點一下),單步執(zhí)行程序,可以發(fā)現(xiàn)在執(zhí)行到D2:DJNZ R6,D2行時,程序不斷地從這一行轉(zhuǎn)移到上一行,同時觀察左側(cè)的寄存器的值,會發(fā)現(xiàn) R6 的值始終在FFH和FEH之間變化,不會減小,而我們的預(yù)期是R6的值不斷減小,減 到0后往下執(zhí)行,因此這個結(jié)果與預(yù)期不符,通過這樣的觀察,不難發(fā)現(xiàn)問題是因 為標(biāo)號寫錯而產(chǎn)生的,發(fā)現(xiàn)問題即可以修改,為了驗證即將進(jìn)行的修改是否正確, 可以先使用在線匯編功能測試一下。把光標(biāo)定位于程序行D2: DJNZR6Q1,打開在線匯編的對話框,將程序改為 DJNZ R7,D2,回車后再鍵入DJNZ R6,D1,然 后關(guān)閉窗

36、口,再進(jìn)行調(diào)試,發(fā)現(xiàn)程序能夠正確地執(zhí)行了,這說明修改是正確的。注 意,這時候的源程序并沒有修改,此時應(yīng)該退出調(diào)試程序,將源程序更改過來,并 重新編譯連接,以獲得正確的目標(biāo)代碼。教程錄入:平凡責(zé)任編輯:平凡上一篇教程:下一篇教程:Keil程序調(diào)試窗口作者:教程來源:本站原創(chuàng)點擊數(shù):2720更新時間:2008-7-24Tj ;上一講中我們學(xué)習(xí)了幾種常用的程序調(diào)試方法,這一講中將介紹Keil提供各種窗口如輸出窗口、觀察窗口、存儲器窗口、反匯編窗口、串行窗口等的用途,以及 這些窗口的使用方法,并通過實例介紹這些窗口在調(diào)試中的使用。一、程序調(diào)試時的常用窗口Keil軟件在調(diào)試程序時提供了多個窗口,主要包括

37、輸出窗口(Output WindowS、 觀察窗口( Watch&Call Statck Win dows、存儲器窗口( Memory Win do W、反匯編 窗口( Dissambly Window、串行窗口( Serial Window、等。進(jìn)入調(diào)試模式后,可 以通過菜單View下的相應(yīng)命令打開或關(guān)閉這些窗口。圖1是輸出窗口、觀察窗口和存儲器窗口,各窗口的大小可以使用鼠標(biāo)調(diào)整。進(jìn) 入調(diào)試程序后,輸出窗口自動切換到 Command。該頁用于輸入調(diào)試命令和輸出調(diào) 試信息。對于初學(xué)者,可以暫不學(xué)習(xí)調(diào)試命令的使用方法。圖1輸出窗口、觀察窗口和存儲器窗口圖1調(diào)試窗口(命令窗口、存儲器窗口、觀察窗口

38、)1、存儲器窗口圖2存儲器數(shù)值各種方式顯示選擇存儲器窗口中可以顯示系統(tǒng)中各種內(nèi)存中的值,通過在Address后的編緝框內(nèi)輸入“字母:數(shù)字”即可顯示相應(yīng)內(nèi)存值,其中字母可以是C D I、X,分別代表代碼存儲空間、直接尋址的片內(nèi)存儲空間、間接尋址的片內(nèi)存儲空間、擴(kuò)展的外部 RAM空間,數(shù)字代表想要查看的地址。例如輸入D: 0即可觀察到地址0開始的片內(nèi)RAM單元值、鍵入C: 0即可顯示從0開始的ROM單元中的值,即查看程序的二進(jìn)制 代碼。該窗口的顯示值可以以各種形式顯示,如十進(jìn)制、十六進(jìn)制、字符型等,改 變顯示方式的方法是點鼠標(biāo)右鍵,在彈出的快捷菜單中選擇,該菜單用分隔條分成三部份,其中第一部份與第

39、二部份的三個選項為同一級別,選中第一部份的任一 選項,內(nèi)容將以整數(shù)形式顯示,而選中第二部份的Ascii項則將以字符型式顯示,選中Float項將相鄰四字節(jié)組成的浮點數(shù)形式顯示、選中Double項則將相鄰8字節(jié)組成雙精度形式顯示。第一部份又有多個選擇項,其中Decimal項是一個開關(guān),如果選中該項,則窗口中的值將以十進(jìn)制的形式顯示,否則按默認(rèn)的十六進(jìn)制方式顯 示。Un sig ned和Sig ned后分別有三個選項:Char、Int、Lo ng,分別代表以單字節(jié) 方式顯示、將相鄰雙字節(jié)組成整型數(shù)方式顯示、將相鄰四字節(jié)組成長整型方式顯示, 而Un sig ned和Sig ned則分別代表無符號形式和有符號形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論