?? arm jtag調試常見問題.txt
字號:
ARM JTAG調試常見問題(2008-03-27更新):
這篇文章總結了剛接觸ARM的網友們的常見問題,希望對快速掌握ARM調試有幫助。
1 - 檢測不到目標系統
調試前,請把目標板連接好,然后用調試軟件檢測目標系統。如果檢測不到目標系統,請做
以下的檢查。
A - 有些芯片是可以加密的,加密后JTAG接口就自動被禁用掉了;
B - 確定你的連接是正確的;
C - 確定你使用的仿真器是被調試軟件支持的
D - 對WIGGLER而言,因為沒有固定的電路圖,所以需要在軟件里做相應的設置;
E - 對LPC2000系列而言,RTCK管腳一般是用來控制是否使能JTAG接口的,請查閱數據手冊;
F - 如果你用的芯片比較特殊,例如STR91X,因為內部掃描鏈是串接的,請設置好TAP,以
讓仿真器知道掃描鏈的長度;
2 - 程序下載不正確,程序跑飛
一般的用戶,剛開始調試的時候,編譯好程序,就直接點擊調試。但結果發現調試根本沒有
按照預期的進行。發生這種問題一個最常見的原因是程序根本沒有正確下載到目標系統中去。
對SDRAM而言,上電后一般都是不可以使用的,需要進行相應的配置才可以使用。所以如果
是在SDRAM里進行調試,請先對SDRAM進行配置,或者確定SDRAM已經初始化好了。如果是內部
SRAM,一般來說,可以直接使用。所以,做一般的測試,最簡單的辦法是使用片內SRAM。
在調試的時候,最好是自己通過內存觀察窗口判斷一下,程序是否是下載到期望的地址去了,
下載是否正確。以免出現調試跑飛的問題。
3 - 軟件斷點和硬件斷點的區別和數量限制
所有的ARM7/ARM9芯片,內部有2個斷點單元。斷點單元可以用于設置硬件斷點或是軟件斷點。
先說說硬件斷點和軟件斷點的區別。硬件斷點是通過監測地址來觸發斷點的。所以,硬件斷
點可以設置在任何地方,不管是FLASH,ROM還是RAM,只要給定地址就可以了。而軟件斷點是
通過監測特定的指令來觸發斷點的。在某個地址設置軟件斷點的時候,仿真器會將這個地址
的數據/指令替換成一個特殊格式的指令。斷點單元通過監測這個特殊格式的指令來觸發斷點。
因為需要執行替換操作,所以軟件斷點只能設置在RAM里面。如果斷點單元設置成監測某個地
址,那一個斷點單元只能監測一個地址,所以只能設置2個硬件斷點。如果斷點單元設置成監
測某個固定格式的指令,那一個斷點單元可以支持數量沒有限制的軟件斷點。因為設置軟件
斷點的時候只需要把要說著斷點的位置的數據替換成被監測的固定格式的指令就可以了。這
就是為什么大家經常看到說支持2個硬件斷點和數目不限的軟件斷點。但這里還是要提醒以下,
如果2個斷點單元都用于硬件斷點,那用戶就不可以設置軟件斷點了。
4 - 在FLASH內進行調試
在FLASH進行調試,本質上來說,和在SDRAM/SRAM里調試是一樣的。區別是,FLASH是只讀的,
對FLASH進行寫操作的時候,需要特別的命令。如果IDE支持直接將程序燒寫到FLASH進行調試,
那調試就會和在RAM里差不多。如果IDE不支持自動下載,可以先通過燒寫軟件將要調試的程序
燒寫到FLASH里面,然后在進行調試。在FLASH和RAM里面進行調試的另外一個區別在與可使用
的斷點數量。因為FLASH是只讀的,所以只能使用硬件斷點,所以最多只能使用2個斷點。很多
時候,單步運行也需要一個斷點來實現,所以,用戶只能使用一個斷點。清楚了這點,碰到提
示說沒有斷點可以使用了,不能設置斷點,或者不能單步運行的時候,就知道是怎么回事情了。
5 - 軟件斷點被覆蓋
前面我們提到,軟件斷點是通過替換指令來實現的。這就存在一個可能,設置好的軟件斷點被
覆蓋掉了。特別是自拷貝程序,仿真器在拷貝前在某個地址設置了一個軟件斷點。然后執行拷
操作,這樣的結果是設置斷點的位置的值由于自拷貝而發生了改變,由于新的值并不是被監測
的特殊指令,所以這個斷點就會失效。造成在這個位置程序不能停止的情況。這樣的情況相對
來說比較少,這里只是提醒一下,希望對碰到類似情況的朋友有幫助。
6 - 反匯編調試
在調試的時候,一般看的都是源文件,匯編或C語言。如果調試的時候發現運行與期望的不一
或是跑飛,可以看看反匯編,單不運行幾步,然后通過觀察寄存器和內存來判斷每條指令的運
行是否正確。
7 - 調試的時候,注意內存觀察窗口對調試的影響
在調試的時候,如果內存觀察窗口打開了,每次目標板被停止后,DEBUGGER都會通過調試代理
讀取內存,更新內存觀察窗口的值。一般情況下,這樣做都不會帶來什么影響。但有個特殊情況
必須要注意。在某些情況下,調試目標的某些寄存器有特別的地方。例如,有些寄存器,只能讀
取一次,讀取后它們的值就會變化。在這種情況下,因為更新內存觀察窗口的值的時候會執行一
次讀操作,所以程序重新運行的時候,在讀取寄存器的值的時候,該值已經改變了,程序運行出
現不期望的情況。有個網友遇到過這個問題,請參考下面的帖子:
http://hjtag.com/forum/viewthread.php?tid=53&extra=page%3D1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -