Fault
来源:互联网 发布:淘宝上怎么购买av种子 编辑:程序博客网 时间:2024/05/21 11:16
Cortex-M3(CM3)和Cortex-M4(CM4)内核Fault:捕获非法的内存方法和非法的编程行为。
Hard Fault:
内存溢出或者访问越界,堆栈溢出,增加堆栈的大小都属于,如果上面的3类异常没有单独的定义和处理,则都会触发该类异常。出现Hard Fault会在停在 if (CoreDebug->DHCSR & 1) {内的__breakpoint(0)处;__breakpoint()函数是ARM编译器所支持的内部指令,这个函数的作用是在指令流中插入一个断点指令(BKTP)。
Cortex-M内核复位后,非Hard Fault被禁能,包括:
Bus Fault: 在fetch指令、数据读写、fetch中断向量或中断时存储恢复寄存器栈情况下,检测到内存访问错误则产生Bus Fault。
Memory Management Fault: 访问了内存管理单元(MPU)定义的不合法的内存区域,比如向只读区域写入数据。
Usage Fault: 检测到未定义指令或在存取内存时有未对齐。如果使能相应控制位,还可以检测出除数为零以及其他未对齐的内存访问,使能: SCB ->CCR |= 0x18; /* enable div-by-0 and unaligned fault*/
通过SCB的寄存器组的寄存器初始化使能:
SCB ->SHCSR |= 0x00007000; // enable Usage Fault, Bus Fault, and MMU Fault
设置异常处理程序的优先级:
SCB->SHP[0]:Memory Management Fault的优先级
SCB->SHP[1]:Bus Fault 的优先级
SCB->SHP[2]:Usage Fault 的优先级
寄存器组的定义在core_cm3.h中:
typedef struct
{
__IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */
__IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */
__IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */
__IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register
__IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */
__IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */
__IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11,
__IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */
__IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */
__IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */
__IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */
__IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */
__IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */
__IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */
__IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */
__IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */
__IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */
__IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */
__IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */
uint32_t RESERVED0[5U];
__IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */
} SCB_Type;
- Fault
- Segmentation Fault
- fault: extern
- SOAP Fault
- Segmentation Fault
- Segmentation fault
- SEGMENTATION FAULT
- Segmentation fault
- segmentation fault
- segment fault
- segmentation fault
- segmentation fault
- segmentation fault
- Segment fault
- double fault
- segmentation fault
- segmentation fault
- segmentation fault
- 分享一些PHP开发者实用工具(上)
- ThinkPHP常用内置函数
- 360WiFi文件夹存储位置如何更改
- [js]实现简单的省市二级联动下拉选择菜单
- Gradle Error:Failed to open zip file. Gradle's dependency cache may be corrupt.
- Fault
- JAVA中这些你都疏忽了吗?-标识符及其命名规范
- maven引起的xml Offending resource:
- PHP高效率写法
- ssh远程访问虚拟机中Ubuntu系统
- AppCompatActivity android.content.res.Resources$NotFoundException: Resource ID #0x7f060052
- 防护篇(5.4) 03. 防范 DDoS 攻击 ❀ 飞塔 (Fortinet) 防火墙
- React学习(三)数组变量
- Set集合笔记