色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

AT32講堂009 | 基于CmBacktrace庫,如何快速追蹤和定位產生HardFault的原因

雅特力 AT32 MCU ? 2022-06-15 10:44 ? 次閱讀

概述

在使用ARM Cortex-M系列MCU時(如AT32 MCU),有時會出現程序運行異常。當通過編譯器在debug模式查原因時,會發現程序跑到HardFault_Handler函數中,產生HardFault,即硬件錯誤。

圖1. HardFault_Handler函數

7dc45b7c-e6f7-11ec-aa96-dac502259ad0.png

本文檔主要介紹一種基于CmBacktrace庫,快速追蹤和定位產生HardFault原因的方法。


HardFault產生原因

常見產生HardFault產生的原因大概有如下幾類:

數組越界操作;

內存溢出,訪問越界;

堆棧溢出,程序跑飛;

中斷處理錯誤。

數組越界

程序中使用了靜態數組,而在動態傳參時數組賦值溢出。或者動態分配內存太小,導致程序異常。

內存溢出

重點檢查RAM區域,程序編譯后執行的RAM數據量大小為多少是否可能越界。一般不要設置到極致的情況,程序中的一些動態數組傳參時會導致異常。

堆棧溢出

這在使用操作系統的代碼中尤其容易發生,在操作系統中,任務的變量均分配放置在任務所申請的堆棧空間中。

例如FreeRTOS中調用xTaskCreate來創建任務,該函數以參數usStackDepth指定任務堆棧的大小,如果指定的堆棧太小,則會堆棧申請不足,進入HardFault。

中斷處理異常

程序中開啟了某些中斷,例如USART,TIMER,RTC等。

但在程序執行中,滿足中斷條件,但并未能查找到該部分對應的中斷服務函數,則可能會出現該異常。


HardFault分析方法

常見的分析方法是:發生異常之后可首先查看LR寄存器中的值,確定當前使用堆棧為MSP或PSP,然后找到相應堆棧的指針,并在內存中查看相應堆棧里的內容。由于異常發生時,內核將R0~R3、R12 Returnaddress、PSR、LR寄存器依次入棧,其中Return address即為發生異常前PC將要執行的下一條指令地址。

但以上方法要求對ARM內核比較熟悉,且操作較為繁瑣。

以下重點介紹采用開源庫CmBacktrace作為快速分析的方法。

基于CmBacktrace庫分析方法

CmBacktrace(Cortex Microcontroller Backtrace)是一款針對ARM Cortex-M系列MCU的錯誤代碼自動追蹤、定位,錯誤原因自動分析的開源庫。主要特性如下:

支持的錯誤包括:

1) 斷言(Assert)

2) 故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault)

故障原因自動診斷:可在故障發生時,自動分析出故障的原因,定位發生故障的代碼位置,而無需再手動分析繁雜的故障寄存器;

適配Cortex-M0/M3/M4/M7 MCU;

支持IAR、KEIL、GCC編譯器;

支持FreeRTOS、UCOSII、UCOSIII、RT-Thread等OS;

基于MDK的CmBacktrace庫使用流程

基于MDK的移植方法按如下步驟進行:

步驟一 添加cm_backtrace庫文件到MDK中

圖2. cm_backtrace庫文件夾

7df7f1d0-e6f7-11ec-aa96-dac502259ad0.png

把cm_backtrace文件夾復制到我們的工程目錄下,并添加至keil工程中。

圖3. 添加cm_backtrace后keil工程目錄

7e294604-e6f7-11ec-aa96-dac502259ad0.png

步驟二 添加頭文件、勾選C99模式

圖4. Keil中配置C99和頭文件

7e554998-e6f7-11ec-aa96-dac502259ad0.png

步驟三 編譯和調試

首先,cmb_cfg.h文件按以下提示配置修改。

圖5. cmb_cfg.h文件配置

7eb24972-e6f7-11ec-aa96-dac502259ad0.png

這時候編譯有一個錯誤,這是因為cmb_fault.c與at32f4xx_int.c中的HardFault_Handler函數重復定義:

圖6. at32f4xx_it.c編譯報錯

7ee724a8-e6f7-11ec-aa96-dac502259ad0.png

需要把at32f4xx_int.c中的HardFault_Handler函數屏蔽掉。

圖7. HardFault_Handler函數屏蔽

7f3febba-e6f7-11ec-aa96-dac502259ad0.png

步驟四 測試與查看

這時候就可以編譯通過了。下面測試這個庫的功能。

測試函數如下:

圖8. 編寫除零錯誤函數

7f5c8a7c-e6f7-11ec-aa96-dac502259ad0.png

然后在主函數中調用cm_backtrace_init();來初始化cm_backtrace,并調用該測試函數:

圖9. main函數調用除零錯誤函數

7f89afc0-e6f7-11ec-aa96-dac502259ad0.png

下載運行程序,PC端接收串口信息

圖10. 串口助手輸出錯誤信息

7fb45a54-e6f7-11ec-aa96-dac502259ad0.png

可以看到,列出了出錯原因(除0)和一條命令。運行這個命令需要用到addr2line.exe工具,該工具在tools文件夾中:

圖11. 定位addr2line.exe位置

7fe6473a-e6f7-11ec-aa96-dac502259ad0.png

有32bit和64bit兩個版本,根據環境選擇,并拷貝到keil工程目錄下的.axf文件所在的文件夾中,如demo中所附工程,則拷貝到如下目錄:

AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\non_os\mdk_v5\objects

圖12. 拷貝addr2line.exe工具

7fff5964-e6f7-11ec-aa96-dac502259ad0.png

進入到cmd窗口,轉到上述文件夾位置,運行串口助手中的那條命令:

addr2line -e CmBacktrace(此處要依據用戶的工程名修改).axf -a -f 080019c6 08001ae9

如demo中工程名為printf,命令則應修改為addr2line -e printf.axf -a -f 080019c6 08001ae9

圖13. 調用CMD運行addr2line.exe工具

800b4f6c-e6f7-11ec-aa96-dac502259ad0.png

可以看到addr2line.exe工具定位出了錯誤相關的代碼行號,查看對應行的代碼:

圖14. 確認錯誤代碼區域

可以看到addr2line.exe工具定位出了錯誤相關的代碼行號,main.c的第60行,fault_test.c的第38行,查看對應行的代碼:

801f3ec8-e6f7-11ec-aa96-dac502259ad0.png

可見,對應的行號正是出錯的地方,使用這個CmBacktrace庫能幫助用戶有效、快速地定位到HardFault之類的錯誤。

案例展示

案例一 無OS除零錯誤

工程位置:AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\non_os

測試內容:在裸機上除零錯誤

案例二 FreeRTOS上除零錯誤

工程位置:AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\os\freertos

測試內容:在FreeROTOS上除零錯誤,需注意tasks.c中有注釋/**/的三處為針對CmBacktrace做出的修改

案例三 USOCⅢ上非對齊訪問錯誤

工程位置:AN0028_SourceCode_V2.0.0\utilities\AN0028_demo\os\ucosiii

測試內容:在UCOSⅢ上非對齊訪問錯誤,需注意os_cfg.h中#define OS_CFG_DBG_EN為1u

關于雅特力雅特力科技于2016年成立,是一家致力于推動全球市場32位微控制器(MCU)創新趨勢的芯片設計公司,專注于ARM Cortex-M4/M0+的32位微控制器研發與創新,全系列采用55nm先進工藝及ARM Cortex-M4高效能或M0+低功耗內核,締造M4業界最高主頻288MHz運算效能,并支持工業級別芯片工作溫度范圍(-40°~105°)。雅特力目前已累積相當多元的終端產品成功案例:如微型打印機、掃地機、光流無人機、熱成像儀、激光雷達、工業縫紉機、伺服驅控、電競周邊市場、斷路器、ADAS、T-BOX、數字電源、電動工具等終端設備應用,廣泛地覆蓋5G物聯網、消費、商務及工控等領域。

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

    關注

    146

    文章

    17316

    瀏覽量

    352509
收藏 人收藏

    評論

    相關推薦

    智慧園區人員定位及軌跡追蹤技術哪個好?

    智慧園區作為城市發展的重要組成部分,其管理和服務效率的提升日益受到重視。人員定位及軌跡追蹤技術作為智慧園區建設的核心環節之一,對于提高園區安全性、優化資源配置、提升服務體驗具有重要意義。然而,傳統
    的頭像 發表于 01-22 11:18 ?125次閱讀
    智慧園區人員<b class='flag-5'>定位</b>及軌跡<b class='flag-5'>追蹤</b>技術哪個好?

    IP定位離線的特點以及作用

    很多人知道IP定位,但是對離線不是很理解。這篇文章會和大家闡述離線的概念、特點以及具體有什么作用。 IP定位路徑https://www.ipdatacloud.com/?utm-s
    的頭像 發表于 12-06 09:56 ?239次閱讀

    園區封閉化管理之人員和車輛定位及軌跡追蹤

    如今園區封閉化管理的需求越來越普遍,特別是化工類的園區,為了實現對園區內人員和車輛的準確高效管控,人車定位及軌跡追蹤技術應運而生。本文將介紹這一技術在園區封閉化管理中的重要作用。 一、 什么是人車
    的頭像 發表于 10-11 11:20 ?460次閱讀
    園區封閉化管理之人員和車輛<b class='flag-5'>定位</b>及軌跡<b class='flag-5'>追蹤</b>

    無線定位追蹤器跟手機怎么連接

    無線定位追蹤器與手機的連接方法主要取決于追蹤器的類型和功能。以下是一些常見的連接方式: 一、藍牙連接 確保兼容性 :首先,確保你的定位追蹤
    的頭像 發表于 09-29 10:01 ?3.3w次閱讀

    說明增強現實技術的產生原因

    增強現實技術(Augmented Reality, AR)的產生,主要源于人類對信息獲取和交互方式的不斷追求與探索,以及計算機技術、圖像處理、傳感器技術、網絡通信等多領域技術的快速發展。以下是增強現實技術產生的主要
    的頭像 發表于 09-15 14:44 ?756次閱讀

    AT32講堂087 | 雅特力AT32 IDE快速入門指南

    新建項目新項目向導AT32ID提供支持雅特力MCU的C語言項目模板,方便用戶快速創建項目。菜單欄【File】>【New】>【CProject】。新建項目向導的對話框將出現。在對
    的頭像 發表于 09-15 08:08 ?543次閱讀
    <b class='flag-5'>AT32</b><b class='flag-5'>講堂</b>087 | 雅特力<b class='flag-5'>AT32</b> IDE<b class='flag-5'>快速</b>入門指南

    儀表溫度異常的產生原因

    電子發燒友網站提供《儀表溫度異常的產生原因.docx》資料免費下載
    發表于 09-12 14:09 ?0次下載

    簡述自激振蕩產生原因

    自激振蕩是指在沒有外部驅動信號的情況下,系統內部由于某種機制自發產生的振蕩現象。這種現象在電子、機械、聲學等多個領域中廣泛存在,其產生原因復雜多樣。以下是對自激振蕩產生
    的頭像 發表于 09-03 10:59 ?1120次閱讀

    AT32講堂085 | 雅特力AT32 MCU HICK時鐘校準

    簡介AT32系列MCU內部都有提供適合運行的內部高速時鐘(HICK),其本質就是內置于芯片的RC振蕩器。在25℃下,其典型值頻率8MHz的精度由工廠校準到±1%,在-40到105℃,該內部高速時鐘
    的頭像 發表于 08-30 12:26 ?821次閱讀
    <b class='flag-5'>AT32</b><b class='flag-5'>講堂</b>085 | 雅特力<b class='flag-5'>AT32</b> MCU HICK時鐘校準

    IP定位技術追蹤網絡攻擊源的方法

    如今,網絡安全受到黑客威脅和病毒攻擊越來越頻繁,追蹤攻擊源頭對于維護網絡安全變得尤為重要。當我們遭受網絡攻擊時,通過IP地址追蹤技術結合各種技術手段和算法,可以逐步還原出攻擊者的IP地址路徑,隨著
    的頭像 發表于 08-29 16:14 ?474次閱讀

    智慧園區人員定位及軌跡追蹤技術探討

    智慧園區是指利用先進的信息技術和物聯網技術,將各種設備、系統和人員進行互聯互通,實現智能化管理和服務的園區。在這樣的園區中,人員定位和軌跡追蹤是極其重要的功能之一。本文將探討智慧園區人員定位及軌跡
    的頭像 發表于 08-28 11:31 ?546次閱讀

    STM32G0 FLASH快速寫入發生HardFault原因

    32的,成員是64bit的數組。 調用第3步寫入函數就會發生hardfault,查了很多資料沒有找到原因,求指導
    發表于 07-23 07:44

    stm32F429zg主頻設置為180M全速運行有概率進入HardFault_Handler的原因

    調試很容進HardFault_Handler。 我嘗試尋跳轉到HardFault_Handler的原因,但找到的造成HardFault_Handler的地址全是無規律的,后續我將主頻降
    發表于 05-29 06:02

    工程里在keil設置界面,只要把微勾選的去掉,則程序運行就會進入hardfault為什么?

    我的工程里在keil設置界面,只要把微勾選的去掉,則程序運行就會進入hardfault,選中就沒事了,這是為什么呢?
    發表于 04-17 06:11

    開關電源產生電磁干擾的原因有哪些

    開關電源產生電磁干擾(EMI)的原因主要與其工作方式有關。開關電源通過高頻開關來控制能量的轉換和傳輸,這種快速切換會在電源內部和周圍空間產生電磁場,從而引起電磁干擾。以下是一些詳細的
    的頭像 發表于 02-16 17:11 ?2986次閱讀
    主站蜘蛛池模板: 国内精品视频在线播放一区 | 高清无码色大片中文 | 4399的视频BD高清在线观看免费 | 亚洲美女视频高清在线看 | 国产精品高清视亚洲一区二区 | 秋霞网站一级一片 | 成人免费视频网站www | beeg日本老师按摩 | 中文字幕无码亚洲字幕成A人蜜桃 | 嗯好大好猛皇上好深用力 | 午夜伦yy44880影院 | 4k岛国精品午夜高清在线观看 | 俄罗斯性孕妇孕交 | 亚洲精品久久一区二区三区四区 | 国产一区二区波多野结衣 | 中文字幕乱码亚洲无线三区 | 久久精品国产亚洲精品2020 | 妖精视频免费高清观看 | 色多多污网站在线观看 | 在线视频久久只有精品第一日韩 | 医生含着我的奶边摸边做 | 久草在线福利视频在线播放 | sao虎影院桃红视频在线观看 | 免费麻豆国产黄网站在线观看 | 妈妈的职业3完整版在线播放 | 亚洲中文字幕日产乱码2020 | 国产精品免费大片 | 国产亚洲精品字幕在线观看 | 99热久久爱五月天婷婷 | 日本护士hd | 久久精品中文字幕免费 | 亚洲色欲色欲无码AV | 国产精品一区二区欧美视频 | 色狠狠一区 | 日本高清免费一本视频在线观看 | 国产成人在线免费观看 | 亚洲人成网77777色在线播放 | 伊人久久电影院 | 伊人久久综合成人亚洲 | 国产精品视频在线自在线 | 性色爽爱性色爽爱网站 |