資源描述:
《keil調(diào)試經(jīng)驗(yàn).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、KEIL調(diào)試高級(jí)技巧在調(diào)試狀態(tài),Debug菜單項(xiàng)中的命令可以使用了,有關(guān)編譯的工具欄按鈕消失了,出現(xiàn)了一個(gè)用于運(yùn)行和調(diào)試的工具欄,Debug菜單上的大部份命令都有相應(yīng)的快捷按鈕。從左到右依次是復(fù)位、運(yùn)行、暫停、單步跟蹤、單步、執(zhí)行完當(dāng)前子程序、運(yùn)行到當(dāng)前行、下一狀態(tài)、打開(kāi)跟蹤、觀察跟蹤、反匯編窗口、觀察窗口、代碼作用范圍分析、1#串行窗口、內(nèi)存窗口、性能分析、工具按鈕命令;然后按一下圖示第二個(gè)“運(yùn)行”按鈕。連接上相關(guān)的實(shí)驗(yàn)資源,本實(shí)驗(yàn)用一條8PIN的數(shù)據(jù)排線把實(shí)驗(yàn)儀的CPU部份的P1口(JP44)連接到八路指示燈部份的JP32。這時(shí)你會(huì)看到實(shí)驗(yàn)儀的八個(gè)紅色LED,輪流點(diǎn)亮,表示運(yùn)行成
2、功,也可以查看相關(guān)的變量和參數(shù),非常方便。⒈單步跟蹤運(yùn)行使用菜單Debug->Step或上圖第四個(gè)單步運(yùn)行按鈕或使用快捷鍵F11可以單步跟蹤執(zhí)行程序,在這里我們按下F11鍵,即可執(zhí)行該箭頭所指程序行,每按一次F11,可以看到源程序窗口的左邊黃色調(diào)試箭頭指向下一行,如果程序中有Delay延時(shí)子程序,則會(huì)進(jìn)入延時(shí)程序中運(yùn)行。⒉單步運(yùn)行如果Delay程序有錯(cuò)誤,可以通過(guò)單步跟蹤執(zhí)行來(lái)查找錯(cuò)誤,但是如果Delay程序已正確,每次進(jìn)行程序調(diào)試都要反復(fù)執(zhí)行這些程序行,會(huì)使得調(diào)試效率很低,為此,可以在調(diào)試時(shí)使用F10來(lái)替代F11(也可使用菜單StepOver或相應(yīng)的命令按鈕),在main函數(shù)中執(zhí)行
3、到Delay時(shí)將該行作為一條語(yǔ)句快速執(zhí)行完畢。為了更好的進(jìn)行對(duì)比,我們重新進(jìn)入仿真環(huán)境,將反匯編窗口關(guān)閉,不斷按F10鍵,可以看到在源程序窗口中的左邊黃色調(diào)試箭頭不會(huì)進(jìn)入到延時(shí)子程序。⒊全速運(yùn)行點(diǎn)擊工具欄上的“運(yùn)行”按鈕或按F5鍵啟動(dòng)全速運(yùn)行,全速執(zhí)行程序,此時(shí)用戶板上的P1口所接LED以流水燈狀態(tài)顯示。⒋暫停點(diǎn)擊工具欄上的按鈕,此時(shí)用戶板上的P1口所接LED停止以流水燈狀態(tài)顯示,只有一個(gè)LED燈點(diǎn)亮(取決于暫停前的P1的值)。⒌觀察/修改寄存器的值Project窗口在進(jìn)入調(diào)試狀態(tài)后顯示Regs頁(yè)的內(nèi)容,包括工作寄存器R0~R7的內(nèi)容和累加器A、寄存器B、堆棧指針SP的內(nèi)容。用戶除了
4、可以觀察以外還可自行修改,例如將寄存器a的值0x62改為0x85。方法一:用鼠標(biāo)點(diǎn)擊選中單元a,然后再單擊其數(shù)值位置,出現(xiàn)文字框后輸入0x85按回車鍵即可;方法二:在命令行窗口,輸入A=0x85,按回車鍵將把A的數(shù)值設(shè)置為0x856.觀察/修改存儲(chǔ)器的數(shù)據(jù)點(diǎn)擊菜單“視圖View->儲(chǔ)存器窗口MemoryWindows”,便會(huì)打開(kāi)儲(chǔ)存器Memory窗口(如窗口已打開(kāi),則會(huì)關(guān)閉),Memory窗口可以同時(shí)顯示4個(gè)不同的存儲(chǔ)器區(qū)域,點(diǎn)擊窗口下部分的編號(hào)可以相互切換顯示。在儲(chǔ)存器1(Memory#1)的地址輸入欄內(nèi)輸入“D:0e0h”,按回車鍵后,可以從內(nèi)部可直接尋址RAM的e0H地址處開(kāi)始
5、顯示,e0H地址的值就是寄存器a的值,應(yīng)與主寄存器窗口下的值相同。點(diǎn)擊窗口下部分的儲(chǔ)存器2(Memory#2),在Address輸入欄內(nèi)輸入“D:0e0h”,按回車鍵后,可以從內(nèi)部可間接尋址RAM的e0H地址處開(kāi)始顯示。點(diǎn)擊窗口下部分的Memory#3,在Address輸入欄內(nèi)輸入“C:0x0021”,按回車鍵后,可以從代碼區(qū)域0000H地址處開(kāi)始顯示,這時(shí)各地址值應(yīng)與在反匯編窗口中的值相同。點(diǎn)擊窗口下部分的Memory#4,在Address輸入欄內(nèi)輸入“X:00h”,按回車鍵后,可以從xdataRAM區(qū)域0000H地址處開(kāi)始顯示。通過(guò)Memory窗口修改數(shù)據(jù)在Memory窗口中顯示
6、的數(shù)據(jù)可以修改。例如,要改動(dòng)data區(qū)域OXE0地址的數(shù)據(jù)內(nèi)容:把鼠標(biāo)移動(dòng)到該數(shù)據(jù)的顯示位置,按動(dòng)鼠標(biāo)右鍵在彈出的菜單中選中:更新儲(chǔ)存器“ModifyMemoryatD:0xE0”,在彈出對(duì)話框的文本輸入欄內(nèi)輸入相應(yīng)數(shù)值,按回車鍵或點(diǎn)擊OK,修改完成。通過(guò)命令行查看數(shù)據(jù)例如,我們想查看data空間從0x01到0x03地址的內(nèi)容,可在命令輸入窗口輸入“dd:0x01,03H”,回車即可完成,d表示data空間,0x01表示起始地址,03H表示結(jié)束地址(注意兩種16進(jìn)制的表示方法在這里都可以接受),輸出結(jié)果在信息輸出窗口中顯示出來(lái)。通過(guò)命令行修改數(shù)據(jù)例如,我們想把p1口的值從0x02數(shù)據(jù)
7、修改成0x04,可在命令輸入窗口輸入p1=0x04”,回車即可完成,此時(shí)如果p1口接有l(wèi)ed,將立即看到led狀態(tài)改變。通過(guò)Memory窗口可以看到修改后的數(shù)據(jù):在地址欄輸入d:00H然后回車。儲(chǔ)存器1的d:0x90后的第一個(gè)數(shù)據(jù)就變成了04,這正是我們剛才修改的結(jié)果。7.觀察/修改變量的值在暫停程序運(yùn)行時(shí),可以觀察到有關(guān)的變量值。在監(jiān)視/調(diào)用堆棧(Watch)窗口“局部”頁(yè)自動(dòng)顯示當(dāng)前正在使用的局部變量,不需要用戶自己添加。監(jiān)視(Watch)頁(yè)顯示用戶指