异常流程
来源:互联网 发布:300525 博思软件 编辑:程序博客网 时间:2024/06/09 20:20
<1>异常进入:
* 压栈(若处理器处于线程模式且正使用PSP,则压栈就使用PSP,否则使用MSP)。
* 取出异常向量(为减少等待时间,这一步可能会和压栈操作并行执行)。
* 取出异常指令(在确定异常处理起始地址之后,指令就会被取出)。
* 更新NVIC寄存器和内核寄存器(包括挂起状态,活跃状态,xPSR,PC,LR,SP等)。
根据压栈时实际使用的栈,在异常处理前,MSP或者PSP的数值会被自动调整。PC也会被更新为异常处理的起始地址,LR被更新为EXC_RETURN。
<2> 异常处理
在异常处理内部,可以执行外设所需的服务。在执行异常处理时,处理器就会处于处理器模式。
* 栈操作使用MSP(区别于进入异常时满足某种条件可以使用PSP)。
* 处理器运行在特权访问等级。
若更高优先级的异常在这个阶段产生,处理器会接收新的中断,而当前正在执行的处理会被挂起且被更高优先级的处理抢占,即中断嵌套。
若相同或者更低优先级的异常在这个阶段产生,新到的异常就会处于挂起状态,且等当前异常处理完成后才会处理这个新异常。
在异常处理的结尾,程序代码的返回会引起EXC_RETURN数值被加载到PC,并触发异常返回机制。
<3>异常返回
对于Cortex-M处理器,异常返回机制由一个特殊的地址EXC_RETURN触发,该数值在异常入口处产生并存储在LR中。当将LR写入PC时,它就触发异常返回流程。
当触发异常返回机制后,处理器会访问栈空间里在进入异常期间被压入栈中的寄存器数值,且将它们恢复到寄存器组中,这个过程被称为出栈。
在压栈操作的同时,处理器会取出之前被中断的程序的指令,并使得程序尽快继续执行。
阅读全文
0 0
- 异常流程
- Windows异常处理流程
- Windows异常处理流程
- Windows异常处理流程
- Windows异常处理流程
- Windows异常处理流程
- Windows异常处理流程
- Windows异常处理流程
- Windows异常处理流程
- Windows异常处理流程
- 异常处理流程
- MTK异常处理流程
- MTK异常处理流程
- Windows异常处理流程
- Mysql 异常处理流程
- Windows异常处理流程
- C++ 异常处理流程
- java异常处理流程
- 多布局不小心出现的越界异常,定义getItemViewType 的返回值注意事项
- 企业数据总线(ESB)和注册服务管理(dubbo)的区别
- 手机网上商城-项目经验总结(十二)-filter定义权限拦截
- 新手看Java中的集合类(一)
- 清除浮动的方式
- 异常流程
- springmvc+mybatis+sql server实现简单登录功能
- 【安全牛学习笔记】密码嗅探、中间人攻击
- nyoj20 吝啬的国度
- 闭包
- 设计模式之----原型模式
- C语言32个关键词
- 凌云光科技笔试题
- zabbix 监控项