Lecture08.ARM异常机制myf_第1页
Lecture08.ARM异常机制myf_第2页
Lecture08.ARM异常机制myf_第3页
Lecture08.ARM异常机制myf_第4页
Lecture08.ARM异常机制myf_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

,Lecture 08: Cortex-M3异常机制,目录,异常的基本概念异常的类型异常的优先级异常激活等级异常处理复位过程,异常的基本概念,异常:在出现信号变化、非法操作、操作错误或外部请求等事件时,要求处理器暂停后续指令的执行,转向处理该事件。Cortex-M3 处理器将复位、不可屏蔽中断、故障都统一为异常。故障(Fault)是指令执行时由于错误的条件所导致的异常。,异常的基本概念,Cortex-M3在内核水平上搭载了一个异常响应系统,支持为数众多的系统异常和外部中断。其中编号为115的对应系统异常。由于异常和中断对主程序所体现出来的都是“中断”的性质,因此,经常混合使用术语“中断”和“异常”。Cortex-M3中异常和中断的区别在于,中断对于内核而言都是“意外突发事件”,该请求信号来自内核的外面,来自各种片上外设和片外外设,因此相对内核是“异步”的;而异常则是内核的活动产生的在执行指令或访问存储器时产生,因此是“同步”的。,目录,异常的基本概念异常的类型异常的优先级异常激活等级异常处理复位过程,异常的类型,异常的类型,异常的类型,Fault类异常 以下四类系统异常专用于fault处理。总线faults存储器faults用法faults硬faults,异常的类型,总线faults 在AHB接口上正在传输数据时,如果回复了一个错误信号(error response),则会产生总线faults,产生的场合可以是:取指,通常被称为“预取流产”(prefetch abort)数据读写,通常被称为“数据流产”(data abort) 在Cortex-M3中,执行如下动作,如果地址有误,也会触发总线fault:中断处理起始阶段的PUSH操作,称为“入栈错误”中断处理收尾阶段的POP操作,称为“出栈错误”,异常的类型,哪些因素会导致AHB回复一个错误信号?企图访问无效的存储器region。常见于访问的地址没有相应的存储器。设备还有没有做好传输数据的准备。例如,试图访问尚未初始化的SDRAM。在企图启动一次数据传送时,传送的尺寸不能被目标设备所支持。例如,某设备只接受字型数据,却试图送给它字节型数据。因为某些原因,设备不能接受数据传送。例如,某些设备只有在特权级下才允许访问,可当前却是用户级。,异常的类型,总线faults 当上述这些总线faults发生时,只要没有同级或更高优先级的异常正在服务且没有被屏蔽,就会执行总线fault总线的服务例程。如果总线fault被除能,或者总线fault是被某同级或更高优先级异常的服务例程引发时,则总线fault“升级”为硬fault,最后执行的是硬fault的服务例程。,异常的类型,总线faults 发生了总线fault后,如何找出该fault的触发原因呢?NVIC提供了若干个fault状态寄存器,其中一个名为“总线fault状态寄存器(BFSR)”,总线fault服务例程通过它确定产生fault的场合:是在数据访问时,在取指时,还是在中断的堆栈操作时。,异常的类型,总线faults BFSR是一个8位的寄存器,并且使用字传送和字节传送来读取它。如果以字方式访问,地址是0xE000_ED28,并且第二个字节有效;如果以字节方式访问,则地址直接就是0xE000_ED29,如图所示,A Cortex-M3 Predefined Memory Map,The Cortex-M3 processor has a fixed memory map The Cortex-M3 processor has a total of 4GB of address space,异常的类型,总线faults 如果BFSR中的BFARVALID位为1时,还可以找出是在访问哪块存储器时产生该总线fault该存储器的地址被放到“总线fault地址寄存器(BFAR)”中。,异常的类型,存储器管理faults 存储器管理faults多与MPU有关,其诱因常常是某次访问触犯了MPU设置的保护规范。存储器保护单元(MPU)是Cortex-M3中的一个选配单元,可以实施对存储器(主要是内存和外设寄存器)的保护,使软件更加的鲁棒。另外,某些非法场合,例如,在不可执行的存储区域试图取指,也会触发一个存储器管理fault,而且在这种场合下,即使没有MPU也会触发。,异常的类型,存储器管理faults 常见的诱因如下:访问了所有MPU regions覆盖范围地址之外的地址。访问了没有存储器与之对应的空地址往只读region写数据用户级下访问了只允许特权级下访问的地址,异常的类型,存储器管理faults 存储器管理faults发生后,如果其服务例程是使能的,则执行。如果同时还发生了其他高优先级异常,则先处理这些异常,存储器管理fault被悬起。如果存储器管理fault是被同级或高优先级异常的服务例程引发的,或者被除能,则和总线fault一样:“升级”成硬fault,最后执行硬fault的服务例程。,异常的类型,存储器管理faults NVIC中有一个“存储器管理fault状态寄存器(MFSR)”,它能指出导致该fault的原因。如果是因为数据访问违例(DACCVIOL位)或是取指访问违例(IACCVIOL位),则违例指令的地址已经被压入栈中。如果MMARVALID位被置位,则还能进一步查出引发此fault时访问的地址读取MMAR的值。,异常的类型,存储器管理faults MFSR寄存器如下图所示,是一个8位寄存器,地址为0xE000_ED28。,异常的类型,用法faults 用法faults发生的场合可以是:执行了协处理器指令。Cortex-M3本身并不支持协处理器,但是通过fault异常机制,可以建立一套“软件模拟”的机制,来执行一段程序模拟处理器的功能,从而可以方便地在其它处理器间移植。执行了未定义的指令。同上,也可以软件模拟未定义指令的功能。尝试进入ARM状态。由于Cortex-M3不支持ARM指令,因此fault会在切换时产生。无效的中断返回(LR中包含了无效/错误的值)使用多重加载/存储指令时,地址没有对齐 另外,如果需要严格要求程序质量,还可以让Cortex-M3在遇到除数为零的时候,以及遇到未对齐访问时也产生用法fault。通过在NVIC中有两个控制位分别与它们对应,通过设置可以激活它们。,异常的类型,用法faults 和总线fault、存储器管理fault一样,用法fault必须被使能才能响应。如果某异常服务例程在执行过程中引发了用法fault,并且该异常的优先级不低于用法fault,或者用法fault被除能,则用法fault“升级”成硬fault。,异常的类型,用法faults UFSR的定义如图所示,占用了两个字节,地址为0xE000_ED2A 。,异常的类型,硬fault 硬fault是上述的总线fault、存储器管理fault以及用法fault“升级”的结果。另外,在取向量(异常处理时对异常向量表的读取)时产生的总线fault也按硬fault处理。NVIC中的硬fault状态寄存器(HFSR)能够指出产生硬fault的原因。该寄存器为32位,地址为0xE000_ED2C,如图所示。,异常的类型,各个fault状态寄存器(FSRs)都保持住它们的状态,直到手工清除。Fault服务例程在处理了相应的fault后不要忘记清除这些状态,否则下次又有新的fault发生时,服务例程在检视fault源时,将看到之前遗留下来的状态标志,无法判断哪个fault是新发生的。FSRs采用写时清除机制(写1时清除)。,异常的类型,简单总结如下:,异常的类型,SVC SVC(系统服务调用)多用在操作系统的软件开发中。SVC用于产生系统函数的调用请求。例如,操作系统通常不让用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用SVC发出对系统服务函数的呼叫请求,以这种方式间接访问硬件。 SVC异常通过执行SVC指令来产生。该指令需要一个立即数,充当系统调用代号。SVC异常服务例程稍后会提取出此代号,从而获知本次调用的具体要求,再调用相应的系统服务函数。例如:SVC 0x3 ; 调用3号系统服务,异常的类型,PendSV 另一个相关的异常是PendSV(可悬起系统服务调用),它和SVC协同使用。一方面,SVC异常是必须在执行SVC指令后立即得到响应(若因优先级不比当前的正处理的高,或是其他原因使之无法立即响应,将升级为硬fault),应用程序执行SVC时都是希望所需的请求立即得到响应。另一方面,PendSV可以像普通的中断一样被悬起的。OS可以利用它缓期执行一个异常直到其它重要的任务完成后才执行。悬起PendSV的方法是:向NVIC的PendSV悬起寄存器中写1。悬起后,如果优先级不够高,则将缓期等待执行。,目录,异常的基本概念异常的类型异常的优先级异常激活等级异常处理复位过程,异常的优先级,对所有异常进行编号并分配优先级高优先级可以暂停低优先级的处理,优先进行异常处理请求。复位、不可屏蔽中断、硬故障分别固定为-3(最高优先级)、-2、-1其它异常级别皆为正数,由可由程序编程分配。,异常处理中与优先级相关的操作,异常的优先级,目录,异常的基本概念异常的类型异常的优先级异常激活等级异常处理复位过程,异常激活等级,当没有异常发生时,处理器处在 Thread 模式。当进入中断处理(ISR)或故障处理激活时,处理器将进入 Handler 模式。不同类型异常处理所对应的处理器工作模式、访问级别以及栈的使用是有所不同的,也就是激活等级不同。,不同激活等级下的特权和栈:,异常激活等级,异常转换:,异常激活等级,目录,异常的基本概念异常的类型异常的优先级异常激活等级异常处理复位过程,异常处理,异常响应异常向量表异常处理函数及返回,异常响应:一旦产生异常,微处理器进行,异常处理,异常向量表:异常处理程序的入口地址组成向量表,每个入口地址占用4个字节,向量表位于零地址处;在向量表的0处必须放置main栈的栈顶地址,也就是MSP的初值;复位、NMI和硬fault的优先级是固定的。,异常处理,每个工程必须有异常向量表,其起始地址为0x0。,AREA RESET, CODEEXPORT _Vectors ; 供Linker用_VectorsDCD _initial_spDCD Reset_HandlerDCD HMI_HandlerDCD HardFault_HandlerDCD MemMngFault_HandlerDCD BusFault_HandlerDCD UsageFault_HandlerDCD 0DCD 0DCD 0DCD 0,DCD SVC_HandlerDCD Dbg_HandlerDCD 0DCD PendSV_HandlerDCD SysTick_Handler;外部中断向量 DCD IRQ0_HandlerDCD IRQ1_HandlerDCD IRQ239_Handler,异常处理,主堆栈指针(MSP)复位值,复位处理器地址迫使处理器跳转至应用代码开始处,存储器保护单元(MPU)保护故障,数据+预取终止,异常处理,异常向量表在加电启动时必须在ROM中异常向量表第1个字为MSP的初始值,必须有值且处于RAM区异常向量表第2个字为RESET的异常向量,指向启动处理程序,必须有值且处于ROM区,AREA RESET, CODEEXPORT _Vectors_VectorsDCD _initial_spDCD Reset_HandlerSPACE 9*4DCD SVC_Handler,其它向量可根据工程具体来设计所用到的异常向量之前的空间大小必须留够,后面用不到的异常向量可以不留空间。,异常处理,异常处理程序异常处理中若需要调用其它子过程,则需要将LR入栈保存。保护返回入口异常处理中所用到的R4-R11都需要先入栈保护再使用,异常处理完之前全部出栈。保护寄存器异常处理结束将异常处理刚开始的LR值加载至PC,指令BX、POP、LDR或LDM返回到异常前的状态,异常处理,目录,异常的基本概念异常的类型异常的优先级异常激活等级异常处理复位过程,复位过程,RESET 异常重新加电启动时,处理器自动响应该异常。该异常比较特殊,它响应时没有常规的现场保护操作,处理器直接工作在HANDLER模式,并自动将地址0x0-0x3所保存的字加载至MSP中,并使用MSP。,从地址 0x0000,0000 处取出MSP 的初始值。从地址 0x0000,0004 处取出PC 的初始值这个值是复位向量,LSB 必须是1,然后从这个值所对应的地址处取指。,初始MSP及PC初始化的一个范例,46,复位过程,复位序列:,课堂练习,实现一个SVC 0 异常处理,并注意观察异常处理前后各寄存器的值以及堆栈中的值如何变化。思考:如果调用SVC 1,你的异常处理程序能否响应?应该如何处理?,异常示例,含有SVC的异常处理示例,AREA RESET, CODEEXPORT _Vectors_VectorsDCD _initial_spDCD Reset_HandlerSPACE 9*4DCD SVC_HandlerEXPORT Reset_HandlerENTRY;Reset_Handler PROCSVC 0B .ENDP,SVC_Handler PROCBX LRENDP AREA STACK, DATA, ALIGN=2SPACE 0x100_initial_sp END,异常示例,KEIL中调试左边为寄存器初始值右边为0x0起始的存储空间数值及相应的汇编代码0x0:0x200001000x4:0x31启动异常处理程序的地址为0x300x2

温馨提示

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

评论

0/150

提交评论