第一節(jié) 軟件說明
Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(μVision)將這些部分組合在一起。目前軟件對中文的支持不友好,不建議安裝網(wǎng)上的一些漢化包之類的。另外建立的工程文件路徑也盡量不要存在中文,否則可能會出現(xiàn)一些異常。
第二節(jié) 基本調(diào)試方法
1,基本調(diào)試操作:首先點擊"Debug->Start/Stop Debug Session"或下圖2位置,進入調(diào)試:
如果前面工程配置里選擇了復(fù)位調(diào)試,則進入調(diào)試后,會停在main函數(shù)頭部:
2,復(fù)位:對程序進行復(fù)位操作,根據(jù)燒錄器不同的復(fù)位方式配置會觸發(fā)不同的復(fù)位類型。
3,全速運行:使當(dāng)前程序開始正常全速運行,直到程序遇到斷點時停止。
4,停止運行:當(dāng)程序全速運行時,點擊此按鍵可停止程序運行,停的是當(dāng)前點擊時的程序運行位置。
5,單步調(diào)試:根據(jù)當(dāng)前調(diào)試的窗口的語言,執(zhí)行單條語句。如果遇到函數(shù),則會進入函數(shù)內(nèi)部。如果是在反匯編窗口中,則只執(zhí)行一條匯編指令。
6,單步跳過調(diào)試:如果是在C語言窗口中,則是按單條語句執(zhí)行,與單步調(diào)試不同的是,遇到函數(shù)不會進入函數(shù)內(nèi)部,而是直接全速運行函數(shù),并跳到下一條語句。
7,單步返回調(diào)試:如果是在C語言窗口中,則是直接全速運行當(dāng)前函數(shù)后面所有內(nèi)容,直到函數(shù)返回上一級。
8,插入/移除斷點:如果當(dāng)前光標(biāo)所在行未有斷點,則插入斷點(前提是當(dāng)前行可以插入,如果無法插入會顯示一個感嘆號),在有斷點的情況下則是移除斷點。插入斷點后,當(dāng)前行前面會有個紅圓表示斷點位置。也可以通過直接點擊紅圓位置進行插入/移除斷點的操作。另一種斷點方式,是通過指令來控制,當(dāng)然也可以使用Keil提供的界面化操作,設(shè)置某個變量讀或?qū)憰r觸發(fā)斷點。不過目前貌似有部分芯片不支持這種操作。注:斷點最多只能打7個。
9,使能/禁止斷點:開啟或禁止當(dāng)前光標(biāo)所在行的斷點。禁止后紅圓變成白圓。
10,禁止所有斷點:禁止當(dāng)前所有的斷點。
11,刪除所有斷點:刪除所有斷點。
第三節(jié) 變量調(diào)試方法
通過"View->Watch Windows->Watch1、Watch2"可以選擇打開Watch窗口:
通過選中一個變量,右鍵添加入對應(yīng)的Watch窗口,可以追蹤查看當(dāng)前變量的變化狀態(tài)。注意,只有全局變量可以全程監(jiān)視,臨時變量只有在進入當(dāng)前函數(shù)中才可監(jiān)視到其數(shù)據(jù),用static關(guān)鍵詞修飾的變量無法監(jiān)視。
如果當(dāng)前變量沒有實時更新,則需要點擊"View->Periodic Window Update"將其勾選上。
在"Watch"窗口中,可以查看當(dāng)前變量名稱、值、數(shù)據(jù)類型,如果當(dāng)前變量類型為結(jié)構(gòu)體,則可以以對應(yīng)的結(jié)構(gòu)形式進行展開查看。
第四節(jié) 內(nèi)存調(diào)試方法
通過"View->Memory Windows->Memory1/2/3/4"打開Memory窗口:
這個圖標(biāo)打開的狀態(tài)下,再次選中則可關(guān)閉:
在Memory窗口中輸入想要查看內(nèi)存的起始地址,另外右上角的鎖可以把當(dāng)前界面鎖定下來。
第五節(jié) 系統(tǒng)調(diào)試方法
通過"View->System Viewer"打開窗口,這個窗口用于查看當(dāng)前單片機外設(shè)及內(nèi)核寄存器的值,在調(diào)試外設(shè)底層時經(jīng)常會使用到。在這個窗口中可以直接修改外設(shè)寄存器的值,當(dāng)然部分只讀寄存器是無法修改的,有些則是需要在特定條件下才可以設(shè)置生效,具體就得看對應(yīng)的芯片手冊里寄存器的說明了。
第六節(jié) 調(diào)度調(diào)試方法
可以在"View->Call Stack Window"打開此窗口:
這個窗口用于查看當(dāng)前程序調(diào)度關(guān)系,當(dāng)出現(xiàn)有進入硬件錯誤異常調(diào)試時可以快速定位到是哪里觸發(fā)的異常。這個窗口是的調(diào)度關(guān)系是從當(dāng)前程序堆棧里獲取的數(shù)據(jù)并將其圖形化,所以如果當(dāng)前堆棧數(shù)據(jù)被破壞,則此窗口也將無法查看調(diào)度關(guān)系。該窗口里顯示的調(diào)度關(guān)系是從下至上調(diào)用的,最上面的表示當(dāng)前程序所處的函數(shù)。展開對應(yīng)的函數(shù),可以查看各層調(diào)用函數(shù)跳轉(zhuǎn)之前保存的一些臨時變量等信息。
第七節(jié) 寄存器調(diào)試方法
該窗口可在"View->Registers Window"處打開:
這個窗口用于查看當(dāng)前內(nèi)核的相關(guān)寄存器,如匯編里常說的15個通用寄存器。當(dāng)然調(diào)試中比較常用的是其中的SP、LR、PC三個寄存器。SP為當(dāng)前棧的地址位置,PC為當(dāng)前程序地址,LR為函數(shù)跳轉(zhuǎn)前的地址,即當(dāng)前函數(shù)返回的地址。
另外"Banked"中的MSP為當(dāng)前程序系統(tǒng)主棧,PSP則為操作系統(tǒng)的任務(wù)棧,這兩者的區(qū)別是,如果使用了操作系統(tǒng),則當(dāng)前任務(wù)中的所有調(diào)度關(guān)系使用的是任務(wù)棧,而類似中斷這種內(nèi)核的操作使用的是主棧;如果未使用操作系統(tǒng),則只會使用主棧,不會使用任務(wù)棧。通過"Internal"可以查看當(dāng)前是處在中斷還是任務(wù)中,Mode為"Thread"表示是在線程/任務(wù)中,或者是函數(shù)中(非中斷),為"Handle"表示是在中斷中;Privilege為"Privelege"表示當(dāng)前處于特權(quán)模式。Stack為"PSP"表示當(dāng)前使用的是任務(wù)棧,為"MSP"則表示使用的是主棧。
-
keil
+關(guān)注
關(guān)注
68文章
1213瀏覽量
166875 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
305瀏覽量
23739 -
DEBUG
+關(guān)注
關(guān)注
3文章
94瀏覽量
19920
發(fā)布評論請先 登錄
相關(guān)推薦
評論