资料介绍
近来翻了翻uC/OS-II官网给出来的ARM7-ARM9移植手册(AN-104),分析了在ARM中移植的问题,想想从来没有认真的学习过ARM的汇编,趁着这个机会复习复习吧。其实底层的东西才是创造力的心脏。
其中的移植代码中存在的很多问题比如中断的关闭和开启,任务级别的情景切换,中断到任务的情景切换都是我们在平时移植中讲到,我也不在此强调了。在官网中提供的移植过程中存在异常处理机制,这个本不是在移植过程中考虑的,但是文档中确实提供了一个比较好的处理方式。我在此对这一段时间的学习做一个总结。
首先需要了解ARM的异常处理机制,异常是每一种处理器都必须考虑的问题之一,关键在于如何让处理,返回地址在什么位置都是需要考虑的,ARM中支持7种异常,其中包括复位、未定义指令异常、软中断异常、预取指令中止、数据中止、IRQ、IFQ。每一种异常运行在特定的处理器模式下。我在此逐一的分析。
一般异常发生后,CPU都会进行一系列的操作,这些操作有一部分是CPU自动完成,有一部分是需要我们程序员完成。
首先说明CPU会自动完成的部分,用ARM结构手册中的代码描述如下:
R14_ = return link //这个可以参看寄存器的说明,两个作用
SPSR_ = CPSR
CPSR[4:0] = exception mode number
CPSR[5] = 0 ; //AEM指令
If ==Reset or Fiq then //只有在复位和FIQ模式下才会关闭FIQ中断
CPSR[6] = 1 ;
CPSR[7] = 1 ; //任何异常模式下都会关闭IRQ中断
PC = exception vector address
从上面的代码中我们可以发现CPU自动处理的过程包括如下:
1、拷贝CPSR到SPSR_
2、设置适当的CPSR位: 改变处理器状态进入ARM状态;改变处理器模式进入相应的异常模式;设置中断禁止位禁止相应中断。
3、更新LR_,这个寄存器中保存的是异常返回时的链接地址
4、设置PC到相应的异常向量
以上的操作都是CPU自动完成,异常的向量表如下:
返回地址问题
异常的返回地址也是需要我们注意的地方,不同的异常模式返回地址也是存在差异的,这主要是因为各种异常产生的机理存在差别所导致的。这样我们的需要在异常进入处理函数之前或者在返回时调整返回地址,一般采用进入异常处理函数前进行手动调整。下面每一种异常R14保存的值都给了出来,其中也包含了CPU自动处理的部分,根据保存的R14就可以知道怎样实现地址的返回。
复位异常:
可以看出该模式下的先对来说返回地址也比较简单,不需要做太多的描述。
未定义的指令异常:
返回的方式也比较简单:
MOVS PC, R14
软中断异常:
返回的方式也比较简单:
MOVS PC, R14
预取指令中止异常:
返回需要做下面的调整:
SUBS PC, R14, #4
数据中止
返回地址需要做下面的调整:
如果需要重新访问数据则:
SUBS PC, R14, #8
如果不需要重新访问数据则:
SUBS PC, R14, #4
IRQ中断的处理过程:
返回地址需要做下面的调整:
SUBS PC,R14,#4
IFQ中断:
返回地址需要做下面的调整:
SUBS PC, R14 ,#4
从上面的代码可以知道,对于每一种异常,保存的返回地址都是不一样的,一般都需要我们手动的跳转,当然调整的时机也需要我们选择,是在进入处理前跳转还是返回时调整都是需要我们程序员控制的。
在ARM Developer Suite Developer Guide中对ARM处理器的异常处理操作提供能更加详细的解释,每一种异常下的处理方式如下文描述:
异常返回时另一个非常重要的问题是返回地址的确定,在前面曾提到进入异常时处理器会有一个保存LR 的动作,但是该保存值并不一定是正确的返回地址,下面以一个简单的指令执行流水状态图来对此加以说明。
我们知道在ARM 架构里,PC值指向当前执行指令的地址加8处,也就是说, 当执行指令A(地址0x8000)时,PC 等于指令C 的地址(0x8008)。假如指令A 是“BL”指令,则当执行该指令时,会把PC(=0x8008)保存到LR 寄存器里面,但是接下去处理器会马上对LR 进行一个自动的调整动作:LR=LR-0x4。这样,最终保存在 LR 里面的是 B 指令的地址,所以当从 BL 返回时,LR 里面正好是正确的返回地址。同样的调整机制在所有LR自动保存操作中都存在,比如进入中断响应时,处理器所做的LR 保存中,也进行了一次自动调整,并且调整动作都是LR=LR-0x4。
下面,我们对不同类型的异常的返回地址依次进行说明:
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- TI C64x+ DSP内核异常处理机制的应用
- 基于ARM核的嵌入式系统异常处理机制的设计
- ARM cortex-M3 异常处理分析资料下载
- MCU严重异常情况原因总结资料下载
- 嵌入式ARM学习总结之IIC资料下载
- MR覆盖问题分析处理总结与举例资料下载
- 如何设计ARM核处理器S3C4510B的启动代码详细资料分析 11次下载
- ZigBee CC2530串口的数据接收处理机制详细资料讲解
- Java程序设计教程之异常处理的详细资料说明 13次下载
- Java教程之零点起飞学Java的异常处理资料说明 11次下载
- Java中的异常处理机制 6次下载
- iFix组态软件中基于队列的命令处理机制研究
- VxWorks下MPC860的中断处理机制及其应用
- VxWorks下MPC860的中断处理机制及其应用
- VxWorks下FMPC860的中断处理机制及其应用
- 介绍C语言中错误处理和异常处理的一些常用的方法和策略 465次阅读
- 西门子博图:错误处理机制概览 2228次阅读
- C++程序异常处理机制是什么 744次阅读
- ZWave中的消息队列机制是什么 656次阅读
- C++的异常机制底层原理与实际应用详细说明 3099次阅读
- ARM异常中断的原因及处理措施 7797次阅读
- ARM体系结构所支持的异常和具体含义 3828次阅读
- 如何理解ARM异常、中断和向量表 4168次阅读
- 基于ARMv7M的微控制器内核CortexM3研究 CortexM3异常处理 1631次阅读
- 对ARM异常中断的集中情况进行总结,并给出了一些解决方法 6408次阅读
- ARM S3C4510B系统的异常中断机制解析 1720次阅读
- 基于ARM处理器的高效异常处理解决方案 1286次阅读
- 对处理 Java 异常三原则的详细分析 3617次阅读
- Java异常选择和使用的误区和经验总结 1329次阅读
- 蓄电池直流系统的异常运行现象分析及处理措施 3367次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多