- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 表定义了 EXC_RETURN[3:0]提供的返回信息。 返回时如果出现了上表中的保留项,将导致一个应用故障的异常。 * Cortex-M3 处理器复位时,NVIC 同时复位并控制内核从复位状态中释放出来。 Cortex-M3 的复位过程与 ARM7 和 ARM9 有些区别,后者通 常是从 0 地址开始执行第一条指令,而且总是一条跳转指令。 * 当中断允许时,不管向量表放在何处,向量总是指向所有可屏蔽异常的处理。同样,如果使用 SVC 指令,SVCall ISR 的位置也被定位。 * 根据处理器的工作模式不同,应用程序可以使用 main 和 process 两个不同的栈。处理器在 进入异常处理和退出异常处理时,通常要在不同的工作模式、不同的代码访问方式、不同的堆栈之 间切换。 * PSP(Process SP) * 第二个总线故障不能逐步升级,因为一个同类型的故障不能抢占自身。这意味着如果被损坏 的栈产生了一个故障,即使为处理程序进行的压栈失败了,故障处理程序仍能执行,但是栈中 的内容已经被毁坏了。 * Local 故障根据其产生的原因分类 * 根据故障种类不同,其分别设置以上 5 个状态寄存器中的某个对应位。 * 限于篇幅,故障状态寄存器和故障地址寄存器的具体标志位的设置在此不做详细介绍,读 者如需了解,可查阅 ARMv7-M 和 Cortex-M3 相关技术手册。 一个完整向量表的例子: * 4.4.2 启动过程 正常情况,系统复位之后按下页表所示步骤启动 一个 C/C++程序在运行时先完成最初的三步,然后调用 main()。 复位服务子程序用来启动应用程序和允许中断。 * 系统复位之后的启动步骤 * 系统复位之后的启动步骤(续) * 复位服务子程序 在中断处理完成后,有三种方式可调用复位服 务子程序:(通过例子说明) 例 1,纯粹 Sleep-on-exit 的复位服务子程序(复位程序不进行主循环); 例 2,带有通过 WFI(Wait For Interrupt)选择睡眠模式的复位服务子程序; 例 3,选定的 Sleep-on-exit,可被要求的 ISR 唤醒而产生复位子程序。 * 例 1,纯粹 Sleep-on-exit * 例 2,通过 WFI选择睡眠模式 * 例 3, Sleep-on-exit,可被要求的 ISR 唤醒 * 4.5 多堆栈的设置 为了实现多堆栈,应用程序须执行下面操作: 用 MSR 指令来设置 Process_SP 寄存器; 如果使用 MPU(Memory Protection Unit),可适当地保护栈; Thread 模式下初始化栈和访问方式。 * Thread 模式下的栈 如果 Thread 模式下的访问方式由特权方式变成用户方式,仅可通过其他的 ISR,例如 SVCall,才能使之从用户方式返回到特权方式。 在 Thread 模式下所用的栈可在 Main 栈和 Process 栈之间切换,但是这样做会影响对线程局部变量的访问。因此,在 Thread 模式下最好是通过一个 ISR 来改变所使用的栈。 * 栈的切换过程(一): (1) 调用设置程序,完成: a. 用 MSR 指令设置其他栈; b. 如果有 MPU,则使能 MPU 以支持基区; c. 调用启动程序; d. 从设置程序中返回; (2) 将Thread 模式的访问方式改为无特权方式(用户方式); * 栈的切换过程(二): (3) 使用 SVC 调用内核,内核将: a. 启动线程; b. 使用 MRS 指令为当前用户线程读取 SP,并 将其保存在 TCB(线程控制块)中; c. 使用 MSR 指令为下个线程设置 SP,通常是Process_SP; d. 如果需要,为新的当前线程设置 MPU; e. 返回到新的当前线程。 * 例子:显示如何利用 PSP在 ISR 中修改EXC_RETURN 的值,用于返回。 * 例子:显示如何使用 PSP 完成切换线程后的内容切换。 * 4.6 Abort 模式 有一些异常称为故障,有四种事件能产生故障: 取指令或从向量表加载向量时总线出错; 数据访问时总线出错; 内部检查错误,如未定义指令或试图用 BX 指令改变状态。在 NVIC 中的故障状态寄存器将指出故障的原因; 超越访问方式特权或未管理区导致 MPU 故障。 * Abort 模式 当处理器发生故障后,进入 Abort 模式,故障处理可分为两类: 固定优先级硬故障; 优先权可设定的 local 故障。 * 4.6.1 硬故障 如果故障由于优先级或可配置的故障处理程序被禁止而不能激活,此时所有这些故障均为 硬故障。 所有异常中,仅有复位和 NMI 能抢占固定
文档评论(0)