专栏首页嵌入式程序猿ARM cortexM4 异常处理(1)

ARM cortexM4 异常处理(1)

在嵌入式开发中,尤其是在ARM的程序开发中,对异常的处理起着至关重要作用,那么cortexM4内核是如何管理异常的呢?我们将分几个小篇来讲解异常,今天先来了解下基本知识

异常状态

每一中异常总共有四种状态:

非激活态:异常没有被激活且没有被挂起。

挂起态: 异常等待处理器服务,一个外设的中断或者软件中断请求可以改变 相应中断的状态到挂起态,中断其实也是一种异常。

激活态: 处理器正在处理异常且还没有完成。

激活且挂起态:这种状态显然从字面意思理解就是激活态和挂起态的组合,即 处理器正在服务于异常时,有来自于同源的挂起异常

异常类型

Reset 复位:异常模式将复位看做是一种特殊类型的异常。

NMI 非屏蔽中断: 非屏蔽中断是除复位以外最高优先级的异常,NMI永久使能,且优先级为-2,NMI不能被其他异常从激活态屏蔽或阻止,也不能被其他异常抢占,除过复位。

HardFault: 硬件故障异常的发生,是因为异常处理错误,或者因为一种异常不能被其他异常机制管理,有固定的优先级-1,

MemMange:内存管理故障异常,是与内存保护相关的故障,

BusFault:总线故障异常是指令和数据内存处理时相关的故障,可能来自于内存系统中,检测到总线故障。

UsageFault: UsageFault异常是指令执行相关的故障,包括未定义的指令,非法未对齐的存取访问,指令执行的无效状态,异常返回错误,除数为0.

SVCall: SVCall 是被SVC 指令触发的一种异常,在操作系统环境下,应用程序可以使用SVC指令进入操作系统内核功能和设备驱动。

PendSV: PendSV是中断驱动的系统级服务请求,

SysTick: SysTick异常是系统定时器递减到0时候产生的,软件也可以产生SysTick异常,在操作系统环境下,处理器可以使用SysTick作为系统的滴答时钟。

Interrupt(ISR):这个大家应该都很熟悉,就是我们经常用的外设的中断,也可以是软件请求的中断,在系统中,外设使用中断和内核通信交流。各种异常的属性总结如下表:

异常处理

异常处理有三种:

Interrupt Service Routines(ISR)中断服务程序:主要处理中断

Fault Handlers:主要处理HardFault, MemManage Fault,UsageFault,BusFault,

System Handlers: 主要处理NMI,PendSV,SVCall,SysTick等

本文分享自微信公众号 - 嵌入式程序猿(InterruptISR),作者:小猿

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ARM cortexM4异常处理(2)

    上次课程我们简单讲解了异常的一些基础知识,希望对大家有所帮助,今天我们来看看异常在向量表中的位置,异常的入口和返回。 中断向量表 有人会问,不是讲异常吗,怎么...

    用户1605515
  • 制造商代码字段在J1939中的位置你搞懂了吗?

    SAE 自推出CAN的高层协议,J1939标准后,在商用车,卡车,舰船,农机等上面应用非常广泛,标准要求每一个节点都有一个8字节的名字域,用来识别,其中有11位...

    用户1605515
  • 快速学会web Server的裁剪移植

    前几次给大家讲过freeRTOS的移植,不管是在我们移植好的,还是KSDK移植好的BSP里都有server的演示程序,KSDK里面使用lwip开源TCP/IP协...

    用户1605515
  • 列出一些你常见的运行时异常?

    唐怀瑟
  • 使用R语言进行异常检测

    本文结合R语言,展示了异常检测的案例,主要内容如下: (1)单变量的异常检测 (2)使用LOF(local outlier factor,局部异常因子)进行异常...

    小莹莹
  • 我为什么反对用异常做流程控制?

    像SSH/M这种基础框架的出现,让不少程序员“瘫痪”成了流水线工人。以前小心翼翼方能写就的逻辑分支判断,演变成了直接丢个异常然后坐等AOP拦截处理,此时的拦截器...

    曲水流觞
  • 数据分析之异常值处理

    异常值是我们在数据分析中会经常遇到的一种特殊情况,所谓的异常值就是非正常数据。有的时候异常数据对我们是有用的,有的时候异常数据不仅对我们无用,反而会影响我们正常...

    张俊红
  • Java编程思想之通过异常处理错误

    1.     异常分为被检查的异常和运行时异常,被检查的异常在编译时被强制要求检查。异常被用来错误报告和错误恢复,但很大一部分都是用作错误报告的。

    用户3148059
  • 10 个深恶痛绝的 Java 异常。。

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题。

    Java技术栈
  • 10 个深恶痛绝的 Java 异常。。

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题。

    Java技术栈

扫码关注云+社区

领取腾讯云代金券