博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cortex-M3 异常返回值EXC_RETURN
阅读量:4557 次
发布时间:2019-06-08

本文共 816 字,大约阅读时间需要 2 分钟。

【EXC_RETURN】

在进入异常服务程序后,硬件自动更新LR的值为特殊的EXC_RETURN。

当程序从异常服务程序返回,把这个EXC_RETURN值送往PC时,就会启动处理器的异常中断返回序列。
因为LR的值EXC_RETURN是由硬件自动设置的,所以只要没有特殊需求,就不要改动它。
RETURN的高28位全为1,只有bit[3:0]的值有特殊含义。位段如下:

合法的EXC_RETURN值共有3个,如下:

  • 如果主程序在线程模式下运行,并且在使用MSP时被中断,则在服务程序中LR=0xFFFFFFF9(主程序被打断前LR已被自动入栈)。
  • 如果主程序在线程模式下运行,并且在使用PSP时被中断,则在服务程序中LR=0xFFFFFFFD(主程序被打断前LR已被自动入栈)。
  • 如果主程序在Handler模式下运行,则服务程序中LR=0xFFFFFFF1(主程序被打断前LR已自动入栈)。这是所谓的“主程序”,其实更可能时被抢占的中断服务程序。事实上,在嵌套时,更深层ISR所看到的LR总是0xFFFFFFF1。

【LR的值在异常期间被设置为EXC_RETURN(线程模式使用主堆栈)】

【LR的值在异常期间被设置为EXC_RETURN(线程模式使用进程堆栈)】

【注意】

  • 进入中断时LR的值是CPU自动设置的,不会有错,为什么退出中断时会有可能LR值变成非法的了呢?只有一个原因:中断例程修改了LR的值,改错了。
  • 由EXC_RETURN的格式可见,我们不能把0xFFFFFFF0~0xFFFFFFFF的地址作为任何返回地址。其实也不用担心会弄错,因为Cortex-M3已经把这个范围标记成“取指不可区”了。

 


  参考摘录:

《Cortex-M内核系列和STM32-讲座2教程.pdf》

《ARM Cortex-M3权威指南.pdf》

转载于:https://www.cnblogs.com/utank/p/11263073.html

你可能感兴趣的文章
浅谈iOS7 AVFoundation 二维码扫描
查看>>
[CLR via C#]17. 委托
查看>>
【目录】集合框架目录
查看>>
SQL SERVER行转换列及PIVOT
查看>>
no pointer in java
查看>>
iperf安装与使用
查看>>
【斜率DP】BZOJ 1010:玩具装箱
查看>>
php 的一些问题
查看>>
dojo从asp.net中获取json数据
查看>>
jQuery之animate()用法
查看>>
支付宝接口文档说明
查看>>
WCF Rest post请求
查看>>
线程的分离状态与结合状态
查看>>
Css中类、id应用hover动作详解
查看>>
unity3d之进度条跟着游戏对象移动
查看>>
016序列
查看>>
Angularjs+Bootstrap实现分页指令
查看>>
国内yum源的安装(163,阿里云,epel)
查看>>
Python【读取文件,第一行与最后一行】
查看>>
.NET 应用程序界面开发经验总结 设计良好的程序的表现之一就是细节做的还可以...
查看>>