第一節(jié) 軟件說(shuō)明
Keil提供了包括C編譯器、宏匯編、鏈接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過(guò)一個(gè)集成開發(fā)環(huán)境(μVision)將這些部分組合在一起。目前軟件對(duì)中文的支持不友好,不建議安裝網(wǎng)上的一些漢化包之類的。另外建立的工程文件路徑也盡量不要存在中文,否則可能會(huì)出現(xiàn)一些異常。
第二節(jié) 基本調(diào)試方法
1,基本調(diào)試操作:首先點(diǎn)擊"Debug->Start/Stop Debug Session"或下圖2位置,進(jìn)入調(diào)試:

如果前面工程配置里選擇了復(fù)位調(diào)試,則進(jìn)入調(diào)試后,會(huì)停在main函數(shù)頭部:

2,復(fù)位:對(duì)程序進(jìn)行復(fù)位操作,根據(jù)燒錄器不同的復(fù)位方式配置會(huì)觸發(fā)不同的復(fù)位類型。

3,全速運(yùn)行:使當(dāng)前程序開始正常全速運(yùn)行,直到程序遇到斷點(diǎn)時(shí)停止。

4,停止運(yùn)行:當(dāng)程序全速運(yùn)行時(shí),點(diǎn)擊此按鍵可停止程序運(yùn)行,停的是當(dāng)前點(diǎn)擊時(shí)的程序運(yùn)行位置。

5,單步調(diào)試:根據(jù)當(dāng)前調(diào)試的窗口的語(yǔ)言,執(zhí)行單條語(yǔ)句。如果遇到函數(shù),則會(huì)進(jìn)入函數(shù)內(nèi)部。如果是在反匯編窗口中,則只執(zhí)行一條匯編指令。

6,單步跳過(guò)調(diào)試:如果是在C語(yǔ)言窗口中,則是按單條語(yǔ)句執(zhí)行,與單步調(diào)試不同的是,遇到函數(shù)不會(huì)進(jìn)入函數(shù)內(nèi)部,而是直接全速運(yùn)行函數(shù),并跳到下一條語(yǔ)句。

7,單步返回調(diào)試:如果是在C語(yǔ)言窗口中,則是直接全速運(yùn)行當(dāng)前函數(shù)后面所有內(nèi)容,直到函數(shù)返回上一級(jí)。

8,插入/移除斷點(diǎn):如果當(dāng)前光標(biāo)所在行未有斷點(diǎn),則插入斷點(diǎn)(前提是當(dāng)前行可以插入,如果無(wú)法插入會(huì)顯示一個(gè)感嘆號(hào)),在有斷點(diǎn)的情況下則是移除斷點(diǎn)。插入斷點(diǎn)后,當(dāng)前行前面會(huì)有個(gè)紅圓表示斷點(diǎn)位置。也可以通過(guò)直接點(diǎn)擊紅圓位置進(jìn)行插入/移除斷點(diǎn)的操作。另一種斷點(diǎn)方式,是通過(guò)指令來(lái)控制,當(dāng)然也可以使用Keil提供的界面化操作,設(shè)置某個(gè)變量讀或?qū)憰r(shí)觸發(fā)斷點(diǎn)。不過(guò)目前貌似有部分芯片不支持這種操作。注:斷點(diǎn)最多只能打7個(gè)。

9,使能/禁止斷點(diǎn):開啟或禁止當(dāng)前光標(biāo)所在行的斷點(diǎn)。禁止后紅圓變成白圓。

10,禁止所有斷點(diǎn):禁止當(dāng)前所有的斷點(diǎn)。

11,刪除所有斷點(diǎn):刪除所有斷點(diǎn)。

第三節(jié) 變量調(diào)試方法
通過(guò)"View->Watch Windows->Watch1、Watch2"可以選擇打開Watch窗口:

通過(guò)選中一個(gè)變量,右鍵添加入對(duì)應(yīng)的Watch窗口,可以追蹤查看當(dāng)前變量的變化狀態(tài)。注意,只有全局變量可以全程監(jiān)視,臨時(shí)變量只有在進(jìn)入當(dāng)前函數(shù)中才可監(jiān)視到其數(shù)據(jù),用static關(guān)鍵詞修飾的變量無(wú)法監(jiān)視。

如果當(dāng)前變量沒有實(shí)時(shí)更新,則需要點(diǎn)擊"View->Periodic Window Update"將其勾選上。

在"Watch"窗口中,可以查看當(dāng)前變量名稱、值、數(shù)據(jù)類型,如果當(dāng)前變量類型為結(jié)構(gòu)體,則可以以對(duì)應(yīng)的結(jié)構(gòu)形式進(jìn)行展開查看。

第四節(jié) 內(nèi)存調(diào)試方法
通過(guò)"View->Memory Windows->Memory1/2/3/4"打開Memory窗口:

這個(gè)圖標(biāo)打開的狀態(tài)下,再次選中則可關(guān)閉:

在Memory窗口中輸入想要查看內(nèi)存的起始地址,另外右上角的鎖可以把當(dāng)前界面鎖定下來(lái)。

第五節(jié) 系統(tǒng)調(diào)試方法
通過(guò)"View->System Viewer"打開窗口,這個(gè)窗口用于查看當(dāng)前單片機(jī)外設(shè)及內(nèi)核寄存器的值,在調(diào)試外設(shè)底層時(shí)經(jīng)常會(huì)使用到。在這個(gè)窗口中可以直接修改外設(shè)寄存器的值,當(dāng)然部分只讀寄存器是無(wú)法修改的,有些則是需要在特定條件下才可以設(shè)置生效,具體就得看對(duì)應(yīng)的芯片手冊(cè)里寄存器的說(shuō)明了。

第六節(jié) 調(diào)度調(diào)試方法
可以在"View->Call Stack Window"打開此窗口:
這個(gè)窗口用于查看當(dāng)前程序調(diào)度關(guān)系,當(dāng)出現(xiàn)有進(jìn)入硬件錯(cuò)誤異常調(diào)試時(shí)可以快速定位到是哪里觸發(fā)的異常。這個(gè)窗口是的調(diào)度關(guān)系是從當(dāng)前程序堆棧里獲取的數(shù)據(jù)并將其圖形化,所以如果當(dāng)前堆棧數(shù)據(jù)被破壞,則此窗口也將無(wú)法查看調(diào)度關(guān)系。該窗口里顯示的調(diào)度關(guān)系是從下至上調(diào)用的,最上面的表示當(dāng)前程序所處的函數(shù)。展開對(duì)應(yīng)的函數(shù),可以查看各層調(diào)用函數(shù)跳轉(zhuǎn)之前保存的一些臨時(shí)變量等信息。
第七節(jié) 寄存器調(diào)試方法
該窗口可在"View->Registers Window"處打開:
這個(gè)窗口用于查看當(dāng)前內(nèi)核的相關(guān)寄存器,如匯編里常說(shuō)的15個(gè)通用寄存器。當(dāng)然調(diào)試中比較常用的是其中的SP、LR、PC三個(gè)寄存器。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),則只會(huì)使用主棧,不會(huì)使用任務(wù)棧。通過(guò)"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)注
69文章
1218瀏覽量
168682 -
調(diào)試器
+關(guān)注
關(guān)注
1文章
310瀏覽量
24120 -
DEBUG
+關(guān)注
關(guān)注
3文章
94瀏覽量
20333
發(fā)布評(píng)論請(qǐng)先 登錄
Arduino串口高級(jí)用法,你都掌握了嗎?
C語(yǔ)言中位運(yùn)算符的高級(jí)用法(1)

C語(yǔ)言中位運(yùn)算符的高級(jí)用法(2)

C語(yǔ)言中位運(yùn)算符的高級(jí)用法(3)

C語(yǔ)言中位運(yùn)算符的高級(jí)用法(4)

C語(yǔ)言中位運(yùn)算符的高級(jí)用法(5)

ActiveMQ高級(jí)用法
KEIL斷點(diǎn)調(diào)試窗口的常規(guī)用法有哪些
Nuvoton 8051 Keil uVision Driver v1.08安裝后在keil debug中顯示Driver為“Nuvoton 8051 KEIL C51 Driver”的原因?
在keil調(diào)試延時(shí),除了debug還有別的辦法嗎?
STM32單片機(jī)---keil5中debug無(wú)法進(jìn)入main函數(shù)

STM32單片機(jī)無(wú)法進(jìn)入debug,怎么在cubmx中打開debug

評(píng)論