嵌入式养成计划-54----ARM--异常处理流程

一百三十五、异常处理流程

135.1 arm处理器工作模式

在这里插入图片描述

135.2 异常源和异常模式关系

135.2.1 异常源

  • 异常源就是引发处理器进入相应异常模式

135.2.2 对应关系

异常模式异常源
FIQ模式FIQ类型异常源引发处理器进入FIQ模式
IRQ模式IRQ类型异常源引发处理器进入IRQ模式
SVC模式上电复位(RESET)引发处理器进入svc模式
swi(软中断指令)引发处理器进入svc模式
undef模式未定义异常源引发处理器进入undef模式
abort模式prefetch abort引发处理器进入abort模式
data abort引发处理器进入abort模式

135.2.3 总结

  1. 五种异常模式,对应七种异常源
  2. 异常源具有优先级,复位优先级最高
  3. 根据不同的异常源,进入不同异常模式,执行异常处理程序

135.3 异常处理流程(重点)

135.3.1 框图

在这里插入图片描述

135.3.2 保存现场(四大步三小步)

  1. 保存CPSR寄存器中的值,到SPSR_寄存器中
  2. 修改CPSR寄存器中的值
    1. 修改CPSR寄存器中的模式位,修改为对应的异常模式
    2. 修改CPSR寄存器中的T位,T=0为arm状态,执行arm指令集
    3. 根据需要,禁止相应的中断位
  3. 保存函数的返回地址,到LR寄存器中
  4. 修改PC指向异常处理程序的入口

135.3.3 恢复现场

  1. 将SPSR_寄存器中,恢复给CPSR寄存器
  2. 将LR寄存器中的值,恢复给PC

135.3.4 为什么引入异常向量表

  • 问题:修改PC指向异常处理程序的入口 ==> 入口就是一个标签,标签就是函数名,每个人编写的函数名不一致
  • 答:函数名不一致,每个函数名就是地址,arm公司设置异常向量表,通过操作一块地址空间

135.4 异常向量表

135.4.1 什么是异常向量表

  1. 异常向量表是一块寻址空间,这块寻址空间占用32字节,平均分成8份,每份占用4字节空间
  2. 异常向量表存放七种异常源,1份进行保留
  3. 异常向量表地址固定,不可以进行修改
  4. 通过指定异常向量表的基地址,根据偏移地址,可以找到对应的异常源

135.4.2 框图

在这里插入图片描述

135.4.3 软中指令

软中断指令码:swi
格式:swi 软中断号(0 ~ 0xffffff)====> 0 ~ 16,777,215

135.4.4 软中断代码编写

.text @文本段 
.global _start  @声明一个_start全局函数_start:  @指定汇编中函数入口@0.构建异常向量表b resetb undef_interruptb software_interruptb prefetch_abortb data_abortb .b irqb fiq    
reset:            @1.系统一上电处于SVC模式,初始化SVC模式栈指针0x40000800ldr sp,=0x40000800@2. 从SVC模式切换到user模式,初始化user模式栈指针0x40000700msr cpsr,#0xD0ldr sp,=0x40000700@3.r0 = 0x1  r1 = 0x2mov r0,#0x1mov r1,#0x2@4.执行软中断指令 swi 2  ====> 保存现场(四大步三小步)swi 2@ r0 = r0 + r1 = 0x3add r0,r0,r1b stopundef_interrupt:
software_interrupt:@ 压栈保存现场 r0 = 0x1  r1 = 0x2stmfd sp!,{r0-r12,lr}@3.r0 = 0x3  r1 = 0x4mov r0,#0x3mov r1,#0x4@4. r0 = r0 + r1 = 0x7add r0,r0,r1@5. 出栈恢复现场ldmfd sp!,{r0-r12,pc}^ @^:将SPSR_<MODE>寄存器中,恢复给CPSR寄存器prefetch_abort:
data_abort:
irq:
fiq:stop:  @ 声明一个stop函数标签b stop     @ 跳转到stop标签下的第一条指令执行 相当于C语言中while(1)
.end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/176156.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工具及方法 - 手机扫条码工具: SCANDIT APP

一般扫个链接使用微信扫一扫即可。扫具体条码&#xff0c;可以在微信里搜索小程序&#xff0c;打开也能扫&#xff0c;得到条码内容。 还有其他方式&#xff0c;比如使用淘宝、百度等APP也可以直接扫码条码&#xff0c;还能得到更多的信息。 使用百度的话&#xff0c;不扫条码…

3D造型渲染软件DAZ Studio mac中文版介绍

DAZ Studio mac是一款3D造型和渲染软件&#xff0c;由 Daz 3D 公司开发。它允许用户创建、编辑、动画化并渲染精美的数字图像与动画。DAZ Studio 还提供了一个虚拟的3D艺术家工作室环境&#xff0c;让用户可以轻松地设置场景、布置角色和应用材质。 用户可以通过 DAZ Studio 中…

图像实时采集系统

本方案主要在于解决图像实时采集系统对算法校正的仿真实验&#xff0c;以及采集卡接收电路的验证。 由于图像实时跟踪处理系统需要大量的外场景实验&#xff0c;大部分时候只能通过采集的现场图像以在电脑软件中读取图片的形式来进行验证算法&#xff0c;而无法通过采集卡对接…

《网络协议》05. 网络通信安全 · 密码技术

title: 《网络协议》05. 网络通信安全 密码技术 date: 2022-09-10 15:16:15 updated: 2023-11-12 07:03:52 categories: 学习记录&#xff1a;网络协议 excerpt: 网络通信安全&#xff08;ARP 欺骗&#xff0c;DoS & DDoS&#xff0c;SYN 洪水攻击&#xff0c;LAND 攻击&a…

基于flask+bootstrap4实现的注重创作的轻博客系统项目源码

一个注重创作的轻博客系统 作为一名技术人员一定要有自己的博客&#xff0c;用来记录平时技术上遇到的问题&#xff0c;把技术分享出去就像滚雪球一样会越來越大&#xff0c;于是我在何三博客的基础上开发了[l4blog]&#xff0c;一个使用python开发的轻量博客系统&#xff0c;…

github镜像访问方法

https://ghproxy.com/ &#xff08;GitHub 文件 , Releases , archive , gist , raw.githubusercontent.com 文件代理加速下载服务&#xff09; https://mirror.ghproxy.com/ 在这个网址后面直接加上github的网址&#xff0c;如&#xff1a; https://mirror.ghproxy.com/htt…

ZYNQ实验--Petalinux--Linux C 编程入门

Linux C 编程入门 在 Windows 下我们可以使用各种各样的 IDE 进行编程&#xff0c;比如强大的 Visual Studio。Ubuntu 下也有一些可以进行编程的工具&#xff0c;但是大多都只是编辑器&#xff0c;也就是只能进行代码编辑&#xff0c;如果要编译的话就需要用到 GCC 编译器&…

Protobuf 语法

Protobuf语法 1.1.1. 基本规范 文件以.proto做为文件后缀&#xff0c;除结构定义外的语句以分号结尾 结构定义可以包含&#xff1a;message、service、enum rpc方法定义结尾的分号可有可无 Message命名采用驼峰命名方式&#xff0c;字段命名采用小写字母加下划线分隔方式 …

如何使用内网穿透实现远程公网访问windows node.js的服务端

使用Nodejs搭建简单的web网页并实现公网访问 前言 Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架。 Node.js自带运行时环境可在Javascript脚本的基础上可以解释和执行(这类似于JVM的Java字节码)。这个运行时允许在浏览器以外的任何机器上执行JavaScri…

轻量封装WebGPU渲染系统示例<31>- 若干线条对象(源码)

线条对象包括: AABB包围盒&#xff0c;OBB包围盒, 曲线&#xff0c;直线&#xff0c;圆&#xff0c;坐标轴&#xff0c;视锥体线框&#xff0c;方形网格等。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/LineOb…

go学习之接口知识

文章目录 接口1.接口案例代码展示2.基本介绍3.基本语法4.应用场景介绍5.注意事项和细节6.接口编程经典案例7.接口与继承之间的比较8.面向对象编程--多态1&#xff09;基本介绍2&#xff09;快速入门3&#xff09;接口体现多态的两种形式 9.类型断言1&#xff09;先看一个需求2&…

Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验

360无死角全景照片总能给人带来强烈的视觉震撼&#xff0c;有着大片的既视感。那怎么才能拍出360球形照片呢&#xff1f;它的拍摄原理是通过图片某个点位为中心将图片其他部位螺旋式、旋转式处理&#xff0c;从而达到沉浸式体验的效果。俗话说“工欲善其事&#xff0c;必先利其…