嵌入式养成计划-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 reset
        b undef_interrupt
        b software_interrupt
        b prefetch_abort
        b data_abort
        b .
        b irq
        b fiq    
reset:            
    @1.系统一上电处于SVC模式,初始化SVC模式栈指针0x40000800
    ldr sp,=0x40000800
    @2. 从SVC模式切换到user模式,初始化user模式栈指针0x40000700
    msr cpsr,#0xD0
    ldr sp,=0x40000700
    @3.r0 = 0x1  r1 = 0x2
    mov r0,#0x1
    mov r1,#0x2
    @4.执行软中断指令 swi 2  ====> 保存现场(四大步三小步)
    swi 2
    @ r0 = r0 + r1 = 0x3
    add r0,r0,r1
    b stop
    
undef_interrupt:
software_interrupt:
    @ 压栈保存现场 r0 = 0x1  r1 = 0x2
    stmfd sp!,{r0-r12,lr}
    @3.r0 = 0x3  r1 = 0x4
    mov r0,#0x3
    mov r1,#0x4
    @4. r0 = r0 + r1 = 0x7
    add 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

opencv车牌识别<一>

目录 一、概述 二、ANPR简介 一、概述 本文将介绍创建自动车牌识别(Automatic Number Plate Recognition&#xff0c;ANPR)所需的步骤。对于不同的情形&#xff0c;实现自动车牌识别会用不同的方法和技术&#xff0c;例如&#xff0c;IR 摄像机、固定汽车位置、光照条件等…

spring cloud之配置中心

Config 统一配置中心(*) 1.简介 # 统一配置中心 - 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/#_spring_cloud_config_server- config 分为 config server 和 config client。用来统一管理所有微服务的配置统一配置…

【Python 千题 —— 基础篇】欢迎光临

题目描述 题目描述 欢迎光临。为列表中的每个嘉宾打印欢迎光临语句。例如&#xff0c;有一份嘉宾列表 ["李二狗", "王子鸣"]&#xff0c;则需要根据嘉宾名单打印输出&#xff1a; 欢迎光临&#xff01;李二狗。 欢迎光临&#xff01;王子鸣。下面是一份…

基于JAX-WS的RESTful web服务返回通过JAXB注解生成的xml文档

基于JAX-WS编写的RESTful web服务&#xff0c;返回xml文档。这个xml文档可以基于JAXB注解的形式来生成&#xff0c;简化xml的生成。 例如&#xff0c;下面RegisterResponse 这个类使用了JAXB的注解&#xff1a; package com.thb.server.register;import jakarta.xml.bind.ann…

C语言--指针与数组--遍历数组的n种方式【详细】

一.一维数组名的含义 arr一般表示数组的其实地址&#xff08;除了两种例外&#xff09; 1.在定义数组的同一个函数中(不是形参),求sizeof(arr),求整个数组的字节数 2.在定义数组的同一个函数中(不是形参),&arr1,加整个数组的大小 (经常考试) 3.除上面以外,arr都表示数组的…

智能穿戴AR眼镜主板方案定制_MTK平台AR智能眼镜PCB板开发

AR智能眼镜&#xff0c;是采用了多种技术实现增强现实效果&#xff0c;是将虚拟信息和现实场景相结合的智能设备。 AR智能眼镜硬件上&#xff0c;包括多个传感器、显示装置和处理器等。其中&#xff0c;传感器用于捕捉用户的动作和环境信息&#xff0c;如摄像头、陀螺仪、加速…

【python】爬取酷狗音乐Top500排行榜【附源码】

一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件和目录操作。 如果出现模块报错 进入控制台输入&#xff…

Axure原型设计工具怎么样?有替代软件吗?

Axurerp是一种快速原型设计工具&#xff0c;可以制作高度互动的HTML原型。设计师不仅可以使用Axure绘制线框图和原型&#xff0c;还可以在Axurerp中完成一系列用户体验设计。在本文中&#xff0c;我们将根据用户体验设计师的真实经验&#xff0c;触发用户体验设计师的实际工作&…

(论文阅读30/100)Convolutional Pose Machines

30.文献阅读笔记CPMs 简介 题目 Convolutional Pose Machines 作者 Shih-En Wei, Varun Ramakrishna, Takeo Kanade, and Yaser Sheikh, CVPR, 2016. 原文链接 https://arxiv.org/pdf/1602.00134.pdf 关键词 Convolutional Pose Machines&#xff08;CPMs&#xff09;…

数据库管理-第116期 Oracle Exadata 06-ESS-下(202301114)

数据库管理-第116期 Oracle Exadata 06-ESS-下&#xff08;202301114&#xff09; 距离上一次正儿八经的技术分享又过了整整一周了&#xff0c;距离上一期Exadata专题文章也过了11天了&#xff0c;今天一鼓作气把ESS写完&#xff0c;毕竟明天又要飞北京了。 1 Smart Scan 其…

SpringCloud Alibaba(中):服务熔断降级-Sentinel

Sentinel Sentinel是阿里巴巴开源的分布式系统流量防卫防护组件&#xff0c;主要对分布式系统中的流量进行控制、熔断降级等保护操作。Sentinel的目标是成为互联网级别分布式系统的流量防卫防护组件&#xff0c;它与系统的各个部分集成&#xff0c;保护着系统的入口和出口。 …

【蓝桥杯选拔赛真题20】C++求正方形面积 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++求正方形面积 一、题目要求 1、编程实现 2、输入输出 二、算法分析

Hadoop3.3.4分布式安装

安装前提&#xff1a;已经配置好java环境&#xff0c;所有机器之间ssh的免密登录。 注意&#xff1a;下文中的flinkv1、flinkv2、flinkv3是三台服务器的别名 1.集群部署规划 注意&#xff1a;NameNode和SecondaryNameNode不要安装在同一台服务器 注意&#xff1a;ResourceMan…

软件测试/测试开发丨​利用人工智能ChatGPT批量生成测试数据

点此获取更多相关资料 简介 测试数据是指一组专注于为测试服务的数据&#xff0c;既可以作为功能的输入去验证输出&#xff0c;也可以去触发各类异常场景。 测试数据的设计尤为重要&#xff0c;等价类、边界值、正交法等测试用例设计方法都是为了更全面地设计对应的测试数据…

上机实验三 图的最小生成树算法设计 西安石油大学数据结构

二叉树设计 实验名称&#xff1a;二叉树设计 &#xff08;1&#xff09;实验目的&#xff1a; 1&#xff09; 掌握二叉树的逻辑结构。 2&#xff09; 掌握二叉树的二叉链表存储结构&#xff1b; 3&#xff09; 掌握基于二叉链表存储的二叉树的遍历等操作的实现。 &#x…

F : DS图遍历--广度优先搜索

Description 给出一个图的邻接矩阵&#xff0c;对图进行广度优先搜索&#xff0c;从顶点0开始 注意&#xff1a;图n个顶点编号从0到n-1 如果图不连通&#xff0c;则对尚未访问的编号结点继续进行广度优先搜索&#xff0c;直到所有结点被访问 Input 第一行输入t&#xff0c…

Camtasia 2024中文版功能介绍

在如今的数字时代&#xff0c;屏幕录制已成为许多工作或学习中不可或缺的一部分&#xff0c;无论是制作教学视频、演示软件功能&#xff0c;还是为了录制游戏过程&#xff0c;屏幕录制软件都扮演着至关重要的角色。实际上屏幕录制不仅仅可以单纯录制屏幕&#xff0c;还能玩出非…

【Kotlin精简】第8章 协程

1 简介 Kotlin 中的协程提供了一种全新处理并发的方式&#xff0c;您可以在 Android 平台上使用它来简化异步执行的代码。协程是从 Kotlin 1.3 版本开始引入&#xff0c;但这一概念在编程世界诞生的黎明之际就有了&#xff0c;最早使用协程的编程语言可以追溯到 1967 年的 Sim…

相约黄浦江畔,汇聚AI与边缘计算的力量

很高兴告诉您&#xff1a;全球边缘计算大会上海站即将盛大启幕&#xff01; 第八届全球边缘计算大会将于12月16日&#xff08;周六&#xff09;在上海黄浦江旁边的三至喜来登酒店召开&#xff0c;距离这场边缘计算年度盛会开幕仅剩最后35天啦&#xff01; 参会收益 开阔视野&am…

咱就是问坐发动机上跑得快吗?意塔杰特Dragster559 Twin

这家伙可以说是这次米兰车展踏板车里面最怪的了&#xff0c;不过性能方面有点出众&#xff0c;外观也是极为独特的。 车架采用的是裸露的编制车架&#xff0c;这也符合这个品牌的风格&#xff0c;这也是他们家的一个卖点了&#xff0c;不过这个车好像还是工程样车的状态&#x…