chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

Cortex-M0+處理器的HardFault錯誤介紹

中穎電子 ? 來源:中穎電子 ? 2025-10-14 10:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.HardFault介紹

ARM處理器中,如果一個程序產生了錯誤并且被處理器檢測到,就會產生錯誤異常。Cortex-M0+處理器只有一種異常用以處理錯誤:HardFault。

HardFault,可重復且不可能恢復的故障。當它發(fā)生時,意味著微控制器出現了問題,并且需要采取修復錯誤。

2.HardFault錯誤是如何產生的

Cortex-M0+產生HardFault錯誤的類型主要有以下三種:

存儲器相關:

-- 總線錯誤(可以是程序訪問也可以是數據訪問),在總線傳輸中使用非法地址會產生error;

-- 試圖在標記為不可執(zhí)行的存儲器區(qū)域內執(zhí)行程序;

-- 試圖在系統(tǒng)控制空間中訪問非特權訪問等級的寄存器(非特權訪問功能在M0+處理器中為可選功能);

-- 存儲器訪問和定義在存儲器保護單元中的設置沖突(存儲器保護單元在M0+處理器中為可選功能);

程序錯誤:

-- 未定義指令的執(zhí)行;

-- 試圖切換至ARM狀態(tài):Cortex-M0+處理器無ARM指令,正常情況下處理器不會切至ARM狀態(tài);

-- 試圖進行非對齊存儲器訪問;

-- Cortex-M0+處理器支持的Thumb指令只能產生對齊訪問,也就是說傳輸地址只能是傳輸大小的整數倍; 如字傳輸(32位)只能訪問0x0/0x4/0x8/0xc之類的地址;

--通常情況下,使用C編譯器不會產生任何非對齊訪問(有編譯器自動完成);如果C程序直接操作一個指針,則可能存在非對齊訪問;

-- 使用匯編編程時,也可能會出現非對齊傳輸;

-- 當SVC異常優(yōu)先級與當前的優(yōu)先級相比相同或更小時,試圖執(zhí)行SVC指令;

-- SVC只能運行在線程模式或者比SVC自身優(yōu)先級低的異常處理中(SVC一般在OS環(huán)境中使用),否則會觸發(fā)硬件錯誤異常;

-- 執(zhí)行異常返回時EXC_RETURN的值非法;

-- EXC_RETURN在Cortex-M0+處理器中的合法值為0xFFFFFFF1、0xFFFFFFF9、0xFFFFFFFD;

-- 當調試未使能時(沒有連接調試器),試圖執(zhí)行斷點指令(BKPT);

-- BKPT指令為調試過程中提供斷點功能;

中穎芯片硬件模塊操作異常:

-- Flash解鎖寄存器寫入值錯誤;

-- Flash解鎖后,重新解鎖;

-- DMA讀取保留地址區(qū)或非法讀寫;

3.如何定位HardFault錯誤位置

當異常產生時,內核會做如下動作:

壓棧并且棧指針(SP)更新;

處理器取出異常向量(確定ISR的起始地址)并將其寫入R15(PC);

寄存器更新(LR、終端程序狀態(tài)寄存器(IPSR)、NVIC)

當異常發(fā)生時,8個寄存器會被自動壓棧,這些寄存器包括R0~R3、R12、R14(LR)、返回地址/PC和xPSR,壓棧順序如下表:

48992fc6-9dd4-11f0-8c8f-92fbcf53809c.png

可以通過解析進入Hard Fault中斷后的寄存器值及入棧的寄存器值來定位出錯位置,并找到問題點。

定位HardFault錯誤位置步驟如下:

48f70f2e-9dd4-11f0-8c8f-92fbcf53809c.png

4.舉例說明如何定位HardFault錯誤位置

使用調試器(以MDK編譯器為例)

--在工程中創(chuàng)建HardFault中斷處理函數,并在其函數中添加硬件斷點或斷點指令(BKPT),當發(fā)生HardFault錯誤時,處理器會自動暫停到斷點或斷點指令處

;

495488a2-9dd4-11f0-8c8f-92fbcf53809c.png

-- 根據章節(jié)3中的HardFault錯誤分析流程,找到發(fā)生HardFault錯誤時的地址位置;

49af7fdc-9dd4-11f0-8c8f-92fbcf53809c.png

-- 結合程序分析具體出錯原因。

無調試器 -- 當仿真口被占用時,需要通過串口或其他接口,提取并輸出發(fā)生HardFault錯誤時的各調試信息; -- 下面以串口為例,說明如何實現調試信息的輸出: -- 在startup_xxx.s啟動文件的“HardFault_Handler”中做如下處理:

4a12d3e8-9dd4-11f0-8c8f-92fbcf53809c.png

-- 屏蔽C程序中的“HardFault_Handler”中斷服務程序,增加棧數據輸出函數“HardFault_Handler_c”,如下:

4a6ef11e-9dd4-11f0-8c8f-92fbcf53809c.png

-- 發(fā)生HardFault錯誤后,串口軟件會輸出當前寄存器及棧內的寄存器值,通過章節(jié)3中的HardFault錯誤定位流程,進一步分析錯誤原因。

4ad2c374-9dd4-11f0-8c8f-92fbcf53809c.png

5、如何避免產生Hard Fault

?給棧預留足夠的空間:

-- 工程編譯后,在生成的編譯信息文件中,找到以工程名命名的.htm文件,此文件列出工程使用的棧最大長度(如下);

-- 一般在此基礎上增加至少0.5倍(預留給中斷服務程序及其臨時變量),配置為棧大?。?/p>

?在C語言嵌套匯編代碼時,請注意匯編指令是否存在非對齊情況;若存在,請增加NOP指令使其對齊;

?程序中不使用斷點指令(BKPT);若調試過程中使用了斷點指令,請在程序Release時屏蔽此斷點指令;

?非OS應用,不使用SVC指令;

?正確配置芯片的硬件模塊,避免引起HardFault錯誤。

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

    關注

    48

    文章

    8305

    瀏覽量

    163536
  • 處理器
    +關注

    關注

    68

    文章

    20208

    瀏覽量

    249731
  • ARM
    ARM
    +關注

    關注

    135

    文章

    9530

    瀏覽量

    390302
  • Cortex
    +關注

    關注

    2

    文章

    220

    瀏覽量

    48538

原文標題:Cortex-M0+ HardFault錯誤介紹

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Cortex-M0 處理器介紹

    Cortex-M0 處理器簡介ARM公司的Cortex-M0應用于各種微控制(MCU)中,并可讓研發(fā)工程師以8位的價位創(chuàng)造32位的的效能,并將傳統(tǒng)的8位和16位的
    發(fā)表于 01-16 08:04

    ARM Cortex-M0Cortex-M0+到底有什么區(qū)別呢

    ARM Cortex-M0Cortex-M0+到底有什么區(qū)別呢
    發(fā)表于 01-04 23:15

    ARM Cortex-M0+中斷機制和中斷編程步驟

    慕課蘇州大學.嵌入式開發(fā)及應用.第二章.入門與軟件框架.ARM Cortex-M0+中斷機制和中斷編程步驟0 目錄2 入門與軟件框架2.7 ARM Cortex-M0+中斷機制和中斷編程步驟
    發(fā)表于 11-08 09:10

    ARM Cortex-M0+內核定時

    慕課蘇州大學.嵌入式開發(fā)及應用.第三章.基本模塊.ARM Cortex-M0+內核定時 (Systic0 目錄3 基本模塊3.1 ARM Cortex-M0+內核定時
    發(fā)表于 11-08 06:36

    Cortex-M0+具有哪些指令?

    Cortex-M0+具有哪些指令?
    發(fā)表于 01-26 06:23

    ARM Cortex-M0+處理器數據表

    Cortex-M0+處理器建立在非常成功的Cortex-M0處理器的基礎上,保持了完全的指令集和工具兼容性,同時進一步降低了能耗并提高了性能。 Co
    發(fā)表于 08-25 06:03

    Cortex-M0+——ARM推出全球最節(jié)能處理器

    ARM今天發(fā)布了一款擁有全球最高功耗效率的微處理器——ARM? Cortex?-M0+處理器。該款經過優(yōu)化的Cortex-M0+
    發(fā)表于 03-15 09:04 ?1764次閱讀
    <b class='flag-5'>Cortex-M0+</b>——ARM推出全球最節(jié)能<b class='flag-5'>處理器</b>

    ARM發(fā)布Cortex-M0+處理器號稱世界最高效

    ARM今天宣布推出號稱是“世界上能效最高的微處理器”,型號為“Cortex-M0+”,可為智能傳感、智能控制系統(tǒng)提供優(yōu)化的超低功耗、低成本單片機(MCU)
    發(fā)表于 03-20 08:51 ?1291次閱讀

    飛思卡爾率先推出Cortex-M0+控制,為何投入ARM懷抱?

      飛思卡爾2012年3月份宣布了全新的基于ARM Cortex-M0+處理器的Kinetis L系列微控制(MCU),入門級Kinetis L系列MCU的首批試用樣件計劃于第二季度提供。這是業(yè)內率先推出基于CortexM
    發(fā)表于 04-25 15:01 ?1578次閱讀

    關于最低功耗ARM Cortex-M0+的ARM處理器介紹

    這是世界上最低功耗的32位基於ARM Cortex-M0+的ARM處理器,針對可穿載應用(可支持基本觸摸功能)和物聯網的傳感網絡,一枚電池可運作長達十年。這個全新的超低功耗 Atmel
    的頭像 發(fā)表于 07-08 01:05 ?8757次閱讀

    Cortex-M0+指令集

    Cortex-M0+指令集Cortex M0+保留了Cortex-M0的全部56個指令。根據功能可以將Cortex-M0+
    發(fā)表于 12-01 13:06 ?18次下載
    <b class='flag-5'>Cortex-M0+</b>指令集

    cortex內核hardfault錯誤的定位方法實戰(zhàn)

    單片機一般是cortex-m3之類的內核,其實其他內核也是一個道理。hardfault錯誤一般是操作了不該操作的內存,或者執(zhí)行了不該執(zhí)行的動作,例如一個非法的函數指針,你非要去調用。調試這個
    發(fā)表于 12-01 13:36 ?10次下載
    <b class='flag-5'>cortex</b>內核<b class='flag-5'>hardfault</b><b class='flag-5'>錯誤</b>的定位方法實戰(zhàn)

    Cortex M0 HardFault診斷應用筆記

    電子發(fā)燒友網站提供《Cortex M0 HardFault診斷應用筆記.zip》資料免費下載
    發(fā)表于 09-22 10:22 ?0次下載
    <b class='flag-5'>Cortex</b> <b class='flag-5'>M0</b> <b class='flag-5'>HardFault</b>診斷應用筆記

    AN028 Cortex-M3內核HardFault錯誤調試定位方法

    AN028 Cortex-M3內核HardFault錯誤調試定位方法
    發(fā)表于 02-27 18:32 ?0次下載
    AN028 <b class='flag-5'>Cortex-M</b>3內核<b class='flag-5'>HardFault</b><b class='flag-5'>錯誤</b>調試定位方法

    Cortex-M0+內核介紹

    ARM Cortex-M0+是2012年3月14日ARM公司發(fā)布的一款低功耗效率、能效最高的ARM處理器,可用于存在設計約束的嵌入式應用。它具有最小的硅面積和極少的代碼量,從而使開發(fā)人員能夠以16
    的頭像 發(fā)表于 03-27 09:13 ?2154次閱讀
    <b class='flag-5'>Cortex-M0+</b>內核<b class='flag-5'>介紹</b>