<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 淺談ARM仿真器中的斷點(diǎn)資源

淺談ARM仿真器中的斷點(diǎn)資源

作者: 時(shí)間:2012-05-02 來(lái)源:網(wǎng)絡(luò ) 收藏

目前,越來(lái)越多的嵌入式開(kāi)發(fā)公司和工程師開(kāi)始采用JTAG方式的ICE來(lái)進(jìn)行程序的調試工作。傳統的全仿真方式(Full ICE)正在逐漸被使用靈活、成本低廉的JTAG仿真方式所取代。

本文引用地址:http://dyxdggzs.com/article/171535.htm

JTAG目前可以滿(mǎn)足嵌入式程序調試的所有基本要求,例如:設置、單步調試、內存編輯、變量、寄存器觀(guān)測等。(如圖1所示)

設置是JTAG最基本的調試功能。用戶(hù)需要系統在設置處停下來(lái)后再進(jìn)行調試。斷點(diǎn)根據原理和用途不同又分為幾個(gè)不同的種類(lèi)。本文將簡(jiǎn)單地介紹一下常用的幾種斷點(diǎn)類(lèi)型。

斷點(diǎn)可分為硬件斷點(diǎn)和軟件斷點(diǎn)兩大類(lèi):

1.硬件斷點(diǎn)需要目標CPU的硬件支持,當前流行的7/9內部硬件設計提供兩組寄存器用來(lái)存貯斷點(diǎn)信息,所以7/9內核最多支持兩個(gè)硬件斷點(diǎn),而11則可以支持到8個(gè)硬件斷點(diǎn)。這與調試器無(wú)關(guān)。

2.軟件斷點(diǎn)則是通過(guò)在代碼中設置特征值的方式來(lái)實(shí)現的。當需要在某地址代碼處設置軟件斷點(diǎn)的時(shí)候,仿真器會(huì )先將此處代碼進(jìn)行備份保護,然后將預先設定好的斷點(diǎn)特征值(一般為0x0000等不易與代碼混淆的值)寫(xiě)入此地址,覆蓋原來(lái)的代碼數據。當程序運行到此特征值所在的地址時(shí),仿真器識別出此處是一個(gè)軟斷點(diǎn),便會(huì )產(chǎn)生中斷。當取消斷點(diǎn)時(shí),之前受保護的代碼信息會(huì )被自動(dòng)恢復。

硬件斷點(diǎn)可以設置在任何位置的代碼上,包括ROM和RAM;而軟件斷點(diǎn)由于需要修改相應地址的值,所以一般只能設在RAM上,但是數量可以不受限制。由于硬件斷點(diǎn)設置的靈活性,所以是最優(yōu)先選用的斷點(diǎn),但是兩個(gè)斷點(diǎn)往往很難滿(mǎn)足工程師進(jìn)行深入調試的需要,于是軟件斷點(diǎn)可以作為硬件斷點(diǎn)的補充來(lái)使用。

由于通常的軟件斷點(diǎn)只能設在RAM運行的代碼上,而隨著(zhù)系統的代碼量越來(lái)越大,特別是在移動(dòng)通信領(lǐng)域,擴充大容量的RAM勢必會(huì )增加產(chǎn)品的成本,所以現在很多系統直接在FlashROM上運行代碼。對于這種在FlashROM上運行代碼的系統,一般的軟件斷點(diǎn)是無(wú)法設置的,這也是軟件斷點(diǎn)的局限性。對于這樣的系統,只能通過(guò)交替使用兩個(gè)硬件斷點(diǎn)滿(mǎn)足需要,但是會(huì )帶來(lái)一定的不便。

要很好的解決這一矛盾,只有使仿真器增加在FlashROM上設置軟件斷點(diǎn)的功能,拓展仿真器中可供利用的斷點(diǎn)。例如,日本橫河計算機株式會(huì )社 (YDC)最新推出的高端ARM仿真器—advicePRO,就是第一個(gè)支持Flash斷點(diǎn)的ICE仿真器產(chǎn)品。(如圖2所示)

在FlashROM上設置軟件斷點(diǎn)的原理與在RAM上設置軟斷點(diǎn)類(lèi)似,也是在設定的斷點(diǎn)處用特征碼替換原有代碼,通過(guò)識別特征碼使斷點(diǎn)事件發(fā)生。不同的是,在FlashROM上設置軟件斷點(diǎn)需要對Flash進(jìn)行擦寫(xiě)操作,這就需要仿真器能夠有Flash編程功能,并且能夠在盡可能短的時(shí)間內完成特征碼的寫(xiě)入。完成這一系列的讀寫(xiě)操作,就可使在FlashROM上調試代碼的工程師獲得更充裕的斷點(diǎn)資源,從而大大提高了開(kāi)發(fā)效率。

17.jpg
圖 1: 調試器界面及常用功能

18.jpg
圖 2: 橫河公司的最新產(chǎn)品advicePRO

但是,由于對Flash進(jìn)行擦寫(xiě)需要一定的時(shí)間,所以在執行到Flash斷點(diǎn)的時(shí)候會(huì )感覺(jué)到有一個(gè)停頓的時(shí)間。雖然這一點(diǎn)比RAM上的軟件斷點(diǎn)要差些,但是相對于給工程師調試工作整體上帶來(lái)的便利而言,這一點(diǎn)是完全可以接受的。

設置斷點(diǎn)進(jìn)行調試是最基本的一種調試手段,選擇具有豐富斷點(diǎn)資源的ICE仿真器,可以明顯地提高調試效率。當然,前提是工程師能夠靈活使用各種斷點(diǎn)資源。



關(guān)鍵詞: 資源 斷點(diǎn) 仿真器 ARM 淺談

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>