ARM 异常处理方式简单介绍

news2024/11/26 18:43:17

一、什么是异常

  • 正常工作之外的流程都叫异常;

也就是说,除了用户模式和系统模式外,其他情况都是异常,见下图:

在这里插入图片描述

  • 异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作;
  • 中断是异常的一种;

二、异常向量表

  • 所有的 CPU 都有异常向量表,这是 CPU 设计时就设定好的,是硬件决定的
  • 当异常发生时,CPU 会自动动作(PC 跳转到异常向量处处理异常,有时伴有一些辅助动作);
  • 异常向量表是硬件向软件提供的处理异常的支持;

三、ARM的异常处理机制

  • 当异常产生时,需要切换用户模式到某个异常模式 mode,ARM core:

    • 拷贝用户模式的 CPSR 到 SPSR_< mode >
    • 此时,CPSR 寄存器被异常模式 mode 占用,设置适当的 CPSR 位:
      • 改变处理器状态进入 ARM 态
      • 改变处理器模式进入相应的异常模式
      • 设置中断禁止位禁止相应中断 (如果需要)
    • 保存返回地址到 LR_< mode >,用于当退出异常模式 mode 时,继续执行用户模式剩下的程序指令
    • 设置 PC 为相应的异常向量
  • 返回时, 异常处理需要:

    • 从 SPSR_< mode > 恢复 CPSR,恢复用户模式下的 ARM 处理器的状态
    • 从 LR_< mode > 恢复 PC,继续执行用户模式剩下的程序指令
    • Note:这些操作只能在 ARM 态执行.

归纳

异常向量表

1、

异常向量表中,Software Interrupt 是软件中断。发生软件中断的时候,CPU 就会跳转到此处去执行。

什么是软件中断?
一般中断都是硬件产生的,比如按下按钮,手指滑动触摸屏等等。

软件中断, 其实就是 CPU 中的一条汇编指令,只要执行这条汇编指令,就会产生一个软中断;这种软中断是靠程序员
写代码去产生的。软中断一般是用来实现系操作系统的系统调用的,比如:程序员调用 fopen 函数打开一个文件,fopen 函数就会去调用系统调用函数 open ,open 函数会触发软件中断,从而去调用操作系统内置的 open 相关的代码指令。

2、

由于 Thumb 状态是无法处理异常的,所以当异常的时候,需要确保 CPU 处于 ARM 状态,CPU 才能处理异常。
因此,当进入异常模式时,需要改变处理器状态进入 ARM 态。


总结

  • 异常处理中,有一些是硬件自动做的,有一些是程序员需要自己做的。需要搞清楚哪些是需要自己做的,才知道如何写代码。
  • 以上说的是 CPU 设计时提供的异常向量表,一般称为一级向量表。有些 CPU 为了支持多个中断,还会提供二级中断向量表,处理思路类似于这里说的一级中断向量表。

B站朱友鹏老师.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3-azido-1-Propanamine,88192-19-2,3-叠氮基丙胺 性质特点有哪些?

●中文名&#xff1a;3-叠氮基丙胺&#xff0c;3-叠氮基-丙胺 ●英文名&#xff1a;3-azido-1-Propanamine ●外观以及性质&#xff1a; 西安凯新生物科技有限公司供应的&#xff1a;​3-azido-1-Propanamine为淡黄色或无色油状&#xff0c;含有叠氮基团&#xff0c;叠氮基可以…

Node.js 入门教程 23 使用 npm 的语义版本控制 24 卸载 npm 软件包 25 npm 全局或本地的软件包

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程23 使用 npm 的语义版本控制24 卸载 npm 软件包25 npm 全局或本地的软件包23 使用 npm 的语义版本控制 如果 Node.js 软件…

第147篇 笔记-预言机(Oracle)

定义&#xff1a;区块链预言机是将区块链连接到外部系统的实体&#xff0c;从而使智能合约能够基于现实世界的输入和输出执行。 预言机为分散的 Web3 生态系统提供了一种访问现有数据源、遗留系统和高级计算的方式。去中心化预言机网络&#xff08;DON&#xff09;支持创建混合…

[附源码]计算机毕业设计springboot“小世界”私人空间

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java学历、技术哪个更重要?学历不好还能进大厂吗?

Java程序员的入行门槛并不高&#xff0c;并不看重你的学历和其他各方面&#xff0c;唯一看重的就是你技术是否过硬&#xff0c;能否独立参与到企业级开发的项目中去&#xff0c;说简单点入行只看技术。但是你如果想要长远发展服日后走上管理岗位&#xff0c;最好还是自考个本科…

使用 SwiftUI 构建可搜索列表,为您的 iOS 应用程序创建具有自动完成功能的可搜索列表(教程含源码)

设计新应用程序时面临的一大挑战是确保您的用户可以轻松浏览内容。如果体验太难或花费太多时间,无论您的内容有多好,很多用户都会转向另一个应用程序选项或放弃。 期望用户滚动浏览一长串选项是不切实际的,添加搜索功能可以极大地改善用户体验。更进一步,在用户键入时让列…

2.RabbitMQ安装

2.RabbitMQ安装 注意&#xff1a;安装时使用的系统是CentOS-7,MQ基本概念和RabbitMQ的相关知识请查看写的文章。 1、安装依赖环境 在线安装依赖环境&#xff1a; yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel…

17、Health Check 健康检查

强大的自愈能力是kubernetes容器编排引擎的重要特性。自愈的默认实现方式是自动重启发生故障的容器。除此之外&#xff0c;还可通过Liveness和Readiness探测机制设置更精细的健康检查&#xff0c;进而实现如下要求&#xff1a;零停机部署避免部署无效的镜像更加安全的滚动升级一…

有没有免费的视频剪辑软件?快来看看这些视频裁剪软件

我们有时候将视频拍好后&#xff0c;会觉得视频中有些画面的边缘出现了瑕疵&#xff0c;就想要将那些边缘裁剪掉&#xff0c;但是却不知道要怎么操作才能裁剪视频的画面。其实想要裁剪视频的画面很简单&#xff0c;我们只需要借助一些视频处理工具就可以实现裁剪视频画面的操作…

Swift 周报 第十八期 |技术汇总

前言 本期是 Swift 编辑组自主整理周报的第九期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#xff0c;欢迎在文末留言。 欢迎投稿或推荐内容。目前计划每两周周一发布&#xff0c;欢迎志同道合的朋友一起加入周报整理。 蝴蝶的生命之所以如此短暂&#xff0c…

解决git中出现的“fatal ‘xxxx‘ does not appear to be a git repository”错误的方法

今天来分享一下我在使用git中出现的一个错误提示&#xff0c;话不多说&#xff0c;我们直接来分析~ 这个错误是我在通过SSH方式pull远程仓库时候出现的&#xff0c;错误提示如下&#xff1a; fatal: xxx(你的仓库别名) does not appear to be a git repository fatal: Could n…

【C++学习】string的模拟实现

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 上篇文章中本喵介绍了C标准库中string类的使用&#xff0c;下面本喵来模拟实现一下string类。库中的s…

【Spring框架】爆gan两万六千字,助你通关IoC和DI

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;【Spring】 &#x1f96d;本文内…

navicat连接mysql数据库

一、打开navicat软件 二、创建一个测试连接 1、点击【连接】&#xff0c;选择【MySQL】 2、创建连接。 3、连接出现报错 三、解决方式&#xff1a; 1、键盘上wins r 同时按&#xff0c;输入cmd&#xff0c;调出命令行窗口。 2、通过cmd登陆mysql 3、输入以下语句修改密码 更…

拿下50亿后,岚图能否一绘蓝图?

近两年&#xff0c;我国新能源汽车市场呈现出一派百家争鸣、高歌猛进的势头。2021年&#xff0c;A股新能源汽车指数全年上涨42.72%&#xff0c;大幅跑赢沪深300、中证500和汽车指数。 然而进入2022年寒冬&#xff0c;新能源汽车市场却集体打了个“哆嗦”。 美股特斯拉自今年4…

设备安装CoreELEC系统,并配置遥控:实现低成本NAS影音播放器

目录0. 前言CoreELEC简介动机硬件1.准备工作1.1下载镜像1.2 制作启动U盘2.安装CoreELEC2.1 从U盘启动2.2 CoreELEC写入盒子emmc3.设置遥控器本文原首发于zdm&#xff0c;由于该平台审核机制出现问题且编辑器极其不好用&#xff0c;所以发布于此 仅作为记录操作的用途 0. 前言 …

代码随想录66——额外题目【回溯、贪心】:52N皇后II、649Dota2 参议院、1221分割平衡字符串

文章目录1.52N皇后II1.1.题目1.2.解答2.649Dota2 参议院2.1.题目2.2.解答3.1221分割平衡字符串3.1.题目3.2.解答1.52N皇后II 参考&#xff1a;代码随想录&#xff0c;52N皇后II&#xff1b;力扣题目链接 1.1.题目 1.2.解答 这道题和之前做过的 51.N皇后 是一模一样的&#x…

怿星科技参加2022(第六届)高工智能汽车年会

2022&#xff08;第六届&#xff09;高工智能汽车年会将于下周三在上海虹桥拉开帷幕&#xff0c;怿星科技作为本次活动的赞助商&#xff0c;将在11月30日下午的【座舱算力与系统】分论坛与大家分享关于智能汽车软硬分离探索与实践的专题演讲。此外&#xff0c;在活动期间&#…

docker 之间相互通讯

方式一&#xff1a;通过IP直接访问(不推荐) 查询容器对应的IP命令&#xff1a; docker inspect 容器 | grep IPAddress 通过docker容器启动的实例分配的ip地址&#xff0c;直接访问&#xff0c;docker重启时IP会发生变化&#xff0c;所以不推荐 方式二&#xff1a;通过端口…

html 多按钮点击按钮颜色改变 捷弘和宇乐两个按钮,在点击选中时颜色做区分

捷弘和宇乐两个按钮&#xff0c;在点击选中时颜色做区分 点击捷弘按钮&#xff0c;捷弘按钮颜色改变&#xff1b;点击宇乐按钮&#xff0c;宇乐按钮颜色改变&#xff0c;捷弘按钮颜色恢复 如图&#xff1a; html代码&#xff1a; <a id"jiehong" class"bt…