嵌入式系统 第五章 异常和编程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统 第五章 异常和编程

第五章 异常及编程 5.1 ARM的异常 5.2 复位及编程 5.3 SWI中断处理程序 5.4 FIQ及IRQ中断处理程序 5.1 ARM的异常 程序正常执行流程中,程序计数器在其地址范围内连续增加,还可以跳转至附近程序标号或跳转并链接到子程序。 当该常规执行流程被转向到启用处理器处理内部或外部资源产生的事件时,即发生了处理器异常。 外部产生的中断; 处理器试图执行一个未定义的指令; 访问有特权的操作系统函数。 处理此类异常时,有必要保护处理器先前的状态,以保证在完成相应的异常处理例程后能够恢复产生异常时程序运行的状态,使其继续执行。 异常 说 明 复位 在处理器复位管脚有效时发生。该异常仅在处理器上电时或上电后的复位时才发生。可通过跳转到复位向量(0x0000)来完成软复位。 未定义指令 在处理器或协处理器均不能识别当前指令时发生。 软件中断(SWI) 这是一个用户定义的同步中断指令。它使得在USER模式下运行的程序能够请求在Supervisor模式下运行的特权操作,如:RTOS函数等。 预取指中断 在处理器试图执行一个未取指令时发生,因为地址非法。 数据中断 在数据传送指令试图在非法地址存储数据时发生。 IRQ 在处理器外部中断引脚低电平有效且CPSR的I位为0时发生。 FIQ 在处理器外部中断引脚低电平有效且CPSR的F位为0时发生。 ARM处理器模式 处理器模式 说 明 备 注 USER 正常程序运行的工作模式 不能直接切换到其它模式 特权模式 SYS 用于支持操作系统的特权任务等 可直接切换到其它模式 异 常 模 式 SVC 操作系统使用的一种保护模式 在系统重启和复位时,才进入此模式 FIQ 快速中断请求处理 只有在FIQ异常响应时,才进入此模式 IRQ 中断请求处理 只有在IRQ异常响应时,才进入此模式 ABT 用于虚拟内存和存储器保护 在ARM7内核中没有用 UND 支持软件仿真的硬件协处理器 只有在未定义指令异常响应时,才进入此模式 ARM异常处理过程 ARM产生异常时,在任何情况下处理异常的方法都是一样的,即: (1)通过将PC拷贝到R14_exc以及将CPSR拷贝SPSR_exc来保存当前的状态( exc表示异常类型) 。 (2)将处理器操作模式改变为适当的异常模式。 (3)禁用中断。 (4)将PC强制变为00H~1CH范围内某个与异常类型有关的特殊值(向量地址)。这个向量地址是指向异常处理程序的转移指令—也即开始执行异常处理程序。 从异常处理程序的返回 从异常返回的方法取决于该异常处理程序使用不使用堆栈操作。通常情况下,异常处理的返回必须: 从SPSR_exc恢复CPSR; 使用R14_exc(LR)中的返回地址恢复程序计数器PC。 不必从复位处理程序返回,因为复位处理程序直接执行主代码。 如果异常处理程序使用了堆栈,可以通过使用一条装载多个带^限定符的指令来返回。 LDMFD SP!,{ R0~R12,PC } ^ 限定符^指定从SPSR_exc恢复CPSR。 从SWI及未定义指令异常处理程序返回 SWI及未定义指令异常是由指令本身造成的,因此,处理异常时,处理器将(PC - 4)存储在R14_exc中。因而使R14_exc指向下一条要执行的指令。要从R14中恢复程序计数器,则使用: MOVS PC,R14 从处理程序返回控制权。 将返回地址推入堆中并在返回时将其弹出的处理程序入口和出口代码为: STMFD SP!,{ reglist,R14 } ;... LDMFD SP!,{ reglist,PC }^ 从FIQ及IRQ中断处理程序返回 执行完每一条指令后,处理器检测中断管脚是否为 LOW(电平),以及 CPSR中断禁用位是否为清除。结果,仅在程序计数器被更新后才发生 IRQ 或 FIQ 异常。处理器将 (PC - 4) 存储在R14_exc中。使R14_exc指向发生异常时尚未完成的一条指令。处理程序完成后,必须从 R14_exc指向的上一条指令处继续运行。 该继续执行地址较R14_exc中的地址少一个字(四个字节),因此,其返回指令为: SUBS PC, R14,#4 将返回地址压入栈中并在返回时将其弹出的处理程序入口及出口代码为: SUB R14,R14,#4 STMFD SP!,{ reglist,R14 } ;... LDMFD SP!,{ reglist,PC }^ 对于发生在 Thumb 状态下的异常,处理程序返回指令 (SUBS PC,R14,#4) 改变了

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档