Ozone是用于J-link和J-Trace的多平臺調試,分析工具。獨立的圖形化界面,可加載IAR,Keil,Gcc,Clang/LLVM等工具鏈生成的Elf/Dwarf可執行文件,進行C/C++源代碼調試和匯編指令調試。可直接使用J-Link和J-Trace內置功能,如無限flash斷點,flash下載,指令跟蹤等。在Cortex-M架構上,Ozone可以幫助用戶快速發現和分析導致CPU故障的軟件錯誤。本文將介紹如何使用Ozone的調試功能,深入了解這些類型的錯誤。
分析故障工作流程
我們首先在一個示例的基礎上演示Ozone 的分析故障工作流程。示例應用程序可以生成不同類型的 Cortex-M 故障,示例可以在此處(https://wiki.segger.com/File:CortexM_FaultTest.zip)下載。在下圖中,示例應用程序已下載到SEGGER Cortex-M Trace開發板板。使用的仿真器是 J-Trace PRO V2。程序已運行至_NoThumbFunc()中,當前PC位于跳轉地址0的分支上。由于地址 0 處為一條 Thumb 指令,因此恢復程序執行將導致 Cortex-M CPU 故障。我們繼續執行程序,看看 Ozone 如何處理故障。
一、目標異常窗口
菜單欄點擊 GO 后,程序執行立即中斷,并彈出 Ozone 的目標異常對話框:
目標異常窗口顯示 CPU 故障描述及其系統寄存器的內容。在此示例中,SHCSR 寄存器 USGFAULTACT 指示發生了Cortex-M UsageFault 異常。UFSR寄存器提供已發生的UsageFault 異常; INVSTATE被置位,表示在無效的 CPU 狀態下執行指令。USGFAULTENA 表示已啟用 UsageFault 處理程序,如果沒有使能改位,異常將升級為HardFault。異常寄存器上下文的解釋特定于體系結構。因此,Ozone在異常描述中盡可能多的顯示處理過的信息。當程序執行暫停且目標處于異常狀態時,都會顯示目標異常窗口。
二、向量捕獲
開始調試時,Ozone 會啟用 Cortex-M 故障向量捕獲。這會導致程序執行在進入故障處理程序時立即中止。Ozone 將顯示目標異常窗口。如上圖所示,可以使用 Ozone 的 Break & Tracepoints 窗口設置或清除單個向量捕獲。Ozone還提供命令Break.SetVectorCatch以編程方式編輯目標的矢量捕獲狀態。例如,此命令可用于在調試啟動時修改 Ozone 的默認向量捕獲初始化行為。該命令在項目腳本函數OnProjectLoad中使用。
三、調試窗口
現在我們使用Ozone的調試窗口來進一步了解故障。
Call Stack窗口顯示目標處于UsageFault異常狀態。該窗口顯示故障源自函數_NoThumbFunc。我們在Call Stack窗口中選擇_NoThumbFunc。在Call Stack窗口中選擇調用幀時,Ozone 的調用幀感知調試窗口會將輸出切換到所選幀的執行上下文(請參閱上圖)。Local Data窗口指示在函數_NoThumbFunc中執行了地址 0 分支。這導致 CPU 在 ARM 狀態下執行 Thumb 指令。查看Ozone的寄存器窗口,寄存器UFSR確認CPU已發出INVSTATE UsageFault。
使用跟蹤功能分析故障
在不確定的故障情況下,Cortex-M 內核無法提供故障指令的準確 PC,可以使用 Ozone 的跟蹤窗口來快速識別故障指令。
如上例所示,使用 Ozone 的 Backtrace Highlighting 功能可以輕松地將不精確的 BusFault 異常追溯到錯誤的存儲指令。
總結
Cortex-M處理器異常包含:
(1)HardFault異常,是缺省異常,固定優先級為-1,優先級比除NMI之外的所有中斷和異常更高。
(2)MemManage異常,可通過使用內存保護單元(MPU)引起內存訪問沖突異常。
(3)BusFault異常,在任一內存訪問錯誤時觸發,例如通過非法讀/寫,向量捕獲。
(4)UsageFault異常,在執行錯誤時觸發。UsageFault異常在向量表第6位,IRQ為-11,具有可配置優先級。如果未啟用UsageFault,則會改為觸發HardFault。
在任一異常中,都會從向量表中調用異常處理程序,類似于中斷處理過程。Ozone檢測到目標系統崩潰時,會自動分析目標狀態并提供所必要的信息。異常窗口指示崩潰的原因,位置以及NVIC寄存器;Call Stack窗口可以從異常中展開,以便導航到錯誤位置,即使跨過多個異常( The Call Stack Window can also unwind from an exception to enable easy navigation to the location of error, even across multiple exceptions.)。
審核編輯:湯梓紅
-
處理器
+關注
關注
68文章
19286瀏覽量
229841 -
cpu
+關注
關注
68文章
10863瀏覽量
211763 -
Cortex-M
+關注
關注
2文章
229瀏覽量
29763
原文標題:如何使用Ozone分析Cortex-M故障?
文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論