侵入式調試和非侵入式調試
在嵌入式應用的開發過程中,需要通過調試來解決程序運行過程中出現的問題,根據是否會打斷程序的“全速運行狀態”,調試方式可以分為侵入式調試和非侵入式調試兩類。
侵入式調試手段如下:
? 停機以及單步執行程序
? 硬件斷點和斷點指令(BKPT)
? 變量數據觀察點(Watch觀察窗口)
? 訪問寄存器的值
? 調試監視器異常
非侵入式調試手段如下:
? 在內核運行的時候訪問存儲器
? 指令跟蹤,需要硬件包含指令跟蹤單元(ETM)
通常情況下,我們采用的是侵入式調試,但這種調試會打破程序的全速運行狀態。非侵入式調試則可以在保證程序全速運行的情況下,了解程序運行的情況。在調試大型軟件和RTOS多任務系統,或者與通信時序相關的應用時(非侵入式調試會破壞通信時序),應用代碼可能突然跑飛或者產生異常中斷,而導致問題的原因可能難以發現。
此時非侵入式調試如指令跟蹤這樣的功能就有著不可比擬的作用。指令跟蹤能夠記錄問題發生之前MCU內部的指令執行歷史記錄,這些信息可以幫助開發者回溯問題現場來準確定位問題發生的原因。
指令跟蹤的實現方式
在嵌入式MCU調試中指令跟蹤存在多種實現方式,通過對比我們將能夠更清楚的了解Segger J-Trace Pro產品流模式指令跟蹤功能的強大之處。
(1)使用MCU片上緩存實現指令跟蹤
一些MCU內部包含指令緩存區域,緩存區域依據不同芯片型號命名可能有所不同,例如Embedded Trace Buffer(ETB),Micro Trace Buffer(MTB),Embedded Trace FIFO(ETF)等。指令跟蹤記錄被保存在該片上區域,當程序停止運行時,PC端調試軟件讀取該區域內數據以獲取指令跟蹤數據。
使用該方式實現指令跟蹤存在的限制:
? 片上的緩存空間很小,通常緩存空間大小只有kb級別
? 只能記錄非常有限的指令執行歷史記錄
(2)使用調試器內部緩存進行指令跟蹤
另外一種實現指令跟蹤的方式是調試器內部提供指令緩存空間,緩存空間大小可能為MB到GB級別,但受限于調試器本身的硬件實現成本,調試器內部所能夠提供的緩存空間同樣不會很大。
該方式實現指令跟蹤存在的限制:
? 片上的緩存空間為MB到GB范圍
? 能記錄有限的指令執行歷史,但無法記錄從應用開始執行到出現異常的全過程指令記錄
? 通常需要暫停應用運行后,PC端軟件才會讀取緩存在調試器中的Trace數據
Segger J-Trace Pro流模式指令跟蹤
前面的兩種實現方式都因為緩存空間大小的影響而有其使用局限性,Segger J-Trace Pro產品則使用流模式的方式解決了前面兩種方式存在的問題,能夠給開發者帶來成熟的指令跟蹤解決方案。J-Trace Pro在SWD/JTAG調試接口引腳之外,與芯片通過額外的跟蹤功能引腳連接,包括Trace時鐘和數據傳輸引腳,MCU內部ETM模塊中記錄的指令通過J-Trace Pro以流模式的方式實時傳輸到PC端,此時指令的緩存空間在PC電腦端,因此最大的緩存空間甚至可以達到TB級別,徹底解決了前面兩種實現方式所存在的局限性。
J-Trace Pro支持通過流模式實時的將指令跟蹤數據傳輸到電腦端,該方案還帶來了如下優勢:
? 指令緩存空間大小取決于電腦硬盤大小(TB級別)
? 能夠記錄應用從開始執行到出現異常的完整指令過程
? 能夠記錄用戶與應用程序發生交互行為中的指令執行過程
? 提供的其他高級調試功能:
實時代碼覆蓋率分析
實時的代碼執行情況分析
本文介紹了嵌入式MCU調試過程中幾種指令跟蹤調試功能的實現方式,對比可以發現Segger J-Trace Pro產品的解決方案具有明顯優勢,此外Segger還提供了配套的調試軟件Ozone,能夠提供強大的指令跟蹤調試功能
審核編輯 :李倩
-
mcu
+關注
關注
146文章
17981瀏覽量
366770 -
嵌入式
+關注
關注
5151文章
19670瀏覽量
317483 -
寄存器
+關注
關注
31文章
5434瀏覽量
124457
原文標題:如何使用SEGGER J-Trace Pro流模式實現指令跟蹤功能?
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
嵌入式硬件調試和軟件調試
嵌入式系統的Proteus仿真中源碼調試方式介紹
初步掌握嵌入式程序的編譯和調試過程
如何調試嵌入式代碼?
如何使用SEGGER J-Trace Pro流模式實現指令跟蹤功能?
淺析STM32調試過程中的幾個相關問題
如何更快調試嵌入式軟件,試試這五個技巧!

評論