機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
程序的編譯及調(diào)試
程序的編譯及調(diào)試
 更新時間:2008-7-27 16:15:23  點擊數(shù):2
【字體: 字體顏色
編譯、連接

  下面我們通過一個例子來介紹C程序編譯、連接的過程。這個例子使P1口所接LED以流水燈狀態(tài)顯示。

  將下面的源程序輸入,命名為exam3.c,并建立名為exam3的工程文件,將exam3.c文件加入該工程中,設(shè)置工程,在Target頁將Xtal后的值由24.0改為12.0,以便后面調(diào)試時觀察延時時間是否正確,本項目中還要用到我們所提供的實驗仿真板,為此需在Debug頁對Dialog DLL對話框作一個設(shè)置,在進(jìn)行項目設(shè)置時點擊Debug,打開Debug頁,可以看到Dialog DLL對話框后的Parmeter:輸入框中已有默認(rèn)值-pAT52,在其后鍵入空格后再輸入-dledkey,如圖1-8所示。
  
例1-3 使P1口所接LED以流水燈狀態(tài)顯示

/**************************************************

; 平凡單片機工作室

; http://www.mcustudio.com

; Copyright 2003 pingfan's McuStudio

; All rights Reserved

;作者:周堅 

;lsd.c

;流水燈程序

**************************************************/

#include "reg51.h"

#include "intrins.h"

#define uchar unsigned char

#define uint unsigned int 



/*延時程序

由Delay參數(shù)確定延遲時間

*/

void mDelay(unsigned int Delay) 

{ unsigned int i;

for(;Delay>0;Delay--)

{ for(i=0;i<124;i++)

{;}

}

}



void main()

{ unsigned char OutData=0xfe; 

for(;;)

{

P1=OutData;

OutData=_crol_(OutData,1); //循環(huán)左移

mDelay(1000); /*延時1000毫秒*/

}

}

  設(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)的目標(biāo)代碼是最新的,而Translate ….項則僅對當(dāng)前文件進(jìn)行編譯,不進(jìn)行連接。以上操作也可以通過工具欄按鈕直接進(jìn)行。圖9是有關(guān)編譯、設(shè)置的工具欄按鈕,從左到右分別是:編譯、編譯連接、全部重建、停止編譯和對工程進(jìn)行設(shè)置。
    
             圖9
   編譯過程中的信息將出現(xiàn)在輸出窗口中的Build頁中,如果源程序中有語法錯誤,會有錯誤報告出現(xiàn),雙擊該行,可以定位到出錯的位置,對源程序修改之后再次編譯,最終要得到如圖10所示的結(jié)果,提示獲得了名為exam3.hex的文件,該文件即可被編程器讀入并寫到芯片中,同時還可看到,該程序的代碼量(code=63),內(nèi)部RAM的使用量(data=9),外部RAM的使用量(xdata=0)等一些信息。除此之外,編譯、連接還產(chǎn)生了一些其它相關(guān)的文件,可被用于Keil的仿真與調(diào)試,到了這一步后即進(jìn)行調(diào)試。

             圖10
  程序的調(diào)試

  在對工程成功地進(jìn)行匯編、連接以后,按Ctrl+F5或者使用菜單Debug->Start/Stop Debug Session即可進(jìn)入調(diào)試狀態(tài),Keil內(nèi)建了一個仿真CPU用來模擬執(zhí)行程序,該仿真CPU功能強大,可以在沒有硬件和仿真機的情況下進(jìn)行程序的調(diào)試。

  進(jìn)入調(diào)試狀態(tài)后,Debug菜單項中原來不能用的命令現(xiàn)在已可以使用了,多出一個用于運行和調(diào)試的工具條,如圖11所示,Debug菜單上的大部份命令可以在此找到對應(yīng)的快捷按鈕,從左到右依次是復(fù)位、運行、暫停、單步、過程單步、執(zhí)行完當(dāng)前子程序、運行到當(dāng)前行、下一狀態(tài)、打開跟蹤、觀察跟蹤、反匯編窗口、觀察窗口、代碼作用范圍分析、1#串行窗口、內(nèi)存窗口、性能分析、工具按鈕等命令。
  
               圖11

  點擊菜單Peripherals,即會多出一項“鍵盤LED仿真板(K)”,選中該項,即會出現(xiàn)如圖12所示界面。
  
               圖12
  使用菜單STEP或相應(yīng)的命令按鈕或使用快捷鍵F11可以單步執(zhí)行程序,使用菜單STEP OVER或功能鍵F10可以以過程單步形式執(zhí)行命令,所謂過程單步,是指把C語言中的一個函數(shù)作為一條語句來全速執(zhí)行。

  按下F11鍵,可以看到源程序窗口的左邊出現(xiàn)了一個黃色調(diào)試箭頭,指向源程序的第一行。每按一次F11,即執(zhí)行該箭頭所指程序行,然后箭頭指向下一行,當(dāng)箭頭指向“mDelay(1000);”行時,再次按下F11,會發(fā)現(xiàn),箭頭指向了延時子程序mDelay的第一行。不斷按F11鍵,即可逐步執(zhí)行延時子程序。

  如果mDelay程序有錯誤,可以通過單步執(zhí)行來查找錯誤,但是如果mDelay程序已正確,每次進(jìn)行程序調(diào)試都要反復(fù)執(zhí)行這些程序行,會使得調(diào)試效率很低,為此可以在調(diào)試時使用F10來替代F11,在main函數(shù)中執(zhí)行到mDelay(1000)時將該行作為一條語句快速執(zhí)行完畢。

  Keil軟件還提供了一些窗口,用以觀察一些系統(tǒng)中重要的寄存器或變量的值,這也是很重要的調(diào)試方法。

  以下通過一個對延時程序的延遲時間的調(diào)整來對這些調(diào)試方法作一個簡單的介紹。

  這個程序中用到了延時程序mDelay,如果使用匯編語言編程,每段程序的延遲時間可以非常精確地計算出來,而使用C語言編程,就沒有辦法事先計算了。為此,可以使用觀察程序執(zhí)行時間的方法了來解。進(jìn)入調(diào)試狀態(tài)后,窗口左側(cè)是寄存器和一些重要的系統(tǒng)變量的窗口,其中有一項是sec,即統(tǒng)計從開始執(zhí)行到目前為止用去的時間。按F10,以過程單步的形式執(zhí)行程序,在執(zhí)行到mDelay(1000)這一行之前停下,查看sec的值(把鼠標(biāo)停在sec后的數(shù)值上即可看到完整的數(shù)值),記下該數(shù)值,然后按下F10,執(zhí)行完mDelay(1000)后再次觀察sec值,如圖13所示,這里前后兩次觀察到的值分別是:0.00040400和1.01442600,其差值為1.014022s,如果將該值改為124可獲得更接近于1s的數(shù)值,而當(dāng)該值取123時所獲得的延時值將小于1s,因此,最佳的取值應(yīng)該是124。
  
               圖13
  • 上一篇: C語言的一些特點
  • 下一篇: Keil工程建立及設(shè)置
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1