在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Ozone分析Cortex-M異常

麥克泰技術(shù) ? 來源:麥克泰技術(shù) ? 2024-11-29 11:14 ? 次閱讀

Ozone可以幫助用戶快速分析和查找導(dǎo)致CPU故障的軟件bug。本文解釋如何使用Ozone的調(diào)試功能,深入了解Cortex-M架構(gòu)上的這些錯誤。

故障分析流程

我們首先基于一個示例應(yīng)用程序演示Ozone的故障分析工作流。示例應(yīng)用程序可以生成不同類型的Cortex-M故障,工程下載鏈接https://wiki.segger.com/File:CortexM_FaultTest.zip(請復(fù)制鏈接到瀏覽器下載)。在下圖中,示例應(yīng)用程序被下載到SEGGER Cortex-M trace參考板,調(diào)試工具使用J-Trace PRO。程序執(zhí)行到函數(shù)_NoThumbFunc中,PC位于跳轉(zhuǎn)到地址0的指令處,由于在地址0處是一條Thumb指令,繼續(xù)執(zhí)行程序?qū)?dǎo)致Cortex-M CPU故障。恢復(fù)程序執(zhí)行,看看Ozone是如何處理故障。

4f0a964e-adff-11ef-93f3-92fbcf53809c.png

目標(biāo)異常對話框

點(diǎn)擊GO后,程序執(zhí)行中斷,Ozone彈出目標(biāo)異常對話框:

4f39e8c2-adff-11ef-93f3-92fbcf53809c.png

目標(biāo)異常對話框描述了CPU故障及其系統(tǒng)寄存器上下文。本例中,SHCSR寄存器的USGFAULTACT位表示發(fā)生了一個Cortex-M UsageFault異常。寄存器UFSR提供了發(fā)生的UsageFault異常的具體類型。示例中,INVSTATE位被置位,表示指令在無效的CPU狀態(tài)下執(zhí)行。USGFAULTENA字段表示啟用了UsageFault處理程序,否則異常將升級為HardFault。異常寄存器上下文的解釋與特定體系結(jié)構(gòu)相關(guān),Ozone旨在通過異常描述顯示盡可能多的處理信息,當(dāng)程序執(zhí)行停止并且目標(biāo)處于異常狀態(tài)時,會顯示目標(biāo)異常對話框。

向量捕獲

4f4db532-adff-11ef-93f3-92fbcf53809c.png

當(dāng)調(diào)試會話開始時,Ozone設(shè)置捕獲所有Cortex-M故障向量,在程序進(jìn)入錯誤處理程序時立即中斷執(zhí)行,也使Ozone能夠在故障進(jìn)入時立即彈出目標(biāo)異常對話框。可以通過Ozone的Break&Tracepoints窗口設(shè)置或清除某個向量捕獲。Ozone也提供命令Break.SetVectorCatch以編程方式設(shè)置目標(biāo)的向量捕獲狀態(tài)。例如,該命令可以用來修改Ozone在調(diào)試會話開始時的默認(rèn)vector catch 的行為,該命令在項目腳本函數(shù)OnProjectLoad中使用。

調(diào)試窗口

使用Ozone的調(diào)試窗口來進(jìn)一步了解故障。

4f5e9c3a-adff-11ef-93f3-92fbcf53809c.png

Call Stack窗口表示目標(biāo)處于UsageFault異常狀態(tài)。該窗口還指出故障源自函數(shù)_NoThumbFunc。在Call Stack窗口中選擇_NoThumbFunc調(diào)用幀,Ozone的調(diào)用幀感知調(diào)試窗口將輸出切換到所選幀的執(zhí)行上下文。Local Data窗口表明在_NoThumbFunc函數(shù)中執(zhí)行了一個到地址0的跳轉(zhuǎn),導(dǎo)致CPU在ARM狀態(tài)下執(zhí)行Thumb指令。查看Ozone的寄存器窗口,寄存器UFSR確認(rèn)CPU已經(jīng)發(fā)出INVSTATE UsageFault。這是Ozone基本故障分析工作流程。

嵌套的異常

Ozone可以提供關(guān)于Cortex-M上嵌套異常和嵌套故障的準(zhǔn)確信息。為了演示這一點(diǎn),讓我們繼續(xù)調(diào)試前一節(jié)的示例應(yīng)用程序。我們現(xiàn)在用一條未定義的指令覆蓋UsageFault處理程序的單個分支指令:

4f918a32-adff-11ef-93f3-92fbcf53809c.png

在跳過0x8000384地址的未定義指令后,Ozone的目標(biāo)異常對話框再次彈出:

4fade88a-adff-11ef-93f3-92fbcf53809c.png

對話框通知搶占了UsageFault異常的為HardFault異常。除了寄存器字段INVSTATE之外,還設(shè)置了字段UNDEFINSTR。這表明在調(diào)用路徑中發(fā)生了兩種類型的UsageFault異常。HFSR寄存器字段FORCED進(jìn)一步表明UNDEFINSTR異常已經(jīng)升級為HardFault。

由于Cortex-M CPU現(xiàn)在正在處理嵌套異常,Ozone的Call Stack窗口相應(yīng)更新:

4fbd9e38-adff-11ef-93f3-92fbcf53809c.png

在多個堆棧上嵌套異常

關(guān)于嵌套異常的信息可以占用兩個堆棧,如下一個示例所示,在這種情況下,Ozone能夠提供準(zhǔn)確的調(diào)用堆棧和本地數(shù)據(jù)信息。本例中,程序執(zhí)行已停止在調(diào)用堆棧5級的SVC指令上:

4feb01b6-adff-11ef-93f3-92fbcf53809c.png

在執(zhí)行SVC調(diào)用之后,在處理程序模式下執(zhí)行了一個附加的函數(shù)調(diào)用路徑。應(yīng)用程序現(xiàn)在停止在load加載指令上,該指令即將從無效地址0x100000加載:

5001437c-adff-11ef-93f3-92fbcf53809c.png

此時,Ozone的Call Stack窗口表明堆棧交換已經(jīng)發(fā)生。從表列stack Used中堆棧使用值0的位置,用戶可以看到:

上面的調(diào)用幀,包括SVC_Handler都在主棧上。

下面的調(diào)用幀,包括SVCall Exception)位于進(jìn)程堆棧上。

當(dāng)前使用了40字節(jié)的主堆棧和88字節(jié)的進(jìn)程堆棧。

注意,Ozone用尖括號括起了特定于目標(biāo)的調(diào)用幀。繼續(xù)執(zhí)行程序,看看Ozone是如何處理即將發(fā)生的故障。程序恢復(fù)執(zhí)行后,立即彈出目標(biāo)異常對話框,指示HardFault異常:

501321e6-adff-11ef-93f3-92fbcf53809c.png

由于沒有啟用BusFault異常處理程序,Cortex-M將BusFault異常升級為HardFault。寄存器字段PRECISERR表示發(fā)生了精確的BusFault異常。字段BFARVALID表示錯誤的load/store指令的內(nèi)存訪問地址可用。Ozone將所有這些信息集成到目標(biāo)異常對話框頂部區(qū)域中的異常描述中。字段SVCALLACT進(jìn)一步表明,一個SVC處理程序已被當(dāng)前異常搶占。

關(guān)閉目標(biāo)異常對話框,使用Ozone的調(diào)試窗口進(jìn)一步調(diào)查故障。

5036b7d2-adff-11ef-93f3-92fbcf53809c.png

如上圖所示,Ozone的調(diào)用幀感知調(diào)試窗口提供了故障的清晰圖像:Local data窗口顯示了解引用數(shù)據(jù)指針的無效值。Call Stack窗口顯示完整的程序執(zhí)行路徑,跟蹤多個嵌套異常和CPU堆棧。用戶可以在register窗口中查詢到相同信息。

使用Trace分析故障

在不精確的故障場景中,當(dāng)Cortex-M內(nèi)核無法提供故障指令的精確PC時,可以使用Ozone的trace窗口來快速識別故障指令,確定更復(fù)雜故障的原因,特別是不精確的故障。

5052a816-adff-11ef-93f3-92fbcf53809c.png

如上圖所示,使用Ozone的回溯特性,可以很容易地將不精確的BusFault異常追溯到出錯的存儲指令。

Ozone是一塊面向嵌入式應(yīng)用程序的調(diào)試器。使用Ozone,可以在C/ C++ /Rust源代碼和匯編級別調(diào)試嵌入式應(yīng)用。Ozone與J-Link和J-Trace緊密集成,提供豐富的調(diào)試分析功能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120348
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10863

    瀏覽量

    211747
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3268

    瀏覽量

    57704
  • Cortex-M
    +關(guān)注

    關(guān)注

    2

    文章

    229

    瀏覽量

    29761

原文標(biāo)題:如何使用Ozone分析Cortex-M異常

文章出處:【微信號:麥克泰技術(shù),微信公眾號:麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    為什么說Cortex-M是低功耗應(yīng)用的首選

    雖然Cortex-M處理器家族目標(biāo)瞄準(zhǔn)效能光譜較低端的區(qū)域,但是和大多數(shù)微控制器(MCU)采用的其他典型處理器相比,Cortex-M的效能依然算相當(dāng)強(qiáng)悍。舉例來說,像是許多高效能微控制器所采用的Cortex-M4與
    發(fā)表于 07-28 09:44 ?3482次閱讀
    為什么說<b class='flag-5'>Cortex-M</b>是低功耗應(yīng)用的首選

    ARM Cortex-M學(xué)習(xí)筆記:初識Systick定時器

    Cortex-M的內(nèi)核中包含Systick定時器了,只要是Cortex-M系列的MCU就會有Systick,因此這是通用的,下面詳細(xì)分析
    的頭像 發(fā)表于 05-15 15:01 ?2997次閱讀
    ARM <b class='flag-5'>Cortex-M</b>學(xué)習(xí)筆記:初識Systick定時器

    如何使用Ozone分析Cortex-M故障?

    源代碼調(diào)試和匯編指令調(diào)試。可直接使用J-Link和J-Trace內(nèi)置功能,如無限flash斷點(diǎn),flash下載,指令跟蹤等。在Cortex-M架構(gòu)上,Ozone可以幫助用戶快速發(fā)現(xiàn)和分析導(dǎo)致CPU故障
    發(fā)表于 09-23 11:26

    Atmel Studio 6軟件中如何調(diào)試ARM Cortex-M

    Atmel Studio 6軟件中如何調(diào)試ARM Cortex-M
    的頭像 發(fā)表于 07-04 10:49 ?4246次閱讀

    關(guān)于STM32和Cortex-M內(nèi)核系列介紹(1)

    Cortex-M內(nèi)核系列和STM32-講座
    的頭像 發(fā)表于 07-05 01:07 ?8055次閱讀

    關(guān)于STM32與Cortex-M內(nèi)核系列的介紹(2)

    Cortex-M內(nèi)核系列和STM32-講座3
    的頭像 發(fā)表于 07-05 00:45 ?4535次閱讀

    關(guān)于Cortex-M 調(diào)試應(yīng)用的介紹

    Cortex-M 調(diào)試應(yīng)用
    的頭像 發(fā)表于 07-10 00:56 ?2624次閱讀

    米爾科技Cortex-M Prototyping System +介紹

    ARM? Cortex?-M原型系統(tǒng) MPS2+,為Cortex-M 系列微處理器設(shè)計的原型驗證評估系統(tǒng),包含最新的Cortex-M7 及Corte
    的頭像 發(fā)表于 11-14 10:45 ?1945次閱讀
    米爾科技<b class='flag-5'>Cortex-M</b> Prototyping System +介紹

    Cortex-M內(nèi)核的MPU內(nèi)存保護(hù)單元

    講講Cortex-M內(nèi)核的MPU內(nèi)存保護(hù)單元
    的頭像 發(fā)表于 03-04 11:17 ?3686次閱讀
    <b class='flag-5'>Cortex-M</b>內(nèi)核的MPU內(nèi)存保護(hù)單元

    Cortex-M可以跑Linux操作系統(tǒng)嗎?

    Cortex-M可以跑Linux操作系統(tǒng)嗎?
    發(fā)表于 12-01 11:36 ?2次下載
    <b class='flag-5'>Cortex-M</b>可以跑Linux操作系統(tǒng)嗎?

    no cortex-m sw device found 問題解決【轉(zhuǎn)】

    no cortex-m sw device found 問題解決【轉(zhuǎn)】
    發(fā)表于 12-02 17:36 ?33次下載
    no <b class='flag-5'>cortex-m</b> sw device found 問題解決【轉(zhuǎn)】

    如何使用Ozone的調(diào)試功能

    源代碼調(diào)試和匯編指令調(diào)試。可直接使用J-Link和J-Trace內(nèi)置功能,如無限flash斷點(diǎn),flash下載,指令跟蹤等。在Cortex-M架構(gòu)上,Ozone可以幫助用戶快速發(fā)現(xiàn)和分析導(dǎo)致CPU故障的軟件錯誤。本文將介紹如何使
    的頭像 發(fā)表于 09-06 11:26 ?5525次閱讀

    分析ARM Cortex-M內(nèi)核復(fù)位啟動過程

    ARM Cortex-M內(nèi)核的復(fù)位啟動過程也被稱為復(fù)位序列(Reset sequence),下面就來簡要總結(jié)分析下這一過程。
    的頭像 發(fā)表于 03-20 09:58 ?2399次閱讀

    Cortex-M 內(nèi)核中斷/異常系統(tǒng)、中斷優(yōu)先級/嵌套 詳解

    Cortex-M 內(nèi)核中斷/異常系統(tǒng)、中斷優(yōu)先級/嵌套 詳解
    的頭像 發(fā)表于 09-27 15:29 ?2227次閱讀
    <b class='flag-5'>Cortex-M</b> 內(nèi)核中斷/<b class='flag-5'>異常</b>系統(tǒng)、中斷優(yōu)先級/嵌套 詳解

    Cortex-M位帶操作的原理

    Cortex-M位帶操作的原理
    的頭像 發(fā)表于 10-24 15:27 ?884次閱讀
    <b class='flag-5'>Cortex-M</b>位帶操作的原理
    主站蜘蛛池模板: 国产精品丝袜在线观看| 欧美视频a| 五月婷婷开心综合| 4438x成人网全国最大| 日本一区二区三区不卡在线看 | 久久xx| 色中色资源| 日本三级香港三级人妇99| 来啊mm影院亚洲mm影院| 丁香婷婷在线视频| 午夜福利毛片| 91福利视频网| 黄视频在线观看网站| 色女人久久| 国产亚洲人成网站天堂岛| 午夜影视体验区| 1000rt人体1000欧美| 岛国毛片在线观看| 久色网| 国产特黄一级一片免费| 欧美三四级片| 色婷婷色综合| 午夜影视免费完整高清在线观看网站| 国产黄网站| 天天摸夜夜摸夜夜狠狠摸| 可以直接看的黄色网址| 美女脱裤子屁屁视频| 亚洲精品一区二区中文| 婷婷月| 国产精品怡红院永久免费| 欧美成人午夜片一一在线观看| 5252a我爱haose01亚洲| 人人看人人添人人爽| 亚洲一级特黄特黄的大片| 2018国产精品| 三级理论手机在线观看视频| 国产caoni111在线观看视频 | 亚洲大尺度视频| 黄色激情小说视频| 欧美成人午夜毛片免费影院| 亚洲高清色图|