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

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

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

如何在IAR Embedded Workbench for Arm中調(diào)試Cortex-M HardFault

電子工程師 ? 來(lái)源:IAR愛(ài)亞系統(tǒng) ? 作者:IAR愛(ài)亞系統(tǒng) ? 2022-08-05 11:11 ? 次閱讀

基于Cortex-M的MCU被廣泛應(yīng)用于各種嵌入式系統(tǒng)中,Cortex-M有很多優(yōu)點(diǎn),比如高性能、低功耗、高代碼密度、豐富的調(diào)試功能、強(qiáng)大的生態(tài)系統(tǒng)等。在錯(cuò)誤異常處理上,Cortex-M提供了強(qiáng)大的錯(cuò)誤異常機(jī)制,幫助提升系統(tǒng)的穩(wěn)健性。

本文主要介紹如何在IAR Embedded Workbench for Arm中調(diào)試Cortex-M HardFault,幫助開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中盡早發(fā)現(xiàn)代碼中的錯(cuò)誤異常、提升開(kāi)發(fā)和調(diào)試效率、提高代碼質(zhì)量。

關(guān)于 Cortex-M Fault

Cortex-M包含了如下幾種Fault:

HardFault: 在異常處理中發(fā)生錯(cuò)誤導(dǎo)致的Fault,或者是不能被其它異常處理的Fault。

MemManage Fault: 違反內(nèi)存訪問(wèn)規(guī)則導(dǎo)致的Fault。

BusFault: 內(nèi)存訪問(wèn)過(guò)程中總線出錯(cuò)導(dǎo)致的Fault。

UsageFault: 指令執(zhí)行時(shí)出錯(cuò)導(dǎo)致的Fault,包括:

- 未定義的指令

- 非法未對(duì)齊訪問(wèn)

- 指令執(zhí)行時(shí)非法狀態(tài)

- 異常返回錯(cuò)誤 下面兩個(gè)需要額外使能: - 未對(duì)齊訪問(wèn)字和半字內(nèi)存

- 除零操作

其中,HardFault是永遠(yuǎn)使能的,而MemManage Fault,BusFault和UsageFault默認(rèn)是沒(méi)有使能的,對(duì)應(yīng)的Fault發(fā)生之后會(huì)升級(jí)為HardFault。

在IAR Embedded Workbench for Arm中
調(diào)試Cortex-M HardFault

下面通過(guò)幾個(gè)示例介紹如何在IAR Embedded Workbench for Arm中調(diào)試Cortex-M HardFault。

示例1除零操作導(dǎo)致UsageFault

這個(gè)例子中,通過(guò)配置CCR寄存器中的DIV_0_TRP來(lái)使能除零操作異常。在Call Stack窗口中,可以看到對(duì)應(yīng)發(fā)生除零操作的源代碼行。在Register窗口中,可以看到 CFSR 寄存器中的DIVBYZERO 置位,表示出現(xiàn)了除零操作異常。在Debug Log和Fault exception viewer窗口中,可以看到詳細(xì)的錯(cuò)誤信息:發(fā)生了除零操作異常,導(dǎo)致UsageFault,由于UsageFault沒(méi)有使能,升級(jí)為HardFault,同時(shí)給出了除零操作異常發(fā)生的PC地址和LR地址。

c67070b2-146b-11ed-ba43-dac502259ad0.png

示例2訪問(wèn)無(wú)效地址導(dǎo)致BusFault

這個(gè)例子中,地址0x7000000是MCU中的無(wú)效地址,當(dāng)訪問(wèn)無(wú)效地址時(shí),會(huì)產(chǎn)生BusFault。在Call Stack窗口中,可以看到訪問(wèn)無(wú)效地址的源代碼行。在Register窗口中,可以看到CFSR 寄存器的的PRECISERR和BFARVALID置位,表示出現(xiàn)了Precise data bus error,同時(shí)BFAR中保存了對(duì)應(yīng)訪問(wèn)的無(wú)效地址。在Debug Log和Fault exception viewer窗口中,可以看到詳細(xì)的錯(cuò)誤信息:發(fā)生了precise data access error,導(dǎo)致BusFault,由于BusFault沒(méi)有使能,升級(jí)為HardFault,同時(shí)給出了precise data access error發(fā)生時(shí)的PC地址和LR地址及對(duì)應(yīng)訪問(wèn)的無(wú)效地址。

c69ec2fa-146b-11ed-ba43-dac502259ad0.png

示例3從XN(Execute Never)內(nèi)存運(yùn)行程序?qū)е翸emManage Fault

在這個(gè)例子中,地址0x4000000在Cortex-M中是屬Peripheral地址空間,對(duì)應(yīng)的內(nèi)存屬性屬于XN(Execute Never):即如果從XN內(nèi)存運(yùn)行程序會(huì)造成MemManage Fault。在Call Stack窗口中,可以看到對(duì)應(yīng)的源代碼行。在Register窗口中,可以看到CFSR 寄存器的的IACCVIOL置位,表示發(fā)生了instruction access violation。在Debug Log和Fault exception viewer窗口中,可以看到詳細(xì)的錯(cuò)誤信息:XN訪問(wèn)違反導(dǎo)致MemManage Fault,由于MemManage Fault沒(méi)有使能,升級(jí)為HardFault,同時(shí)給出了XN訪問(wèn)發(fā)生時(shí)的PC地址和LR地址, 通過(guò)LR地址可以找到之前函數(shù)調(diào)用的地方(即導(dǎo)致MemManage Fault的地方)。

c6d05b26-146b-11ed-ba43-dac502259ad0.png

注意事項(xiàng)

1. 為了在調(diào)試時(shí)出現(xiàn)Fault之后程序能夠立即停下來(lái),從而可以更好地分析出現(xiàn)Fault之后的現(xiàn)場(chǎng),需要使能對(duì)應(yīng)的Vector catch選項(xiàng)(默認(rèn)是使能的):關(guān)于Vector catch的更多信息,請(qǐng)參考ARMv7-M Architecture Reference Manual。

c6e686a8-146b-11ed-ba43-dac502259ad0.png

2. 本文中的示例是基于Cortex-M4,其它Cortex-M的錯(cuò)誤異常機(jī)制可能會(huì)有所不同(比如基于ARMv6-M的Cortex-M0/M0+/M1只有HardFault,沒(méi)有MemManage Fault,BusFault和UsageFault),對(duì)應(yīng)Register窗口中的信息可能與上面的截圖不同,具體取決于所使用的 Cortex-M 類型。但是本文的方法適用于所有Cortex-M的HardFault調(diào)試。

總結(jié)

本文以Cortex-M4為例,介紹了如何在IAR Embedded Workbench for Arm中調(diào)試Cortex-M HardFault。通過(guò)分析Call Stack,Register,Debug Log和Fault exception viewer窗口中的信息,可以快速地找到HardFault的原因,盡早發(fā)現(xiàn)代碼中的錯(cuò)誤異常,從而提升開(kāi)發(fā)和調(diào)試效率,提高代碼質(zhì)量。

審核編輯 :李倩

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

    關(guān)注

    10

    文章

    2900

    瀏覽量

    88310
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    354

    瀏覽量

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

    關(guān)注

    2

    文章

    229

    瀏覽量

    29819

原文標(biāo)題:在IAR Embedded Workbench for Arm中調(diào)試Cortex-M HardFault

文章出處:【微信號(hào):IAR愛(ài)亞系統(tǒng),微信公眾號(hào):IAR愛(ài)亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    IAR與紫光同芯合作,全面支持THA6系列汽車芯片

    近日,全球領(lǐng)先的嵌入式系統(tǒng)開(kāi)發(fā)軟件解決方案提供商IAR與業(yè)內(nèi)知名的芯片及解決方案提供商紫光同芯攜手宣布,最新版本的IAR Embedded Workbench for
    的頭像 發(fā)表于 12-27 11:46 ?864次閱讀

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

    Ozone可以幫助用戶快速分析和查找導(dǎo)致CPU故障的軟件bug。本文解釋如何使用Ozone的調(diào)試功能,深入了解Cortex-M架構(gòu)上的這些錯(cuò)誤。
    的頭像 發(fā)表于 11-29 11:14 ?893次閱讀
    如何使用Ozone分析<b class='flag-5'>Cortex-M</b>異常

    芯海通用 MCU應(yīng)用筆記 :在 IAR 及 MDK 開(kāi)發(fā)環(huán)境下使用 printf 函數(shù)重定向移植差異指南

    最新發(fā)布的集成開(kāi)發(fā)環(huán)境 IAR Embedded Workbench for Arm 9.32 版本已全面支持芯海科技 32 位 MCU 芯片,其
    發(fā)表于 05-16 11:56

    芯海應(yīng)用筆記:通用 MCU 基于 IAR 芯片包 IAR9 開(kāi)發(fā)指南

    芯??萍寂c IAR Systems 達(dá)成合作,IAR Embedded Workbench for Arm 已全面支持芯??萍糃S32F10
    發(fā)表于 05-16 11:52

    IAR版本為Embedded Workbench 6.5 Kickstart 1.4 編繹報(bào)錯(cuò)怎么解決?

    請(qǐng)教 IAR 這個(gè)錯(cuò)誤是什么問(wèn)題 在IAR版本為Embedded Workbench 6.0 Kickstart 1.30 編繹正常沒(méi)出錯(cuò) 在I
    發(fā)表于 05-09 06:36

    IAR FOR ARMIAR FOR STM8無(wú)法共存怎么解決?

    IAR Embedded Workbench,CD 找了原程序,發(fā)現(xiàn)IAR FOR ARM和FOR STM8安裝完后,都叫IarIdePm
    發(fā)表于 04-07 07:39

    何在IAR IDE調(diào)試基于Cortex-R52的RZ/T&amp;N MPU的變量實(shí)時(shí)監(jiān)控?

    變量實(shí)時(shí)監(jiān)視功能是指IAR Embedded Workbench集成開(kāi)發(fā)環(huán)境中提供的實(shí)時(shí)變量監(jiān)控功能。
    的頭像 發(fā)表于 03-27 13:35 ?2661次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>IAR</b> IDE<b class='flag-5'>中</b><b class='flag-5'>調(diào)試</b>基于<b class='flag-5'>Cortex</b>-R52的RZ/T&amp;N MPU的變量實(shí)時(shí)監(jiān)控?

    Cortex-M0+內(nèi)核介紹

    和8位的價(jià)位實(shí)現(xiàn)32位性能。處理器的低門數(shù)使其能夠部署在需要簡(jiǎn)單功能的應(yīng)用。 作為ARM Cortex-M處理器系列的最新成員,32位Cortex-M0+處理器采用了低成本90納米低
    的頭像 發(fā)表于 03-27 09:13 ?1140次閱讀
    <b class='flag-5'>Cortex-M</b>0+內(nèi)核介紹

    IAR全面支持小華全系芯片,強(qiáng)化工控及汽車MCU生態(tài)圈

    來(lái)源:IAR IAR Embedded Workbench for Arm已全面支持小華半導(dǎo)體系列芯片,加速高端工控MCU和車用MCU應(yīng)用的
    的頭像 發(fā)表于 03-13 23:02 ?562次閱讀
    <b class='flag-5'>IAR</b>全面支持小華全系芯片,強(qiáng)化工控及汽車MCU生態(tài)圈

    IAR已全面支持小華半導(dǎo)體系列芯片,強(qiáng)化工控汽車MCU生態(tài)圈

    IAR Embedded Workbench for Arm 已全面支持小華半導(dǎo)體系列芯片,加速高端工控MCU和車用MCU應(yīng)用的安全開(kāi)發(fā)。
    的頭像 發(fā)表于 03-07 11:38 ?1809次閱讀
    <b class='flag-5'>IAR</b>已全面支持小華半導(dǎo)體系列芯片,強(qiáng)化工控汽車MCU生態(tài)圈

    Cortex-M85內(nèi)核單片機(jī)如何快速上手

    2022年4月,Arm推出了全新的MCU級(jí)內(nèi)核Cortex-M85。截止目前(2024年2月),Cortex-M85是最新、最強(qiáng)的Cortex-M內(nèi)核。
    發(fā)表于 02-29 09:35 ?799次閱讀
    <b class='flag-5'>Cortex-M</b>85內(nèi)核單片機(jī)如何快速上手

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    全球知名的嵌入式系統(tǒng)開(kāi)發(fā)軟件解決方案供應(yīng)商IAR Systems近日宣布,其旗艦產(chǎn)品IAR Embedded Workbench for Arm
    的頭像 發(fā)表于 02-22 17:29 ?1463次閱讀

    ARM?Cortex?-M23 32位MCU數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《ARM?Cortex?-M23 32位MCU數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 02-22 14:32 ?0次下載
    <b class='flag-5'>ARM</b>?<b class='flag-5'>Cortex</b>?-<b class='flag-5'>M</b>23 32位MCU數(shù)據(jù)表

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    瑞典烏普薩拉,2024年2月20日 – 全球領(lǐng)先的嵌入式系統(tǒng)開(kāi)發(fā)軟件解決方案供應(yīng)商IAR宣布:推出其旗艦產(chǎn)品IAREmbedded Workbench for Arm功能安全版的最新版本9.50.3。
    的頭像 發(fā)表于 02-21 13:47 ?870次閱讀

    CYT2B9可以使用IAR + J-link進(jìn)行Corex-M4工程的調(diào)試嗎?

    您好,我正在使用 CYT2B9,請(qǐng)問(wèn)可以使用 IAR + J-link 進(jìn)行 Corex-M4 工程的調(diào)試嗎? 我們目前的情況是只能使用 IAR+J-link
    發(fā)表于 02-02 08:31