Microsoft PowerPoint - Application_HardFault的诊断_V2.1.ppt [Compatibility Mode]

Similar documents
<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

STM32 for sensorless vector control

STM32F05x training in Prague - DAY1

第 十 一 期 2015 年 2 月 关 于 车 辆 购 置 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 转 至 全 文 ) 国 家 税 务 总 局 公 告 2015 年 第 4 号 关 于 电 池 涂 料 消 费 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳

,,,,,,,,,,,,, :,, ;,,,,, ( ),,,, : ( ) ; ( ) ; ( ) ( ) ; ( ) ( A ) ; ( ) ( ),,,,,,, 80

Andes Technology PPT Temp

学习MSP430单片机推荐参考书

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

Microsoft Word 箕æ−¥ï¼‹å®ı稿;

98年度即測即評學科測試與即測即評即發證技術士技能檢定簡章

<4D F736F F D20B5DA32D5C220436F D4D33B4A6C0EDC6F7CCE5CFB5BDE1B9B92E646F6378>

C 1

Stm32中断优先级相关概念与使用笔记

C/C++ - 函数

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

CC213


51 C 51 isp 10 C PCB C C C C KEIL


报 告 简 要 丽 江 古 城 位 于 云 南 省 西 北 部, 始 建 于 宋 末 元 初 古 城 西 北 方 30 公 里 处 是 海 拔 5596 米 的 玉 龙 雪 山 及 第 四 世 冰 川 遗 迹 丽 江 古 城 在 南 宋 时 期 就 初 具 规 模, 已 有 八 九 百 年 的 历

有 不 良 企 图 时, 就 要 立 即 躲 开 他 当 你 实 在 难 以 分 辨 对 方 是 真 心 实 意 还 是 虚 情 假 意 时, 可 向 父 母 老 师 或 周 围 较 成 熟 和 亲 近 的 朋 友 请 教, 请 他 们 帮 你 分 析 情 况, 做 出 判 断 此 时, 拒 绝 帮

內 容 及 試 題 範 例 術 科 評 量 規 範 評 分 標 準 一 (, 工 具 與 材 料 由 本 校 提 供, 考 生 無 須 自 備 ) ( 一 ) 基 本 焊 接 工 具 操 作 及 辨 識 基 本 手 工 具 設 備 ( 二 ) 測 驗 時 間 50 分 鐘 ( 三 ) 工 具 與 材

2.??,,,,, ;,,,,,,,, 3.?,,?,?,

宜蘭縣風景區管理所五峰旗風景特定風景區開放行動咖啡車作業投標須知

第 二 十 七 章 一 夜 苦 熬 第 二 十 八 章 租 房 同 居 第 二 十 九 章 二 人 世 界 第 三 十 章 取 消 面 试 第 三 十 一 章 中 暑 卧 床 第 三 十 二 章 找 到 工 作 第

美 国 研 究

玻璃幕墙工程质量检验标准 JGJ/T

2

《垓下歌》 項羽

交 通 部 公 路 總 局 新 竹 區 監 理 所 104 年 第 2 次 契 約 服 務 員 甄 試 試 場 序 號 試 場 序 號 姓 名 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15 A16 張 齡 文 王 美 蕙 吳

玻璃幕墙工程质量检验标准 JGJ/T


2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Cortex-M Series-Lesson1

华恒家庭网关方案

新版 明解C言語入門編

Input Methods for Linux (Desktop and Mobile)

Cortex M3 权威指南初稿前置 Cortex-M3 权威指南 Joseph Yiu 著 宋岩译 1

The Cortex-M3 Embedded Systems

untitled

Microsoft Word - freeRTOS移椊.docx

C/C++程序设计 - 字符串与格式化输入/输出


int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

Microsoft Word - 澎湖田調報告_璉謙組.doc

新・解きながら学ぶC言語


说 : 荀 子 极 偏 驳, 只 一 句 性 恶, 大 本 已 失 5 朱 熹 说 : 荀 扬 不 惟 说 性 不 是, 从 头 到 底 皆 不 识 6 采 取 的 都 是 这 种 理 论 框 架 另 一 种 理 论 框 架 始 于 20 世 纪 前 期, 这 便 是 诸 子 学 研 究 的 框 架

1 1 5,

Microsoft Word - 面試題庫.doc

J pdf

(Microsoft Word - \244\244\244\345\254\354\244\345\266\260.doc)

001柯正峰.PDF

新・明解C言語入門編『索引』

Slide 1


PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

目 录 : 前 言 我 的 游 戏 评 论 观 读 者 是 谁? 写 议 论 文, 不 要 写 说 明 书 写 游 戏 评 测 的 十 二 个 要 点 结 论 或 主 要 观 点 要 写 在 最 前 面 文

<4D F736F F F696E74202D204D34D1D0CCD6BBE F55434F534949D4DA4C4D3446D6D0B5C4D2C6D6B2D3EBD3A6D3C3>

chp6.ppt

Microsoft Word - 2CA13內文.doc

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

C语言的应用.PDF

C/C++语言 - C/C++数据

Microsoft Word - LMB402CBC-AppNote-V0.1.doc

前 置 2

CHCN_8-14_K.indd

untitled

标题

bingdian001.com

正式发文

辦 學 宗 旨 1. 有 教 無 類 因 材 施 教, 為 學 生 提 供 均 衡 的 基 礎 教 育 2. 讓 學 生 在 愉 快 關 愛 的 環 境 下 成 長, 啟 發 他 們 的 潛 能 3. 培 養 學 生 正 面 的 價 值 觀 及 積 極 的 態 度, 從 而 達 到 全 人 發 展

教 育 部 97 年 度 教 育 實 習 績 優 獎 示 例 彙 編 壹 實 習 輔 導 理 念 與 目 標 海 倫. 凱 勒 : 最 美 好 的 東 西 是 看 不 到 摸 不 到 的, 但 可 以 用 心 感 覺 維 克 多 雨 果 : 有 比 大 海 更 遼 闊 的 景 色, 那 是 天 空,

c_cpp

2009三季报全文.doc

貳、研究目的

untitled

98-02臺師大游騰達.doc

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C/C++ - 文件IO

1 CPU

C C

C++ 程式設計

ARM处理器中ARM和THUMB状态的切换(Interworking)

Microsoft Word - ~ doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

ARM7 体系结构 1.ARM 简介 6.ARM 内部寄存器 2.ARM7TDMI 7. 当前程序状态寄存器 3.ARM 的模块 内核和功能框图 4.ARM 处理器状态 8.ARM 体系的异常 中断及其向量表 9.ARM 体系的存储系统 5.ARM 处理器模式

<4D F736F F D20C7B0CBC4D5C2D7F7D2B5CCE22E646F6378>

科学计算的语言-FORTRAN95

邏輯分析儀的概念與原理-展示版

Microsoft Word - ch01.doc

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

Ps22Pdf

務 相 關 的 約 點 及 內 容 / 托 嬰 契 約 (2) 居 家 托 育 人 員 在 中 心 托 育 人 員 2. 瞭 解 契 約 ( 到 ) 宅 托 兒 契 約 一 天 的 工 作 重 的 意 義 (3) 契 約 的 意 義 分 點 及 內 容 法 律 效 類 自 由 與 限 制 及 2.

Microsoft Word - MSP430 Launchpad 指导书.docx

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

Cortex-M for Beginners

公 衛 政 策 與 進 展 鼓 勵 學 弟 妹 進 入 政 府 機 關, 對 國 家 社 會 貢 獻 所 學, 好 的 公 衛 政 策 就 是 行 善 話 題 一 轉, 我 們 聊 到 了 公 衛 人 的 出 路 問 題 待 在 政 府 機 構 的 這 些 年, 每 當 任 用 新 人 時, 她 常

untitled

Transcription:

Hard Fault 的诊断

Cortex-M3 异常模型 2 异常编号 IRQ 编号 异常类型优先级备注 1 Reset 3, 最高 2 14 NMI 2 永远被使能 3 13 Hard Fault 1 Hard Fault 4 12 MM Fault 5 11 Bus Fault 可配置 6 10 Usage Fault 7 10 11 5 SVCall 12 4 DebugMonitor 可配置 13 14 2 PendSV 15 1 SysTick 可配置 Local Fault 由 SVC 指令触发 Fault handler

用法错误 (Usage Fault) 执行未定义指令 非对齐操作 除零 复位时默认未使能 常见的四种错误异常 3 总线错误 (Bus Fault) 取指令 数据读写 堆栈操作 复位时默认未使能 存储器管理错误 (Memory Management Fault) 违反 MPU 设定的存储器访问规则 复位时默认未使能 硬错误 (Hard Fault) 以上异常处理被关闭, 而又发生了异常, 则触发 执行异常处理时, 发生了异常, 则触发 复位时默认使能

用法错误异常 4 用法错误异常是与指令译码相关联的处理机制, 通常包括以下类错误型 : 企图执行未定义指令 企图进入 ARM 状态 无效的中断返回码 企图执行协处理器指令 使用多重加载 / 存储指令时地址没对齐 使能控制 SCB->SHCSR. USGFAULTENA @0xE000ED24 何时会意外地试图切入 ARM 状态 : >> 执行 BX Rn 指令时,Rn 的最低位 (LSB) 为 0 >> 异常向量表中的向量为偶数,LSB = 0 >> POP {,PC} 时, 弹给 PC 的值为偶数,LSB = 0

用法错误异常寄存器 5 发生用法错误时, 可通过查看寄存器了解出错的原因 SCB->CFSR. Usage Fault(UFSR) @0xE000ED2A 1 清零位段 名称 类型 含义 备注 企图执行除 0 操作 9 DIVBYZERO 可( 指令 :SDIV UDIV) 读8 UNALIGNED 企图执行非对齐访问写3 NOCP 企图执行协处理器指令 2 INVPC 无效的异常返回码 1 INVSTATE 试图切换到 ARM 状态 0 UNDEFINSTR 企图执行未定义指令 使能控制 : SCB->CCR.DIV_0_TRP 使能控制 : SCB->CCR.UNALIGN_TRP

总线错误异常 6 当内核通过 AHB 接口传送数据时收到了一个错误应答信号, 则认总线传输错误, 进而发起总线错误异常请求 ; 通常异常来自 : 取指令时发生错误, 通常称为 预取指流产 数据读 写时发生错误, 也叫 数据流产 响应中断时, 出 入栈发生错误 使能控制 SCB->SHCSR. BUSFAULTENA @0xE000ED24 AHB 总线收到 错误 应答, 通常有以下诱因 : >> 企图访问无效的存储器区域, 常见于企图访问的地址没有存储器 >> 设备未准备就绪, 不能进行总线访问 >> 企图发起的传输宽度不被目标设备所支持 >> 在用户权限下程序企图访问特权模式下的设备

总线错误异常寄存器 7 发生 Bus Fault 时, 可以查看总线错误状态寄存器了解异常的大致类型, 供异常处理程序分析 SCB->CFSR.Bus Fault(BFSR) @0xE000ED29 位段名称类型含义备注 BFAR 包含引起总 7 BFARVALID =1 表示 BFAR 有效线异常的指令地址可6:5 -- 读-- 4 STKERR 写入栈时发生错误 Stack 3 UNSTKERR 1 清出栈时发生错误 2 IMPRECISERR 零不精确的数据总线错误 D-Bus 1 PRECISERR 精确的数据总线错误 0 IBUSERR 指令总线错误 I-Bus

存储器管理错误异常 8 存储器管理错误异常是由于违规访问存储器空间或由某些非法访问引发的 ; 通常包括以下类型 : 访问存储区域时违反了 MPU 的设置规则 越权访问, 访问了没有权限访问的地址 ; 访问了没有存储器的地址 试图从不可执行区域 (XN) 执行代码 对只读区域进行写操作 使能控制 SCB->SHCSR. MEMFAULTENA @0xE000ED24 存储器管理错误异常, 通常是与 MPU 相关联的 其诱因往往是违反了 MPU 设置的访问规则 某些非法访问, 如在不可执行的存储器区域取指, 也会会引发该异常, 既使系统中没有 MPU 或 MPU 被关掉了

存储器管理错误异常寄存器 9 发生 Memory Management Fault 时, 可以查看存储器管理错误状态寄存器了解异常的类型 SCB->CFSR. Memory Manage Fault(MFSR) @0xE000ED28 可读1 位段 名称 类型 含义 7 MMARVALID =1 表示 MMAR 有效 6:5 -- -- 4 MSTKERR 入栈时企图访问不被允许的区域写3 MUNSTKERR 出栈时企图访问不被允许的区域清2 -- 零-- 1 DACCVIOL 企图从不允许访问的区域读 写数据 0 IACCVIOL 企图从不允许访问的区域取指令

硬错误异常 10 硬错误异常是应对系统严重错误而设计的, 其优先级为 -1, 仅次于 NMI 异常 触发硬错误异常的原因有 : 调试出错 前面三个常规错误异常不能及时响应 为响应中断, 取中断向量时发生错误 仍可通过 PRIMASK 关闭 注意 : >> 当总线错误异常 存储器管理错误异常 用法错误异常无法及时得到响应时或未被使能时, 系统将产生硬错异常 >> 当硬错误异常服务例程又引发新的硬错误异常时, 系统将进入死锁状态, 只能由复位使其退出

硬错误异常寄存器 11 硬错误状态寄存器中记录有产生硬错误异常的诱因 SCB->HFSR @0xE000ED2C 1 清零位段 名称 类型 含义 31 DEBUGEVT 可因调试事件而产生读 由总线错误 存储器管理错误 30 FORCED 写用法错误提升而来的硬错误 29:2 -- -- 1 VECTBL 取中断向量时出错 0 -- --

调试异常寄存器 12 由于调试原因引发的硬错误, 可以通过调试错误状态寄存器查找其诱因 SCB->DFSR @0xE000ED30 1 清零位段 名称 类型 含义 31:5 -- 可-- 4 EXTERNAL 读外部调试请求 3 VCATCH 写发生向量捕获 1 BKPT 执行 BKPT 指令 2 DWTTRAP 数据监测点匹配 0 HALTED NVIC 停机请求

错误异常发生时 13 上下文 (Stack Frame) 被入栈保存 R0~R3, R12, LR,PC,xPSR 上下文保存在哪个堆栈中? 由此时的 LR 决定 LR = EXC_RETURN LR.2 = 1, 保存在 Main Stack, 由 MSP 指向 LR.2 = 0, 保存在 Process Stack, 由 PSP 指向 被打断的上下文的 stack frame 被入栈保存

记录发生异常时的现场数据 14 采集现场有助于分析出错原因 可以通过仿真器查看, 也可以通过串行通信口打印方式获得, 如下面这段代码 HardFault_Handler: TST LR, #4 ITE EQ MRSEQ R0, MSP MRSNE R0, PSP B hard_fault_handler_c void hard_fault_handler_c (unsigned int * hardfault_args) { unsigned int stacked_r0; unsigned int stacked_r1; unsigned int stacked_r2; unsigned int stacked_r3; unsigned int stacked_r12; unsigned int stacked_lr; unsigned int stacked_pc; unsigned int stacked_psr; stacked_r0 = ((unsigned long) hardfault_args[0]); stacked_r1 = ((unsigned long) hardfault_args[1]); stacked_r2 = ((unsigned long) hardfault_args[2]); stacked_r3 = ((unsigned long) hardfault_args[3]); stacked_r12 = ((unsigned long) hardfault_args[4]); stacked_lr = ((unsigned long) hardfault_args[5]); stacked_pc = ((unsigned long) hardfault_args[6]); stacked_psr = ((unsigned long) hardfault_args[7]);

异常处理程序样例 ( 续 ) 15 printf ("\n\n[hard fault handler - all numbers in hex]\n"); printf ("R0 = %x\n", stacked_r0); printf ("R1 = %x\n", stacked_r1); printf ("R2 = %x\n", stacked_r2); printf ("R3 = %x\n", stacked_r3); printf ("R12 = %x\n", stacked_r12); printf ("LR [R14] = %x subroutine call return address\n", stacked_lr); printf ("PC [R15] = %x program counter\n", stacked_pc); printf ("PSR = %x\n", stacked_psr); printf ("BFAR = %x\n", (*((volatile unsigned long *)(0xE000ED38)))); printf ("CFSR = %x\n", (*((volatile unsigned long *)(0xE000ED28)))); printf ("HFSR = %x\n", (*((volatile unsigned long *)(0xE000ED2C)))); printf ("DFSR = %x\n", (*((volatile unsigned long *)(0xE000ED30)))); printf ("AFSR = %x\n", (*((volatile unsigned long *)(0xE000ED3C)))); } printf ("SCB_SHCSR = %x\n", SCB->SHCSR); while (1);