ARM内核的异常处理_第1页
ARM内核的异常处理_第2页
ARM内核的异常处理_第3页
ARM内核的异常处理_第4页
ARM内核的异常处理_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

互动教学

——ARM内核的异常处理1.ARM内核中异常的含义是什么?异常是指程序执行过程中出现的意外事件2.ARM内核有几种异常,分别是什么,它们在什么条件下发生?

异常类型向量地址优先级异常中断含义复位(Reset)0x000000001当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行。复位异常中断通常用在下面几种情况下:系统加电时系统复位时跳转到复位中断向量处执行,称为软复位未定义的指令undefinedinstruction0x000000046当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令(undefinedinstruction)异常中断。可以通过该异常中断机制仿真浮点向量运算软件中断(SWI)0x000000086这是一个由用户定义的中断指令。可用于用户模式下的程序调用特权操作异常类型向量地址优先级异常中断含义指令预取中止PrefechAbort0x0000000C5如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当该被预取的指令执行时,处理器产生指令预取中止(PrefechAbort)异常中断数据访问中止DataAbort0x000000102如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常中断外部中断请求(IRQ)0x000000184当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产生外部中断请求(IRQ)异常中断。系统中各外设通常通过该异常中断请求处理器服务快速中断请求(FIQ)0x0000001C3当处理器的外部快速中断请求引脚有效,而且CPSR寄存器的F控制位被清除时,处理器产生外部中断请求(FIQ)3.异常处理的一般流程包含哪些主要步骤?异常产生异常向量表异常处理程序(ARM)〔可选〕异常处理程序(Thumb)异常响应异常返回异常响应的过程〔复位异常除外〕出现xxx异常时,ARM内核尽可能执行完当前正在执行的指令,然后依次自动实现以下响应过程将当前CPSR的内容拷贝到SPSR_xxx将响应异常时的PC-4保存到LR_xxx,假设出现异常时处理器为Thumb状态,那么将对LR_xxx进行修正〔见后〕设置CPSR中的相应位强制处理器进入ARM工作状态设置CPSR的M[4:0],使处理器进入相应的工作模式设置中断禁止位I=1,禁止IRQ中断假设是复位或FIQ异常,还将设置中断禁止位F=1,禁止FIQ中断将异常向量地址强制赋给PC,跳转执行异常处理程序4.不同类型异常发生时,内核如何响应,分别跳转到什么地址执行程序?

内核响应过程:当异常发生时,处理器会把PC设置为一个特定的存储器地址,这一地址放在被称为向量表的特定地址范围内。向量表的入口是一些跳转指令,跳转到专门处理某个异常或中断的子程序。异常地址用途复位-复位没有定义LR数据中止LR-8指向导致数据中止异常的指令FIQLR-4指向发生异常时正在执行的指令IRQLR-4指向发生异常时正在执行的指令预取指令中止LR-4指向导致预取指令异常的那条指令SWILR执行SWI指令的下一条指令未定义指令LR指向未定义指令的下一条指令异常和返回地址5.什么是异常向量表,表中一般存放何种指令?为什么?为什么把FIQ中断异常入口地址放在异常向量表的顶端?异常向量表一般从0地址开始某些内核〔如ARM9/10,ARM720T〕异常向量表可以设置为从其它非0地址〔如0xFFFF0000〕开始每个异常向量占4个字节,通常用于存放转移指令,以实现从异常向量地址到异常处理程序地址的跳转FIQ中断向量被安排在向量表的顶端,便于对FIQ中断的快速响应〔不需跳转〕异常向量表FIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x006.在Thumb工作状态下响应异常,系统将进入何种工作状态?异常处理过程中能否进入Thumb状态?

处理器响应异常时自动进入ARM状态,且必须用一条ARM指令来实现从异常的返回,但在异常处理过程中可以切换到Thumb状态7.异常处理为什么要保护现场和恢复现场?保护现场主要保护哪些内容?保护现场一般采用什么方法?

为了在异常处理完毕能恢复原来的程序执行状态,响应异常时需保护被中断程序的的执行现场,异常处理完毕应该恢复被中断程序的执行现场内容:将当前CPSR的内容拷贝到SPSR_xxx将响应异常时的PC-4保存到LR_xxx,假设出现异常时处理器为Thumb状态,那么将对LR_xxx进行修正方法:将需要保护的通用存放器内容压入堆栈有时还须将某些影子存放器的内容入栈〔如中断嵌套〕8.不同类型异常的返回地址为什么不同,分别如何确定?为什么原工作状态〔ARM或Thumb〕不同,需要采用不同的返回地址?异常返回地址确实定复位异常处理程序不需要返回除复位外的其它异常的实际返回地址与异常的类型有关SWI和未定义指令异常指令执行导致异常返回地址=LR〔SWI或未定义指令的下一条指令〕FIQ、IRQ和预取指令中止异常返回地址=LR-4数据中止异常正在执行的指令无法执行完成返回地址=LR-8〔重新执行未能执行完的指令〕假设响应异常时为Thumb状态,内核将自动修正LR,返回地址仍按上述方法计算9.从异常返回需要执行哪两个根本操作?为什么这两个操作不能用两条指令来分别实现?ARM采用何种机制来实现用一条指令同时完成这两个操作?根本操作:1.将当前SPSR_xxx的内容拷贝到CPSR2.根据异常类型和LR_xxx的返回地址恢复PC原因:假设先恢复CPSR,那么系统工作模式恢复为进入异常前的模式,LR_xxx将无法再访问假设先恢复PC,那么在此之后的恢复CPSR的指令将不会被执行ARM提供了2种特殊机制来用一条指令实现两个操作〔同时恢复CPSR和PC〕当返回地址保存在LR_xxx时,采用数据处理指令返回机制从SWI和未定义异常返回MOVSPC,LR从FIQ、IRQ和预取指异常(PrefechAbort)返回SUBSPC,LR,#4 从数据中止异常(DataAbort)返回SUBSPC,LR,#8 当SPSR和返回地址保存在堆栈时,采用堆栈返回机制〔常用于IRQ中断嵌套〕入栈前应根据异常类型对返回地址进行调整使用带“^”的出栈指令LDM,例如 LDMFDSP!,{PC}^可以与恢复现场的出栈操作合并,例如LDMFDSP!,{R0-R12,PC}^10.各种异常的优先级如何排序?是否允许异常的嵌套?异常的优先级各异常的优先级顺序复位RESET〔1,最高优先级〕数据中止异常〔2〕快速中断请求FIQ〔3〕外部中断请求IRQ〔4〕预取指中止异常〔5〕软中断SWI〔6〕未定义指令〔7,最低优先级〕各异常同时发生时,将优先处理优先级较高的异常SWI和未定义指令异常不可能同时发生1.进入某种异常模式后,出现未屏蔽的异常仍然将按其优先级顺序进行响应,即异常嵌套2.一般应防止出现异常嵌套情况,假设无特殊处理,同类型异常的自嵌套或几个异常的循环嵌套会导致程序死锁一些特殊的嵌套例子:如果数据中止异常和FIQ同时发生,将先响应前者,但由于响应数据中止异常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论