文章目录

  • 1 Cortex-M3内核中的异常
  • 2 PendSV异常
  • 3 异常处理
    • 3.1 异常处理流程
    • 3.2 EXC_RETURN

1 Cortex-M3内核中的异常

系统异常列表:


2 PendSV异常

PendSVC异常用来实现任务的切换。 在一般的RTOS设计中,在执行具体的任务切换时,是通过向PendSVC异常发起请求,然后在PendSVC异常处理程序中具体执行任务切换的操作。

在PendSV中执行RTSO上下文切换(即不同任务间切换)。工作原理:配置为最低优先级,上下文切换的请求将自动延迟到其它的ISR都完成后才处理,并且可被其它异常/中断抢占。


3 异常处理

3.1 异常处理流程

进入异常:
刚进入异常时,硬件自动会将以下寄存器压入当前堆栈(当前使用的堆栈是MSP就压入MSP中,使用的是PSP就压入PSP中)。之后硬件自动跳转到PendSVC异常处理程序中运行。

退出异常:
退出异常时,硬件会自动出栈,这个次序与进入异常时压栈的顺序刚好相反。可以理解为进入异常时保存了部分寄存器状态,退出时正好恢复。此外,在退出异常时,还会用到EXC_RETURN,RTSO中只用到了0xFFFF_FFFD(即返回异常时进入线程模式,使用PSP堆栈)。

步骤如下:

  1. 执行返回指令,如BX LR。
  2. 恢复先前入栈的寄存器,出栈顺序与入栈时的相对应,堆栈指针的值也改回去。
  3. 从原中断发生位置继续往下运行。

注意:在返回时,会根据EXC_RETURN的值来决定返回动作。

3.2 EXC_RETURN


EXC_RETURN是用于程序从异常中断中返回的。

根据Cortex-M3的异常处理流程,当发生异常时,CPU先将核心寄存器压入当前堆栈(如果当前是线程模式,则压入PSP堆栈,如果当前是Handler模式,则压入MSP堆栈),然后CPU会将LR设置为一个特殊的值,比如0xFFFFFFFD,然后切换到Handler模式,切换成MSP堆栈,最后进入异常处理例程(异常处理例程总是使用MSP堆栈)。在异常处理例程完成后需要从中断返回时,就将LR的值载入到PC中(通常是BX LR指令,也可以是MOV PC,LR指令,或者POP {…, PC}等指令,只要能将LR赋给PC即可),由于LR的值是0xFFFFFFFD,CPU检测到向PC中载入的是这个特殊值时,就知道是中断返回,于是做中断返回的动作(与压入动作相反:从堆栈中弹出核心寄存器的值,恢复到线程模式或Handler模式等)。

这里这个特殊的值(0xFFFFFFFD)就是EXC_RETURN,它的特点是高28位全部是1,只有低4位可变化,不同的低4位表示不同的中断返回动作。


参考资料:

  1. 【李述铜】从0到1自己动手写嵌入式操作系统

Cortex-M3内核中的异常相关推荐

  1. Cortex M3内核架构

    CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...

  2. 制造linux内核异常,了解Linux内核中的异常

    我想在非常低的温度下调试我们的嵌入式Linux系统(< 40C).问题是,它并不总是正确启动,我试图找出原因.经过一番分析,我看到内核启动了下面的输出期间进入恐慌:了解Linux内核中的异常 c ...

  3. Cortex‐M3的Faults异常究竟是什么?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...

  4. 白话讲懂Cortex 内核中的AHB总线

    1.1.AHB介绍 高级高性能总线简单点理解就是一条架在处理器CPU与内存与外设之间的通信渠道,大家相互之间需要遵循此总线的约束协议,然后就能在高频时钟的驱动下进行数据交互,交互是总线的核心要义.我开 ...

  5. cortex M内核优先级设置

    Cortex M内核中 每个中断都有一个8位的优先级设置寄存器 这个8位的寄存器可以分为抢占优先级和子优先级两个部分(通过设置优先级组设置) 抢占优先级和子优先级有什么用? 举例说明: 有两个中断A. ...

  6. Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)

    架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...

  7. Cortex M3 NVIC与中断控制

    Cortex M3 NVIC与中断控制 宗旨:技术的学习是有限的,分享的精神是无限的. 一.NVIC概览 --嵌套中断向量表控制器 NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断 ...

  8. Cortex M3 Bit-banding简介

    http://blog.csdn.net/shevsten/article/details/7676397 Cortex M3 Bit-banding简介 分类: ARM MCU2012-06-19 ...

  9. ARM® Cortex®-M内核单片机STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列

     STM32是ARM®Cortex®-M内核单片机.目前提供10大产品线(F0, F1, F2, F3, F4, F7, H7, L0, L1, L4),超过700个型号.STM32产品广泛应用于 ...

最新文章

  1. Mongodb主从配置
  2. 使用LOAD DATA和INSERT语句导入Mysql数据
  3. C#如何生成缩略图、水印
  4. 中小企业虚拟化解决方案-VMware vSphere 6.5-日常管理入口v0.0.1
  5. string拆分为int_拆分为流
  6. kmemleak的使用
  7. 实时股票数据接口 (转,以防有用)
  8. 利用JS实现简单的注册界面验证小案例
  9. 用户管理系统 - 用户权限设计从入门到精通
  10. js 调用谷歌插件截图跨域的iframe---FireShot
  11. android生成md5,使用Android studio生成签名文件以及获取MD5
  12. 彻底删除win7无线临时网络
  13. android 九宫格图片选择(微信朋友圈) 图片预览 (底部recycleview 不卡顿)
  14. 优盘格式化了怎么恢复里面的数据
  15. 设计师们书签里的设计素材精品网站
  16. 数字IC手撕代码--交通灯
  17. 如何学西方经济学?(起源与发展、主流观点概括)
  18. 传浪潮预购德国奇梦达50%股权
  19. 一键关闭微软自动杀毒软件Windows Defender软件:Defender Control v1.4
  20. 面试华为测试岗,收到offer后我却毫不犹豫拒绝了....

热门文章

  1. 3.5 集束搜索的误差分析-深度学习第五课《序列模型》-Stanford吴恩达教授
  2. Ardino基础教程 6_抢答器
  3. 5.9、离散卷积的一般描述
  4. 【PC工具】更新速度最快最好用的文件内容搜索工具:searchmyfiles
  5. 7.Verilog 条件语句的应用
  6. 3.初识Verilog HDL
  7. void *变量用法
  8. 基于linux的ARM设备升级,烧写Nand flash总结
  9. 探究防抖(debounce)和节流(throttle)
  10. 启动任务管理器命令符,doc命令