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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

剖析Cortex-M3發生Fault故障類型及產生原因

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-05-08 15:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們平時的項目,可能會遇到死機的情況,通過在線調試,或者打印消息,可能會發現,怎么進入了 HardFault_Handler 中斷呢? 這種“硬故障”是我們常見的一種故障,導致硬故障的原因也有很多。本文針對 Cortex-M3 說說Fault故障相關的內容。

1

Fault故障種類

Fault故障的種類有很多,拿本文Cortex-M3來說,主要有:

HardFault:硬故障

MemManage:存儲器管理故障

BusFault:總線故障

UsageFault:用法故障

3af924d0-ac42-11eb-9728-12bb97331649.png

比如,在stm32f10x_it.c源代碼中,有這樣的中斷入口:

void HardFault_Handler(void){ /* Go to infinite loop when Hard Fault exception occurs */ while (1) { }}

void MemManage_Handler(void){ /* Go to infinite loop when Memory Manage exception occurs */ while (1) { }}

void BusFault_Handler(void){ /* Go to infinite loop when Bus Fault exception occurs */ while (1) { }}

void UsageFault_Handler(void){ /* Go to infinite loop when Usage Fault exception occurs */ while (1) { }}

2

Fault故障描述

每一種Fault故障的產生,都肯定是有一定原因的,如果你代碼產生了Fault故障中斷,說明代碼某些地方引起了Fault故障。

1.HardFault:硬故障

通過截圖的描述,你會發現硬故障是一種“不可編程”的故障,因為存儲器管理故障、總線故障、用法故障如果不能得到執行,就為上訪為硬故障。

3af924d0-ac42-11eb-9728-12bb97331649.png

比如:比如在取向量時產生的總線故障也按會硬故障進行處理。所以,你會發現出現故障,很多時候都是硬故障

硬故障狀態寄存器描述:

3b7d6de4-ac42-11eb-9728-12bb97331649.png

通過狀態寄存器,你會發現產生硬故障的原因有以上幾種。 2.MemManage:存儲器管理故障 存儲器管理故障通常與MPU(內存保護單元)有關,之前給大家分享過MPU相關的文章《什么是Cortex-M內核的MPU?》。 通常就是我們說的“內存越界”就會導致存儲器管理故障,細說引起該故障的誘因有:

訪問了 MPU 設置區域覆蓋范圍之外的地址

往只讀 region 寫數據

用戶級下訪問了只允許在特權級下訪問的地址

存儲器管理故障狀態寄存器:

3b8febae-ac42-11eb-9728-12bb97331649.png

通過狀態寄存器,你會發現引起該故障的一些原因。 3.BusFault:總線故障 總線故障,顧名思義就是對“總線”操作出現問題,導致的故障。 比如:當 AHB 接口上正在傳送數據時,如果回復了一個錯誤信號(error response),則會產生總線故障。 產生總線故障的場合:

取指,通常被稱作“預取流產”

數據讀/寫,通常被稱作“數據流產”

觸發總線故障的動作:

中斷處理起始階段的堆棧 PUSH 動作。稱為“入棧錯誤”

中斷處理收尾階段的堆棧 POP 動作。稱為“出棧錯誤”

3ba59ad0-ac42-11eb-9728-12bb97331649.png

同樣,通過總線故障狀態寄存器了解產生的原因:

3bb8ed56-ac42-11eb-9728-12bb97331649.png

4.UsageFault:用法故障 用法故障相對不常見,出現該故障通常是進行了“未對齊訪問操作”,其他導致該故障問題很少見。 比如:執行了未定義的指令、除數為0(編譯器都會避免)、無效的中斷返回等這些情況比較少見。 用法故障狀態寄存器:

3bc89de6-ac42-11eb-9728-12bb97331649.png

3

應對故障

不知道大家平時有沒有對這些進行有效避免?

這里簡單說幾點應對故障的措施:

1.通過故障狀態寄存器的值來判定程序錯誤

在故障中斷函數中,讀取故障的狀態(上面描述了狀態寄存器),比如硬故障:

void HardFault_Handler(void){//讀取狀態寄存器,打印狀態寄存器,判斷什么原因引起故障printf("狀態x信息"); while (1) { }}

如果不想系統處于死機狀態,可以在中斷里面做軟復位。

2.提前對代碼進行分析、預判

比如:通過代碼靜態分析工具,對代碼進行分析、查找bug。

前不久才分享過一篇文章:推薦幾個代碼靜態分析工具

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5432

    瀏覽量

    124174
  • 數據
    +關注

    關注

    8

    文章

    7252

    瀏覽量

    91706
  • 代碼
    +關注

    關注

    30

    文章

    4895

    瀏覽量

    70555
  • 編譯器
    +關注

    關注

    1

    文章

    1661

    瀏覽量

    50129

原文標題:Cortex-M3發生Fault故障類型及產生原因

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    電機疑難故障原因分析及解決措施

    ,電機無法拖動負載,最終導致了故障現象的產生。通過對轉子發生軸向位移的軸承位置的調整,解除了故障,恢復了正常生產。 **純分享帖,需要者可點擊附件免費獲取完整資料~~~*附件:電機疑難
    發表于 05-14 16:31

    MAX32555 Cortex-M3閃存微控制器英文數據手冊

    電子發燒友網站提供《MAX32555 Cortex-M3閃存微控制器英文數據手冊.pdf》資料免費下載
    發表于 04-25 16:40 ?1次下載

    UPS(不間斷電源)故障原因竟然是這樣

    UPS(不間斷電源)故障原因竟然是這樣
    的頭像 發表于 04-19 13:53 ?332次閱讀
    UPS(不間斷電源)<b class='flag-5'>故障</b>頻<b class='flag-5'>發</b>?<b class='flag-5'>原因</b>竟然是這樣

    電機故障診斷常見誤區的剖析

    純分享帖,需要者可點擊附件獲取完整資料~~~*附件:電機故障診斷常見誤區的剖析.pdf (免責聲明:本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第一時間告知,刪除內容!)
    發表于 04-07 17:35

    Cortex-M3/M4F指令集技術用戶手冊

    電子發燒友網站提供《Cortex-M3/M4F指令集技術用戶手冊.pdf》資料免費下載
    發表于 12-23 16:31 ?8次下載
    <b class='flag-5'>Cortex-M3</b>/<b class='flag-5'>M</b>4F指令集技術用戶手冊

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

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

    error與fault的有區別與聯系

    "Error"和"fault"是軟件工程中常用的兩個術語,用于描述軟件系統中的問題或異常。雖然它們經常被互換使用,但它們在含義上有一些區別。 Error(錯誤):指的是在軟件系統中的人為或非人為原因
    的頭像 發表于 11-12 09:51 ?1527次閱讀

    TAS5711發生PLL autolock error錯誤,這個錯誤怎么解決?

    TAS5711發生PLL autolock error錯誤,這個錯誤怎么解決,
    發表于 10-29 06:56

    變頻器故障類型產生原因

    模塊是變頻器的指揮中心,主要由運算電路、檢測電路、控制信號的輸入、輸出電路和驅動電路等構成,主要完成對逆變器的開關控制、對整流器的電壓控制及完成各種保護功能,也是經常出故障的環節。一、故障類型
    的頭像 發表于 10-23 15:52 ?890次閱讀

    TPA3116偶爾會發生DC FAULT,為什么?怎么解決?

    2.6V; 我的周期是500ms,超過2.6V的時間約277ms 3、偶爾會發生dc fault, 輸出就會如上圖,檢測到fault也輸出低電平了。按理還沒到420ms啊,怎么會偶爾
    發表于 10-16 06:17

    TAS6424L-Q1 Dc診斷開啟自動模式后,應該隨時能檢測出故障狀態,為何會產生clock fault?

    是為什么,1我的理解Dc 診斷開啟自動模式后,應該隨時能檢測出故障狀態;且為何會產生clock fault?
    發表于 10-12 08:46

    MOS管泄漏電流的類型產生原因

    MOS管(金屬氧化物半導體場效應晶體管)的泄漏電流是指在MOS管關斷狀態下,從源極或漏極到襯底之間仍然存在的微弱電流。這些泄漏電流可能對電路的性能和穩定性產生不利影響,因此需要深入了解其類型產生
    的頭像 發表于 10-10 15:11 ?4806次閱讀

    TAS6421-Q1產生負載短路故障,功放fault腳不置位是怎么回事?

    產生負載短路故障,檢測到AMP fault腳拉低,讀取0x0C, 0x0D寄存器確認故障類型后,操作0x21寄存器清除
    發表于 10-09 06:04

    TPA3255-Q1使用時第一次上電故障引腳為高電平,再次上電故障引腳被拉低且無法復位,為什么?

    TPA3255-Q1使用時第一次上電故障引腳為高電平,測量正常,斷電后再次上電,發現引腳報故障,復位引腳復位,FAULT故障)引腳也無法恢復正常。會有什么
    發表于 09-29 08:36

    基于ARM Cortex-M3單片機研發的國產指紋芯片 - P1032BF1

    指紋芯片 - P1032BF1是一款基于ARM Cortex-M3的單片機,專為Wi-Fi /藍牙通信控制而設計;可應用于智能鎖;支持大型程序代碼和擁有大型嵌入式SRAM,也可用于一般的MCU應用。
    的頭像 發表于 07-10 09:22 ?1074次閱讀
    基于ARM <b class='flag-5'>Cortex-M3</b>單片機研發的國產指紋芯片 - P1032BF1
    主站蜘蛛池模板: 狠狠的干狠狠的操 | 亚洲一区视频在线 | 午夜黄色影片 | 久久久精品免费热线观看 | 亚欧乱色束缚一区二区三区 | 天天干人人 | 伊人yinren6综合网色狠狠 | 丁香六月婷婷综合 | 在线网站黄 | 影音先锋五月天 | 亚洲综合丁香婷婷六月香 | 欧美性猛交xxxx乱大交中文 | 上色天天综合网 | 免费 的黄色 | 天天干天天爽 | 丁香六月婷婷激情 | 射在老师的里面真爽 | 狠狠色丁香九九婷婷综合五月 | 四虎永久网址在线观看 | 国产午夜精品一区二区 | 久优草| 影音先锋在线亚洲精品推荐 | 欧美30p| 女人精aaaa片一级毛片女女 | 海棠高h粗暴调教双性男男 韩国韩宝贝2020vip福利视频 | 免费黄色福利 | 92香蕉视频 | 亚洲午夜顶级嘿嘿嘿影院 | 特级全黄一级毛片免费 | 亚洲第一区精品日韩在线播放 | 4hu四虎永久免在线视 | www.色老头.com | 亚欧美综合 | 亚洲韩国欧美一区二区三区 | 在线a人片免费观看不卡 | 国产亚洲papapa | 色午夜视频 | 国产亚洲第一 | 色花堂国产精品首页第一页 | 正在播放国产乱子伦视频 | 美女性色 |