找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7233|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

ARM JTAG調(diào)試常見問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:60266 發(fā)表于 2014-8-18 02:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這篇文章總結(jié)了剛接觸ARM的網(wǎng)友們的常見問題,希望對快速掌握ARM調(diào)試有幫助。

1 - 檢測不到目標系統(tǒng)
                調(diào)試前,請把目標板連接好,然后用調(diào)試軟件檢測目標系統(tǒng)。如果檢測不到目標系統(tǒng),請做
                以下的檢查。
                A - 有些芯片是可以加密的,加密后JTAG接口就自動被禁用掉了;
                B - 確定你的連接是正確的;
                C - 確定你使用的仿真器是被調(diào)試軟件支持的
                D - 對WIGGLER而言,因為沒有固定的電路圖,所以需要在軟件里做相應(yīng)的設(shè)置;
                E - 對LPC2000系列而言,RTCK管腳一般是用來控制是否使能JTAG接口的,請查閱數(shù)據(jù)手冊;
                F - 如果你用的芯片比較特殊,例如STR91X,因為內(nèi)部掃描鏈是串接的,請設(shè)置好TAP,以讓仿真器知道掃描鏈的長度;

2 - 程序下載不正確,程序跑飛一般的用戶,剛開始調(diào)試的時候,編譯好程序,就直接點擊調(diào)試。但結(jié)果發(fā)現(xiàn)調(diào)試根本沒有按照預(yù)期的進行。

發(fā)生這種問題一個最常見的原因是程序根本沒有正確下載到目標系統(tǒng)中去。
對SDRAM而言,上電后一般都是不可以使用的,需要進行相應(yīng)的配置才可以使用。所以如果是在SDRAM里進行調(diào)試,請先對SDRAM進行配置,或者

確定SDRAM已經(jīng)初始化好了。如果是內(nèi)部SRAM,一般來說,可以直接使用。所以,做一般的測試,最簡單的辦法是使用片內(nèi)SRAM。
                在調(diào)試的時候,最好是自己通過內(nèi)存觀察窗口判斷一下,程序是否是下載到期望的地址去了,下載是否正確。以免出現(xiàn)調(diào)試

跑飛的問題。

3 - 軟件斷點和硬件斷點的區(qū)別和數(shù)量限制所有的ARM7/ARM9芯片,內(nèi)部有2個斷點單元。斷點單元可以用于設(shè)置硬件斷點或是軟件斷點。
先說說硬件斷點和軟件斷點的區(qū)別。硬件斷點是通過監(jiān)測地址來觸發(fā)斷點的。所以,硬件斷點可以設(shè)置在任何地方,不管是FLASH,ROM還是RAM

,只要給定地址就可以了。而軟件斷點是通過監(jiān)測特定的指令來觸發(fā)斷點的。在某個地址設(shè)置軟件斷點的時候,仿真器會將這個地址的數(shù)據(jù)/指

令替換成一個特殊格式的指令。斷點單元通過監(jiān)測這個特殊格式的指令來觸發(fā)斷點。
因為需要執(zhí)行替換操作,所以軟件斷點只能設(shè)置在RAM里面。如果斷點單元設(shè)置成監(jiān)測某個地址,那一個斷點單元只能監(jiān)測一個地址,所以只能

設(shè)置2個硬件斷點。如果斷點單元設(shè)置成監(jiān)測某個固定格式的指令,那一個斷點單元可以支持數(shù)量沒有限制的軟件斷點。因為設(shè)置軟件斷點的時

候只需要把要說著斷點的位置的數(shù)據(jù)替換成被監(jiān)測的固定格式的指令就可以了。這就是為什么大家經(jīng)?吹秸f支持2個硬件斷點和數(shù)目不限的軟

件斷點。但這里還是要提醒以下,如果2個斷點單元都用于硬件斷點,那用戶就不可以設(shè)置軟件斷點了。

4 - 在FLASH內(nèi)進行調(diào)試在FLASH進行調(diào)試,本質(zhì)上來說,和在SDRAM/SRAM里調(diào)試是一樣的。區(qū)別是,F(xiàn)LASH是只讀的,對FLASH進行寫操作的時

候,需要特別的命令。如果IDE支持直接將程序燒寫到FLASH進行調(diào)試,那調(diào)試就會和在RAM里差不多。如果IDE不支持自動下載,可以先通過燒

寫軟件將要調(diào)試的程序燒寫到FLASH里面,然后在進行調(diào)試。在FLASH和RAM里面進行調(diào)試的另外一個區(qū)別在與可使用的斷點數(shù)量。因為FLASH是

只讀的,所以只能使用硬件斷點,所以最多只能使用2個斷點。很多時候,單步運行也需要一個斷點來實現(xiàn),所以,用戶只能使用一個斷點。清

楚了這點,碰到提示說沒有斷點可以使用了,不能設(shè)置斷點,或者不能單步運行的時候,就知道是怎么回事情了。

5 - 軟件斷點被覆蓋
前面我們提到,軟件斷點是通過替換指令來實現(xiàn)的。這就存在一個可能,設(shè)置好的軟件斷點被覆蓋掉了。特別是自拷貝程序,仿真器在拷貝前

在某個地址設(shè)置了一個軟件斷點。然后執(zhí)行拷操作,這樣的結(jié)果是設(shè)置斷點的位置的值由于自拷貝而發(fā)生了改變,由于新的值并不是被監(jiān)測  

的特殊指令,所以這個斷點就會失效。造成在這個位置程序不能停止的情況。這樣的情況相對來說比較少,這里只是提醒一下,希望對碰到類

似情況的朋友有幫助。

6 - 反匯編調(diào)試
在調(diào)試的時候,一般看的都是源文件,匯編或C語言。如果調(diào)試的時候發(fā)現(xiàn)運行與期望的不一或是跑飛,可以看看反匯編,單不運行幾步,然后

通過觀察寄存器和內(nèi)存來判斷每條指令的運行是否正確。

7 - 調(diào)試的時候,注意內(nèi)存觀察窗口對調(diào)試的影響在調(diào)試的時候,如果內(nèi)存觀察窗口打開了,每次目標板被停止后,DEBUGGER都會通過調(diào)試代

理取內(nèi)存,更新內(nèi)存觀察窗口的值。一般情況下,這樣做都不會帶來什么影響。但有個特殊情況必須要注意。在某些情況下,調(diào)試目標的某些

寄存器有特別的地方。例如,有些寄存器,只能讀取一次,讀取后它們的值就會變化。在這種情況下,因為更新內(nèi)存觀察窗口的值的時候會執(zhí)

行一次讀操作,所以程序重新運行的時候,在讀取寄存器的值的時候,該值已經(jīng)改變了,程序運行出現(xiàn)不期望的情況。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表