Cortex-M3内核中的异常
文章目录
- 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堆栈)。
步骤如下:
- 执行返回指令,如BX LR。
- 恢复先前入栈的寄存器,出栈顺序与入栈时的相对应,堆栈指针的值也改回去。
- 从原中断发生位置继续往下运行。
注意:在返回时,会根据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位表示不同的中断返回动作。
参考资料:
- 【李述铜】从0到1自己动手写嵌入式操作系统
Cortex-M3内核中的异常相关推荐
- Cortex M3内核架构
CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...
- 制造linux内核异常,了解Linux内核中的异常
我想在非常低的温度下调试我们的嵌入式Linux系统(< 40C).问题是,它并不总是正确启动,我试图找出原因.经过一番分析,我看到内核启动了下面的输出期间进入恐慌:了解Linux内核中的异常 c ...
- Cortex‐M3的Faults异常究竟是什么?
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 有许多朋友在学习,或者开发STM32时都遇到过HardFault_Handler的情 ...
- 白话讲懂Cortex 内核中的AHB总线
1.1.AHB介绍 高级高性能总线简单点理解就是一条架在处理器CPU与内存与外设之间的通信渠道,大家相互之间需要遵循此总线的约束协议,然后就能在高频时钟的驱动下进行数据交互,交互是总线的核心要义.我开 ...
- cortex M内核优先级设置
Cortex M内核中 每个中断都有一个8位的优先级设置寄存器 这个8位的寄存器可以分为抢占优先级和子优先级两个部分(通过设置优先级组设置) 抢占优先级和子优先级有什么用? 举例说明: 有两个中断A. ...
- Cortex、ARMv8、arm架构、ARM指令集、soc?Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(内核)后者是指令集的架构(架构)
架构组成元素的指令集状态或者语法thumb指令集与arm指令集的区别例如thumb指令集是什么_thumb指令集与arm指令集的区别以及thumb-2的关系在下一文中介绍,本文暂时不讨论 有粉丝问我到 ...
- Cortex M3 NVIC与中断控制
Cortex M3 NVIC与中断控制 宗旨:技术的学习是有限的,分享的精神是无限的. 一.NVIC概览 --嵌套中断向量表控制器 NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断 ...
- Cortex M3 Bit-banding简介
http://blog.csdn.net/shevsten/article/details/7676397 Cortex M3 Bit-banding简介 分类: ARM MCU2012-06-19 ...
- ARM® Cortex®-M内核单片机STM32家族介绍,覆盖STM32F、STM32H、STM32L全系列
STM32是ARM®Cortex®-M内核单片机.目前提供10大产品线(F0, F1, F2, F3, F4, F7, H7, L0, L1, L4),超过700个型号.STM32产品广泛应用于 ...
最新文章
- Mongodb主从配置
- 使用LOAD DATA和INSERT语句导入Mysql数据
- C#如何生成缩略图、水印
- 中小企业虚拟化解决方案-VMware vSphere 6.5-日常管理入口v0.0.1
- string拆分为int_拆分为流
- kmemleak的使用
- 实时股票数据接口 (转,以防有用)
- 利用JS实现简单的注册界面验证小案例
- 用户管理系统 - 用户权限设计从入门到精通
- js 调用谷歌插件截图跨域的iframe---FireShot
- android生成md5,使用Android studio生成签名文件以及获取MD5
- 彻底删除win7无线临时网络
- android 九宫格图片选择(微信朋友圈) 图片预览 (底部recycleview 不卡顿)
- 优盘格式化了怎么恢复里面的数据
- 设计师们书签里的设计素材精品网站
- 数字IC手撕代码--交通灯
- 如何学西方经济学?(起源与发展、主流观点概括)
- 传浪潮预购德国奇梦达50%股权
- 一键关闭微软自动杀毒软件Windows Defender软件:Defender Control v1.4
- 面试华为测试岗,收到offer后我却毫不犹豫拒绝了....