【導(dǎo)讀】斷點(diǎn)的種類很多,大體分為簡單斷點(diǎn)和復(fù)雜斷點(diǎn)兩種。不同的仿真器斷點(diǎn)種類也不同,一般都支持簡單的程序斷點(diǎn),也是用戶經(jīng)常使用的斷點(diǎn)。下面介紹一下常用的斷點(diǎn),希望對大家調(diào)試時有幫助。
高檔仿真器支持的斷點(diǎn)種類很多,如時間斷點(diǎn)、變量操作斷點(diǎn)等。用戶通過操作斷點(diǎn)可以控制仿真器在指定的位置停止運(yùn)行,然后分析當(dāng)前的運(yùn)行狀態(tài),判斷程序中可能存在的問題或調(diào)試整個系統(tǒng)的硬件。
圖1 斷點(diǎn)調(diào)試
1. 使用鼠標(biāo)操作設(shè)置、刪除斷點(diǎn)
在程序窗口(包括C語言、匯編和反匯編窗口)中, 用鼠標(biāo)雙擊需要設(shè)置斷點(diǎn)的程序行,則在窗口左邊的狀態(tài)條中出現(xiàn)紅色的斷點(diǎn)標(biāo)志如圖2所示,完成設(shè)置斷點(diǎn)操作。再次用鼠標(biāo)雙擊該程序行,窗口左邊的紅色斷點(diǎn)標(biāo)志消失,則為刪除斷點(diǎn)操作。
圖2 簡單斷點(diǎn)
2. 時間斷點(diǎn)
時間斷點(diǎn)功能,既運(yùn)行時間與時間斷點(diǎn)設(shè)置的時間相同時,程序停止運(yùn)行。如圖3所示,在運(yùn)行時間的下面可以看到Tbreak,這就是時間斷點(diǎn)。用戶可以根據(jù)實際觀察需要,設(shè)置Tbreak的值,注意單位是ns。當(dāng)程序運(yùn)行時間累積到Tbreak的值時,程序停止運(yùn)行。
圖3 時間斷點(diǎn)
3. 變量操作斷點(diǎn)
變量操作斷點(diǎn),當(dāng)對某一個變量進(jìn)行讀寫操作時,通過設(shè)置變量讀寫操作斷點(diǎn),讓程序停止運(yùn)行。
在Keil MDK環(huán)境下,進(jìn)入仿真狀態(tài)之后,打開【Debug】菜單下的【Breakpoints】選項。在Breakpoints窗口即可定義變量操作斷點(diǎn)。
具體定義方法:在Expression內(nèi)輸入變量的地址,然后選擇讀寫屬性,并正確設(shè)置字節(jié)范圍,最后點(diǎn)擊Define即可。例如,在地址0x20004000開始,16字節(jié)范圍內(nèi),定義讀寫斷點(diǎn)操作,具體設(shè)置方法如圖4所示。
圖4 定義讀寫操作斷點(diǎn)
在圖4中點(diǎn)擊Define之后,斷點(diǎn)即可設(shè)置成功,如圖5所示。圖5中共定義了4種類型的斷點(diǎn)。具體意義如下:
斷點(diǎn)1:表示在地址0x20004000開始,16字節(jié)范圍內(nèi),出現(xiàn)讀或?qū)懙牟僮?,則中斷。
斷點(diǎn)2:表示在地址0x20004100開始,8字節(jié)范圍內(nèi),出現(xiàn)讀的操作,則中斷。
斷點(diǎn)3:表示在地址0x20004200開始,4字節(jié)范圍內(nèi),出現(xiàn)寫的操作,則中斷。
斷點(diǎn)4:表示在地址0x20004300開始,1字節(jié)范圍內(nèi),出現(xiàn)讀或?qū)懙牟僮?,則中斷。
圖5 Breakpoints定義斷點(diǎn)窗口
注意:len表示在一個地址范圍內(nèi)該斷點(diǎn)有效,len必須為1,2,4,8,16,32乘2遞增,同時地址必須處于len的起始位置。例如len=16,則地址必須為0x10字節(jié)對齊, 0x40000010為有效的起始地址,而地址0x40000018為無效,將被系統(tǒng)強(qiáng)行修正為0x40000010。
4. 小結(jié)
上述簡單介紹了三種斷點(diǎn)的設(shè)置方法。簡單斷點(diǎn)是工程師調(diào)試程序中使用最頻繁的,設(shè)置方法簡單。AK100Pro仿真器支持Flash無限制斷點(diǎn),但是有些芯片受制于本身的限制,如LPC1766芯片,只支持到最大6個硬件斷點(diǎn)。時間斷點(diǎn),這個是某些芯片特有的,如Cotex-M3、8051內(nèi)核的芯片。變量斷點(diǎn),用于觀察變量的改變對程序的影響。學(xué)會靈活運(yùn)用斷點(diǎn),助您快速找出程序Bug。
小編推薦閱讀:
我愛快包——電子工程師的外快錢包
小編推薦閱讀:
我愛快包——電子工程師的外快錢包