Cortex-M3 的异常处理市公开课一等奖省赛课获奖课件_第1页
Cortex-M3 的异常处理市公开课一等奖省赛课获奖课件_第2页
Cortex-M3 的异常处理市公开课一等奖省赛课获奖课件_第3页
Cortex-M3 的异常处理市公开课一等奖省赛课获奖课件_第4页
Cortex-M3 的异常处理市公开课一等奖省赛课获奖课件_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

第四章Cortex-M3异常处理Cortex-M3的异常处理第1页Cortex-M3一些特征(一)处理器状态自动保留和恢复;中止向量表读取与处理器状态保留并行处理;支持尾链技术,当处理背靠背中止时,不需在两个中止服务子程序之间进行入栈和出栈操作;可动态重设中止优先级;NVIC和Cortex-M3处理器核紧密耦合,可尽早处理中止,尤其是晚到高优先级中止;Cortex-M3的异常处理第2页Cortex-M3一些特征(二)中止数目能够配置,从1到240;为Handler和Thread模式分别提供独立栈和访问特权等级;ISR调用采取C/C++标准ARM体系结构过程调用标准(AAPCS);可屏蔽优先级以支持临界区。这些特征提升了处理异常效率并降低了时间延迟。Cortex-M3的异常处理第3页4.1异常类型4.2异常优先级4.3异常处理4.4复位过程4.5多堆栈设置4.6Abort模式Cortex-M3的异常处理第4页4.1异常类型Cortex-M3处理器将复位、不可屏蔽中止、外部中止、故障都统一为异常。故障(fault)是指令执行时因为错误条件所造成异常。同时故障是指当指令产生错误时就同时汇报错误。异步故障则是指当指令产生错误时无法确保同时汇报错误。Cortex-M3的异常处理第5页Cortex-M3的异常处理第6页4.2异常优先级NVIC支持经过软件设置优先级。经过写中止优先级存放器PRI_N字段能够设置优先级,范围为0~255。经过软件设置优先级权限高于硬件优先级。但经过软件设置优先级对复位、不可屏蔽中止和硬故障没有影响。当多个中止含有相同优先级时,拥有最小中止号挂起中止优先执行。Cortex-M3的异常处理第7页优先级分组NVIC支持优先级分组。经过设定应用中止和复位控制存放器中PRIGROUP字段,能够将PRI_N字段分成两部分:抢占优先级和次要优先级。抢占优先级可认为是优先级分组,当多个挂起异常含有相同抢占优先级时,次要优先级就起作用。当两个挂起异常含有完全相同优先级时,硬件位置编号低异常优先被激活。Cortex-M3的异常处理第8页优先级分组Cortex-M3的异常处理第9页异常处理中与优先级相关操作Cortex-M3的异常处理第10页异常激活等级当没有异常发生时,处理器处于Thread模式。当进入中止处理(ISR)或故障处理激活时,处理器将进入Handler模式。不一样类型异常处理所对应处理器工作模式、访问级别以及栈使用是有所不一样,也就是激活等级不一样。Cortex-M3的异常处理第11页不一样激活等级下特权和栈Cortex-M3的异常处理第12页异常转换Cortex-M3的异常处理第13页异常子类转换Cortex-M3的异常处理第14页4.3异常处理当处理器处理异常发生时,会将PC、处理器状态存放器、r0-r3、r12,LR等8个存放器信息依次保留到堆栈指针SP所指之处。Cortex-M3的异常处理第15页4.3异常处理假如NVIC配置控制存放器STKALIGN位已经被设置,则在压栈之前会插入一个额外字。从ISR返回后,处理器将自动从栈中弹出8个存放器。中止返回是经过LR存放器传递数据,故ISR能够是通常c/c++函数,而且不需要修饰符。Cortex-M3的异常处理第16页处理器进入ISR前执行操作步骤Cortex-M3的异常处理第17页在处理器不一样情况下进入异常处理ISR过程Cortex-M3的异常处理第18页中止进入及处理流程图Cortex-M3的异常处理第19页抢占处理流程Cortex-M3的异常处理第20页4.3.2异常处理退出当从异常中返回时,处理器可能:尾链到一个已挂起异常:该异常比栈中全部异常优先级都高;返回到最近一个已压栈ISR:没有挂起异常,或是栈中最高优先级异常比挂起最高优先级异常含有更高优先级;返回到Thread模式:没有异常已经挂起或位于栈中。Cortex-M3的异常处理第21页异常退出操作Cortex-M3的异常处理第22页异常返回在ISR中可用以下指令将值0xFFFFFFFX加载到PC,以发生异常返回:POP/LDM,载入PC;LDR,PC作为目标地址;BX,使用任何存放器进行跳转。当采取这种方法返回时,写入到PC值被截取,而且作为EXC_RETURN值。Cortex-M3的异常处理第23页异常返回行为Cortex-M3的异常处理第24页异常返回在Thread模式下,假如经过其它任何指令或者从向量表将EXC_RETURN值载入PC,则就将该值看成是地址,而非一个特殊值。该地址区间被定义为不可执行区间,并造成一个内存管理故障。Cortex-M3的异常处理第25页中止返回流程图Cortex-M3的异常处理第26页4.4复位过程Cortex-M3的异常处理第27页4.4.1向量表异常处理程序入口地址组成向量表,每个入口地址占用4个字节,向量表位于零地址处;在向量表0处必须放置main栈栈顶地址,也就是MSP初值;复位、NMI和硬fault优先级是固定。Cortex-M3的异常处理第28页4.4.1向量表在向量表位置0处,必须包含以下4个值:main栈顶地址MSP;复位程序入口地址;非屏蔽中止(NMI)ISR入口地址;硬故障ISR入口地址。Cortex-M3的异常处理第29页一个完整向量表例子:Cortex-M3的异常处理第30页一个完整向量表例子:Cortex-M3的异常处理第31页4.4.2开启过程正常情况,系统复位之后按下页表所表示步骤开启一个C/C++程序在运行时先完成最初三步,然后调用main()。复位服务子程序用来开启应用程序和允许中止。Cortex-M3的异常处理第32页系统复位之后开启步骤Cortex-M3的异常处理第33页系统复位之后开启步骤(续)Cortex-M3的异常处理第34页复位服务子程序在中止处理完成后,有三种方式可调用复位服务子程序:(经过例子说明)例1,纯粹Sleep-on-exit复位服务子程序(复位程序不进行主循环);例2,带有经过WFI(WaitForInterrupt)选择睡眠模式复位服务子程序;例3,选定Sleep-on-exit,可被要求ISR唤醒而产生复位子程序。Cortex-M3的异常处理第35页例1,纯粹Sleep-on-exitCortex-M3的异常处理第36页例2,经过WFI选择睡眠模式Cortex-M3的异常处理第37页例3,Sleep-on-exit,可被要求ISR唤醒Cortex-M3的异常处理第38页4.5多堆栈设置为了实现多堆栈,应用程序须执行下面操作:用MSR指令来设置Process_SP存放器;假如使用MPU(MemoryProtectionUnit),可适当地保护栈;Thread模式下初始化栈和访问方式。Cortex-M3的异常处理第39页Thread模式下栈假如Thread模式下访问方式由特权方式变成用户方式,仅可经过其它ISR,比如SVCall,才能使之从用户方式返回到特权方式。在Thread模式下所用栈可在Main栈和Process栈之间切换,不过这么做会影响对线程局部变量访问。所以,在Thread模式下最好是经过一个ISR来改变所使用栈。Cortex-M3的异常处理第40页栈切换过程(一):(1)调用设置程序,完成:a.用MSR指令设置其它栈;b.假如有MPU,则使能MPU以支持基区;c.调用开启程序;d.从设置程序中返回;(2)将Thread模式访问方式改为无特权方式(用户方式);Cortex-M3的异常处理第41页栈切换过程(二):(3)使用SVC调用内核,内核将:a.开启线程;b.使用MRS指令为当前用户线程读取SP,并将其保留在TCB(线程控制块)中;c.使用MSR指令为下个线程设置SP,通常是Process_SP;d.假如需要,为新当前线程设置MPU;e.返回到新当前线程。Cortex-M3的异常处理第42页例子:显示怎样利用PSP在ISR中修改EXC_RETURN值,用于返回。Cortex-M3的异常处理第43页例子:显示怎样使用PSP完成切换线程后内容切换。Cortex-M3的异常处理第44页4.6Abort模式有一些异常称为故障,有四种事件能产生故障:取指令或从向量表加载向量时总线犯错;数据访问时总线犯错;内部检验错误,如未定义指令或试图用BX指令改变状态。在NVIC中故障状态存放器将指出故障原因;超越访问方式特权或未管理区造成MPU故障。

Cortex-M3的异常处理第45页Abort模式当处理器发生故障后,进入Abort模式,故障处理可分为两类:固定优先级硬故障;优先权可设定local故障。Cortex-M3的异常处理第46页4.6.1硬故障假如故障因为优先级或可配置故障处理程序被禁止而不能激活,此时全部这些故障均为硬故障。全部异常中,仅有复位和NMI能抢占固定优先级硬故障。硬故障能够抢占除了复位和NMI或其它硬故障之外其它任何异常。Cortex-M3的异常处理第47页4.6.2Local故障和升级当允许时,Local故障处理程序处理全部普通故障。当碰到以下几个情况时Local故障将升级到硬故障:一个Local故障处理引发了一个与之所服务故障类型相同故障;一个Local故障处理引发了一个相同或更高优先级故障;一个异常处理引发了一个有相同或更高优先级故障;禁止Local故障。Cortex-M3的异常处理第48页Local故障列表(1)Cortex-M3的异常处理第49页Local故障列表(2)Cortex-M3的异常处理第50页Local故障列表(3)Cortex-M3的异常处理第51页4.6.3故障状态存放器和故障地址存放器每个故障都有一个故障状态存放器,用以对该故障状态进行标志。Cortex-M3处理器共有5个故障状态存放器(StatueRegister,SR):三个可配置故障状态存放器(MemManageSR-MMSR、BusFaultSR-BFSR、UsageFaultUFSR),与三个可配置故障处理相对应;一个硬故障状态存放器(HardFaultSR-HFSR);一个调试故

温馨提示

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

评论

0/150

提交评论