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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

1.HardFault介紹

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

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

2.HardFault錯誤是如何產(chǎn)生的

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

存儲器相關(guān):

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

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

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

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

程序錯誤:

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

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

-- 試圖進(jìn)行非對齊存儲器訪問;

-- Cortex-M0+處理器支持的Thumb指令只能產(chǎn)生對齊訪問,也就是說傳輸?shù)刂分荒苁莻鬏敶笮〉恼麛?shù)倍; 如字傳輸(32位)只能訪問0x0/0x4/0x8/0xc之類的地址;

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

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

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

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

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

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

-- 當(dāng)調(diào)試未使能時(沒有連接調(diào)試器),試圖執(zhí)行斷點(diǎn)指令(BKPT);

-- BKPT指令為調(diào)試過程中提供斷點(diǎn)功能;

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

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

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

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

3.如何定位HardFault錯誤位置

當(dāng)異常產(chǎn)生時,內(nèi)核會做如下動作:

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

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

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

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

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

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

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

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

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

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

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

;

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

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

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

-- 結(jié)合程序分析具體出錯原因。

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

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

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

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

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

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

5、如何避免產(chǎn)生Hard Fault

?給棧預(yù)留足夠的空間:

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

-- 一般在此基礎(chǔ)上增加至少0.5倍(預(yù)留給中斷服務(wù)程序及其臨時變量),配置為棧大??;

?在C語言嵌套匯編代碼時,請注意匯編指令是否存在非對齊情況;若存在,請?jiān)黾覰OP指令使其對齊;

?程序中不使用斷點(diǎn)指令(BKPT);若調(diào)試過程中使用了斷點(diǎn)指令,請?jiān)诔绦騌elease時屏蔽此斷點(diǎn)指令;

?非OS應(yīng)用,不使用SVC指令;

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

聲明:本文內(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)注

    48

    文章

    8172

    瀏覽量

    159790
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    20064

    瀏覽量

    242549
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    135

    文章

    9441

    瀏覽量

    385428
  • Cortex
    +關(guān)注

    關(guān)注

    2

    文章

    212

    瀏覽量

    48041

原文標(biāo)題:Cortex-M0+ HardFault錯誤介紹

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    如何選擇正確的Cortex-M處理器?

    和普通的數(shù)據(jù)處理,這些指令已經(jīng)足夠了。這么小的指令集可以用很少的電路門數(shù)來實(shí)現(xiàn)處理器設(shè)計(jì),Cortex-M0Cortex-M0+最小配置僅僅12K門。然而,其中的很多指令無法使用
    發(fā)表于 10-22 08:16

    ARM Cortex-M0+中斷機(jī)制和中斷編程步驟

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

    ARM Cortex-M0+內(nèi)核定時

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

    Cortex-M0+具有哪些指令?

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

    ARM Cortex-M0+處理器數(shù)據(jù)表

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

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

    ARM今天發(fā)布了一款擁有全球最高功耗效率的微處理器——ARM? Cortex?-M0+處理器。該款經(jīng)過優(yōu)化的Cortex-M0+
    發(fā)表于 03-15 09:04 ?1709次閱讀
    <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)化的超低功耗、低成本單片機(jī)(MCU)
    發(fā)表于 03-20 08:51 ?1258次閱讀

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

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

    關(guān)于最低功耗ARM Cortex-M0+的ARM處理器介紹

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

    Cortex-M0+指令集

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

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

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

    Cortex M0 HardFault診斷應(yīng)用筆記

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

    AN028 Cortex-M3內(nèi)核HardFault錯誤調(diào)試定位方法

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

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

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