硬斷點和軟斷點的區別

2021-06-09 13:15:34 字數 3127 閱讀 4980

**macrossdzh

硬斷點--break point

軟斷點--assert

簡單的解釋:

硬體斷點:硬斷點需要硬體暫存器提供支援,斷點的數目受embedded ice中的watchpoint數目的限制,但是可以在任何地方設定斷點。

斷點可分為硬體斷點和軟體斷點兩大類:

1.硬體斷點需要目標cpu的硬體支援,當前流行的arm7/9內部硬體設計提供兩組暫存器用來存貯斷點資訊,所以arm7/9核心最多支援兩個硬體斷點,而arm11則可以支援到8個硬體斷點.這與偵錯程式無關.

2.軟體斷點則是通過在**中設定特徵值的方式來實現的.當需要在某位址**處設定軟體斷點的時候,**器會先將此處**進行備份保護,然後將預先設定好的斷點特徵值(一般為0x0000等不易與**混淆的值)寫入此位址,覆蓋原來的**資料.當程式執行到此特徵值所在的位址時,**器識別出此處是乙個軟斷點,便會產生中斷.當取消斷點時,之前受保護的**資訊會被自動恢復.

硬體斷點可以設定在任何位置的**上,包括rom和ram;而軟體斷點由於需要修改相應位址的值,所以一般只能設在ram上,但是數量可以不受限制.由於硬體斷點設定的靈活性,所以是最優先選用的斷點資源,但是兩個斷點往往很難滿足工程師進行深入除錯的需要,於是軟體斷點可以作為硬體斷點的補充資源來使用.

由於通常的軟體斷點只能設在ram執行的**上,而隨著系統的**量越來越大,特別是在移動通訊領域,擴充大容量的ram勢必會增加產品的成本,所以現在很多系統直接在flashrom上執行**.對於這種在flashrom上執行**的系統,一般的軟體斷點是無法設定的,這也是軟體斷點的侷限性.對於這樣的系統,只能通過交替使用兩個硬體斷點滿足需要,但是會帶來一定的不便. 要很好的解決這一矛盾,只有使**器增加在flashrom上設定軟體斷點的功能,拓展**器中可供利用的斷點資源. 在flashrom上設定軟體斷點的原理與在ram上設定軟斷點類似,也是在設定的斷點處用特徵碼替換原有**,通過識別特徵碼使斷點事件發生.不同的是,在flashrom上設定軟體斷點需要對flash進行擦寫操作,這就需要**器能夠有flash程式設計功能,並且能夠在盡可能短的時間內完成特徵碼的寫入.完成這一系列的讀寫操作,就可使在flashrom上除錯**的工程師獲得更充裕的斷點資源,從而大大提高了開發效率.

但是,由於對flash進行擦寫需要一定的時間,所以在執行到flash斷點的時候會感覺到有乙個停頓的時間.雖然這一點比ram上的軟體斷點要差些,但是相對於給工程師除錯工作整體上帶來的便利而言,這一點是完全可以接受的.

設定斷點進行除錯是最基本的一種除錯手段,選擇具有豐富斷點資源的ice**器,可以明顯地提高除錯效率.當然,前提是工程師能夠靈活使用各種斷點資源.

下邊這段話引自《arm jtag 除錯原理》,可以從具體實現上理解:

(1)wp address value/mask register和硬體斷點

斷點是用來標識某個位址上的指令的,所以要將乙個watch point用作斷點設定,首先需要將wp control value暫存器的npoc位置0,用來表示:只有在當前的週期是進行取指令的條件下,才觸發斷點。要在乙個位址設定乙個斷點,可以通過wp address value/mask這兩個暫存器來實現。假設,要在位址0x0040設定乙個斷點,可以將wp address value暫存器的值設定為0x0040,同時將wp address mask暫存器的值設定為0x0。另外,將wp data mask設定為0xffffffff,這樣可以遮蔽掉wp data value暫存器的影響,在進行比較的時候,只考慮位址是否匹配。這樣,每次arm7tdmi從位址0x0040取指令的話,不管該指令是什麼,斷點就會被觸發,arm7tdmi會暫停當前的執行,自動進入除錯狀態,要清除該斷點的話,只要改變wp address value暫存器的值,或者設定wp control value暫存器,禁止該功能。如果你想在所有位址的低16位的值為0x0040的地方設定斷點,可以配合使用wp address mask暫存器,  將它的值設定為0xffff,0000,這樣的話,每次比較的時候,高16為的位址就會被遮蔽掉。其實這種使用方式應該是比較少的,比較多的情況是,遮蔽掉最低2位或者最低1位的位址。在arm狀態下,因為arm指令的長度是32位的,所有指令位址的最低2位必須為0,所以,如果在arm狀態下,一般將wp address mask的低2位置1,在進行位址比較的時候,遮蔽掉位址低最低2位,確保斷點是被設定在正確的位址上;如果類似,如果是在thumb狀態下,一般需要將wp address mask的最低1位置1。上面描述的是第一種設定斷點的方式,這種方式是通過位址比較來實現斷點的。這也是我們常說的硬體斷點,這類斷點可以被設定在任何位址(包括flash和sdram)。因為arm7tdmi提供了兩組wp address value/mask暫存器,所以,可以支援兩個硬體斷點。下面讓我們來看看斷點的另外一種實現方式。

(2)wp data value/mask register和軟體斷點

在除錯過程當中,通過wp data value/mask暫存器也可以實現斷點設定。利用wp data value/mask如何實現斷點設定呢? 和硬體斷點的設定一樣,首先需要將wp control value暫存器的npoc位置0,用來表示:只有在當前的週期是進行取指令的條件下,才觸發斷點。 然後,將wp address mask暫存器的值設定為:0xffffffff, 這樣可以遮蔽掉wp address value暫存器的影響,在進行比較的時候,只考慮資料是否匹配。接下來,將wp data value暫存器的值設定為乙個固定的值,例如:0xdededede,將wp data mask暫存器的值設定為0x00000000。在需要設定斷點的地方,將其內容替換為0xdededede。這樣,一但程式執行到該位置,嘗試從該位置取指令或者資料的時候,因為取得的資料值和wp data value暫存器的值相同,arm7tdmi會暫停當前的執行,自動進入除錯狀態。要清除該位置上的斷點,我們只需要將該位置原來的指令恢復就可以了。這樣,退出除錯狀態後,程式可以繼續正常的執行。通過wp data value/mask暫存器,我們可以在任何需要設定斷點的地方,將其內容替換為乙個固定的序列,就可以達到設定斷點的目的。這種斷點就是我們通常所說的軟體斷點。軟體斷點的設定方式使得arm7tdmi可以支援任意數量的軟體斷點。但也決定了軟體斷點的侷限性:軟體斷點不能設定在rom/flash裡面。因為軟體斷點的實現需要替換要設定斷點的位置的內容,這點在rom/flash做不到。(雖然從某種意義上來說,flash也是可讀寫的,但是需要特殊的指令)。

參考:

硬體斷點和軟體斷點

硬體斷點和軟體斷點 在嵌入式開發 經常用到 jtag 器。jtag 器可以滿足嵌入式程式除錯的基本要求 斷點設定 單步除錯 記憶體編輯 變數 暫存器觀測等。而斷點設定是 jtag 器最基本的除錯功能。使用者需要系統在設定斷點處停下來後再進行除錯。斷點根據原理和用途不同又分為幾個不同的種類。斷點可分為...

記憶體斷點和硬體斷點

32位邏輯位址 16位段選擇器 偏移位址 16位段選擇器 13位全域性描述符表 區域性描述符表索引 1位gdt ldtflag 2位的訪問控制許可權 由16位得到段選擇器索引到全域性描述符表得到64位的段描述符,段描述符中包含了線性段基址 線性段基址 偏移位址 邏輯位址後半段 得到線性位址空間的乙個...

軟體斷點和硬體斷點的區別和數量限制

軟體斷點和硬體斷點的區別和數量限制 所有的arm7 arm9晶元,內部有2個斷點單元。斷點單元可以用於設定硬體斷點或是軟體斷點。先說說硬體斷點和軟體斷點的區別。硬體斷點是通過監測位址來觸發斷點的。所以,硬體斷點可以設定在任何地方,不管是flash,rom還是ram,只要給定位址就可以了。而軟體斷點是...