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

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

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

3天內不再提示

Cortex-M0處理器內核異常中斷簡介

安芯教育科技 ? 來源:技術社區 ? 作者:技術社區 ? 2022-06-01 14:41 ? 次閱讀
1. Cortex-M0 處理器內核異常中斷簡介

在Cortex‐M0內核上搭載了一個異常響應系統,支持眾多的系統異常和外部中斷。其中,編號為1-15的對應系統異常,大于等于16的則全是外部中斷,優先級的數值越小,則優先級越高。除了個別異常的優先級被定死外,其它異常的優先級都是可編程的。

因為芯片設計可以修改內核的硬件描述源代碼,所以做成芯片后,支持的中斷源數目常常不到240 個,并且優先級的位數也由芯片廠商最終決定。

e58c9a92-e168-11ec-ba43-dac502259ad0.png

類型編號為 1-15 對應系統異常,在《ARM Cortex-M0權威指南》一書中的第12章節<錯誤處理>章節中有描述:對于ARM處理器,架構采用錯誤異常的機制來檢測問題,當一個程序產生了錯誤并且被處理器檢測到時,異常中斷會被觸發,并且核心會跳轉到相應的異常終端處理函數執行,錯誤異常的中斷有如下:

Reset


在上下電、NRST拉低、看門狗復位或軟復位時啟動復位。當復位產生時,處理器停止一切操作,并將復位當做一種特殊形式的異常來執行,進入到對應的中斷函數。當復位撤銷時,從向量表中復位項提供的地址處重新啟動執行,芯片重新開始執行。

NMI


不可屏蔽中斷(NMI),可以由外設產生,也可以由軟件來觸發。這是除復位之外優先級最高的異常中斷,NMI永遠使能,優先級固定為-2,CSS的時鐘安全機制使能判定時鐘失效后就會進入到該中斷。NMI 不能:


1、被屏蔽,它的執行也不能被其他任何異常中止;
2、被除復位之外的任何異常搶占。

HardFault


HardFault 是由于在正常操作過程中或在異常處理過程中出現錯誤而出現的一個異常。HardFault的優先級固定為-1,表明它的優先級要高于任何優先級可配置的異常。

SVCall


管理程序調用(SVC)異常是一個由SVC指令觸發的異常。在OS環境下,應用程序可以使用 SVC指令來訪問OS內核函數和器件驅動。

PendSV


PendSV是一個中斷驅動的系統級服務請求。在OS環境下,當沒有其它異常有效時,使用 PendSV 來進行任務切換。

SysTick


SysTick是一個系統定時器到達零時產生的異常,軟件也可以產生一個SysTick異常。在OS環境下,處理器可以將這個異常用作系統節拍。

中斷(IRQ)


中斷(或 IRQ)是外設發出的一個異常,或者由軟件請求產生的一個異常。在系統中,外設使用中斷來與處理器通信,在中斷函數中可以查詢和清除標志操作。

2. HardFault異常

HardFault (硬件錯誤,也有譯為硬錯誤)是在MCU上編寫程序中所產生的錯誤,硬件錯誤處理幾乎是最高優先級,它的優先級為-1,只有復位和不可屏蔽中斷(NMI)可以對其進行搶占。當它發生時,表示處理器出現了問題,需要采取緊急修復措施。

造成HardFault錯誤的可能原因較多,如何在代碼量較大的情況下,快速定位造成的HardFault的問題代碼,就成為比較關鍵的問題。

本文將以MM32F0130系列MCU為例,Keil-MDK開發環境,總結HardFault的調試、定位方法。在其它Cortex-M0 (M3,M4)內核處理器,和其它開發環境下,也可作為參考。

2.1 可能的原因

《ARM Cortex-M0權威指南》中提到,關于 Cortex M0內核主要有以下幾點引起HardFault的原因:

  • 非法存儲器訪問

  • 非對齊數據訪問

  • 從總線返回錯誤

  • 異常處理中的棧被破壞

  • 程序在某些 C 函數中崩潰

  • 意外地試圖切換至 ARM 狀態

  • 在錯誤的優先級上執行系統服務調用指令(SVC)

從軟件角度,產生HardFault的可能原因有:
  • 數組越界

  • 野指針

  • 未初始化硬件卻開始操作,或無中斷服務函數等

  • 任務堆棧溢出

  • 中斷服務函數設置錯誤

  • 時鐘異常

注意:只有復位和NMI可以搶占優先級固定的 HardFault 處理程序。HardFault可以搶占除復位、NMI 或其它硬故障之外的任何異常。
2.2 可能出現的異常
如果在執行NMI或HardFault處理程序時,或者在一個使用MSP的異常返回時出棧的卻是PSR的時候系統產生一個總線錯誤,處理器進入一個鎖定狀態。當處理器處于鎖定狀態時,它不執行任何指令。處理器保持處于鎖定狀態,直到下面任何一種情況出現:
  • 出現復位

  • 調試器將鎖定狀態終止,出現中止仿真的現象

  • 出現一個NMI,以及當前的鎖定處于HardFault處理程序中

注意:如果鎖定狀態出現在NMI處理程序中,后面的NMI就無法使處理器離開鎖定狀態。 在應用程序中,處理器處于鎖定狀態,會一直在void HardFault\_Handler(void)函數中執行。
voidHardFault_Handler(void)
{/*GotoinfiniteloopwhenHardFaultexceptionoccurs*/
while(1)
{
}
}

下面將在MM32F0130上運行的數組越界代碼為例,具體闡述定位步驟:

voidStackTest(void)
{intdata[3],i;
for(i=0;i<10000;?i++)
????{
????data[i]=1;
????}
}
3. 查找HardFault方法和步驟

實際環境中,由于測試高壓產品常常無法連接調試器,故需要代碼來定位目標語句地址,并通過一定手段保存:

在MM32F0130中,需先修改啟動文件startup\_mm32f013x.s:

HardFault_Handler
PROC
IMPORThard_fault_handler_c;函數聲明
MOVSr0,#4;判斷主棧指針還是進程棧指針
MOVr1,LR
TSTr0,r1
BEQstacking_used_MSP;如果是主棧指針
MRSR0,PSP;否則是進程棧指針,把進程棧指針地址付給R0
Bget_LR_and_branch;跳轉到HardFault中斷程序
stacking_used_MSP
MRSR0,MSP;把主棧指針地址賦給R0
get_LR_and_branch
MOVR1,LR

BLhard_fault_handler_c
ENDP

該段代碼會判斷當前堆棧使用的是MSP或PSP,然后將堆棧參數傳遞給hard\_fault\_handler\_c函數,該函數定義如下:

voidhard_fault_handler_c(unsignedint*hardfault_args,unsignedlr_value)
{unsignedintstacked_r0;//壓棧的r0
unsignedintstacked_r1;//壓棧的r1
unsignedintstacked_r2;//壓棧的r2
unsignedintstacked_r3;//壓棧的r3
unsignedintstacked_r12;//壓棧的r12
unsignedintstacked_lr;//壓棧的lr
unsignedintstacked_pc;//壓棧的pc
unsignedintstacked_psr;//壓棧的psr

stacked_r0=((unsignedint)hardfault_args[0]);
stacked_r1=((unsignedint)hardfault_args[1]);
stacked_r2=((unsignedint)hardfault_args[2]);
stacked_r3=((unsignedint)hardfault_args[3]);
stacked_r12=((unsignedint)hardfault_args[4]);
stacked_lr=((unsignedint)hardfault_args[5]);
stacked_pc=((unsignedint)hardfault_args[6]);
stacked_psr=((unsignedint)hardfault_args[7]);

while(1)
{
printf("[Hardfaulthandler]
");
printf("R0=%x
",stacked_r0);
printf("R1=%x
",stacked_r1);
printf("R2=%x
",stacked_r2);
printf("R3=%x
",stacked_r3);
printf("R12=%x
",stacked_r12);
printf("StackedLR=%x
",stacked_lr);
printf("StackedPC=%x
",stacked_pc);
printf("StackedPSR=%x
",stacked_psr);
printf("SCB_SHCSR=%x
",SCB->SHCSR);
printf("CurrentLR=%x
",lr_value);
}
}

處理器進入到HardFault,將R0~R3、R12、LR、PC信息通過串口打印,根據寄存器信息排查問題代碼。

當處理器處理異常時,除非異常是一個末尾連鎖異常或遲來的異常,否則,處理器把信息都壓入到當前堆棧中入棧(stacking),8個數據字的結構被稱為棧幀(stack frame),棧按照雙字地址對齊方式。

e6090e4c-e168-11ec-ba43-dac502259ad0.png

入棧后,堆棧指針立刻指向棧幀的最低地址單元。棧包含返回地址,這是被中止的程序中下條指令的地址。這個值在異常返回時返還給 PC,使被中止的程序恢復執行。

如下圖連接仿真器查看匯編的地址可以找到是程序問題,根據PC指針地址,在程序生成的.map中查找出問題函數。

e6390cbe-e168-11ec-ba43-dac502259ad0.png

4. 處理建議

根據上述的定位手段可以查找是哪一種情況造成的異常,在編程過程中需要避免出現上述異常情況,但是在惡劣復雜的環境下,可能會小概率觸發HardFault中斷,可以在函數中添加復位或者跳轉指令,具體的實現方式需根據應用和使用環境來評估。

原文標題:HardFault定位方法和步驟

文章出處:【微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

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

    關注

    68

    文章

    19435

    瀏覽量

    231306
  • 中斷
    +關注

    關注

    5

    文章

    900

    瀏覽量

    41792
  • Cortex-M0
    +關注

    關注

    4

    文章

    124

    瀏覽量

    38828

原文標題:HardFault定位方法和步驟

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    采用ARM Cortex-M0處理器內核 英飛凌XMC1302馬達控制解決方案

    XMC1300器件是基于XMC 1000系列微控制的成員,采用ARM Cortex-M0處理器內核。 XMC1300系列解決了控制需要電機控制,數字電源轉換的實時性問題。它還具有外設
    發表于 08-04 09:42 ?9662次閱讀
    采用ARM <b class='flag-5'>Cortex-M0</b><b class='flag-5'>處理器</b><b class='flag-5'>內核</b>  英飛凌XMC1302馬達控制解決方案

    Cortex-M0處理器的基礎知識

    Cortex-M0處理器介紹
    發表于 02-26 06:03

    Cortex-M3處理器是什么

    STM32單片機STM32的核心Cortex-M3處理器是一個標準化的微控制結構,希望思考一下,何為標準化?簡言之,Cortex-M3處理器
    發表于 07-16 06:33

    中斷事件的異常處理是什么意思

    M0內核支持的資源Cortex-M0處理器最多支持32個外部中斷(通常稱作IRQ),還有一個被稱作不可屏蔽
    發表于 12-21 06:50

    制造一種基于Cortex-M0Cortex-M3處理器的SoC

    DesignStartDesignStart計劃可以讓用戶無需預付授權費用,就可以開始設計、制造基于Cortex-M0Cortex-M3處理器的SoC,當產品成功量產出貨之后再支付版稅。ARM
    發表于 07-27 16:58

    ARM Cortex-M0處理器內核LPC1100系列微控制

      恩智浦推出了基于32位ARM Cortex-M0處理器內核的LPC1100系列微控制。該處理器是ARM公司
    發表于 08-31 09:09 ?3565次閱讀
    ARM <b class='flag-5'>Cortex-M0</b><b class='flag-5'>處理器</b><b class='flag-5'>內核</b>LPC1100系列微控制

    基于ARM Cortex-M0處理器的LPC1200工業控制系列

    恩智浦半導體NXP Semiconductors N.V.今天宣布推出其基于ARM Cortex-M0處理器的LPC1200工業控制系列。LPC1200進一步拓展了恩智浦32位ARM微控制的產品范圍,適用于工業和家庭自動化領域
    發表于 02-24 10:00 ?1344次閱讀

    ARM為主流嵌入式SoC設計提供免費的Cortex-M0處理器IP

    ARM公司今天宣布,將為采用ARM Cortex-M0處理器進行商業化之前的SoC元件的設計、原型建模和制造的設計人員提供免費的Cortex-M0處理器IP,以及低成本的FPGA原型建
    發表于 10-15 13:57 ?2652次閱讀

    ARM異常中斷的原因及處理措施

    當ARM異常中斷發生時,系統執行完當前指令后,將跳轉到相應的異常中斷處理程序執行。當異常中斷處理
    的頭像 發表于 06-17 10:05 ?8228次閱讀

    Cortex-M0處理器的存儲模型資料下載

    電子發燒友網為你提供Cortex-M0處理器的存儲模型資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-08 08:40 ?10次下載
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>處理器</b>的存儲模型資料下載

    Cortex-M0處理器異常處理模型資料下載

    電子發燒友網為你提供Cortex-M0處理器異常處理模型資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可
    發表于 04-08 08:41 ?15次下載
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>處理器</b>的<b class='flag-5'>異常</b><b class='flag-5'>處理</b>模型資料下載

    Cortex-M0處理器的故障處理和功耗管理資料下載

    電子發燒友網為你提供Cortex-M0處理器的故障處理和功耗管理資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-08 08:42 ?4次下載
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>處理器</b>的故障<b class='flag-5'>處理</b>和功耗管理資料下載

    Cortex-M0處理器的編程模型資料下載

    電子發燒友網為你提供Cortex-M0處理器的編程模型資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-11 08:42 ?12次下載
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>處理器</b>的編程模型資料下載

    Cortex-M0處理器及其特性資料下載

    電子發燒友網為你提供Cortex-M0處理器及其特性資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-13 08:47 ?15次下載
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>處理器</b>及其特性資料下載

    Cortex-M0處理器中斷請求形式:電平觸發和脈沖輸入

    Cortex-M0處理器允許兩種形式的中斷請求:電平觸發和脈沖輸入。
    的頭像 發表于 05-13 12:05 ?1847次閱讀
    主站蜘蛛池模板: 久久久久久全国免费观看 | 色咯咯 | 女人色视频 | 欧美顶级xxxxbbbb | 亚州第一视频 | 成人毛片一区二区三区 | 欧美性野久久久久久久久 | 91福利社在线观看 | 高清在线免费观看 | 免费人成黄页在线观看1024 | 中文字幕一区在线播放 | 性欧美极品另类 | 午夜欧美在线 | 成人精品一区二区三区电影 | 一区二区三区四区免费视频 | 天天做天天爱夜夜爽毛片毛片 | 六月激情网| 黄色靠逼网站 | 国产美女作爱全过程免费视频 | 老色批网站| 久久国内 | 额去鲁97在线观看视频 | bt天堂电影| 永久免费人成网ww555kkk手机 | 亚洲四虎| 黄色免费网站在线 | 国产女人视频免费观看 | 99免费视频观看 | 欧美综合天天夜夜久久 | 日本加勒比在线精品视频 | 亚洲另类激情综合偷自拍 | 亚洲爱爱网 | 亚洲第一黄色网 | 美国69bj| 免费一级欧美片在线观看 | 久久99国产精品久久99 | 欧美另类高清xxxxx | 国产精品区在线12p 国产精品任我爽爆在线播放6080 | 最近2018年中文字幕大全一 | 亚洲一本高清 | 色综合久久一区二区三区 |