硬件-1、体系架构

cpu

处理器

arm处理器的七种工作模式

arm寄存器

两张图是一样的,r0---r12是通用寄存器。其他寄存器可参考图一,cpu架构。

程序状态寄存器psr(cpsr/spsr)

程序异常处理

理解示例

当使用swi(软中断指令)指令时,假设此时程序异常,使用异常处理

由此,此时会进入supervisor模式,由于我们的代码都在user模式下运行,所以首先我们要切回user模式。在程序状态寄存器框图中,能看到mode位的值决定模式

异常处理1

这里有个操作

利用MSR操作,可以只传psr寄存器的一个域(fields),也可以是多个,这里我们只用c域。

把cpsr的值保存到r0,再变r0,最后把改好的r0的c域给到cpsr

这里不直接改cpsr,因为中间一些不存在的寄存器状态容易出错。

继续看这个图

异常处理2

1.观察

当程序直行到中断断点前cpsr寄存器为d0

点击下一步,看到spsr为d0,拷贝过来了

可以看到,中断禁止位为1,并处于arm态,第三条进入相应异常模式就是supervise模式。

返回了地址

2.设置异常向量表

由于我们这里是中断导致的异常,由中断向量表,所以初始化中断向量表时应该在0x08的位置处理异常

中断处理规定了的上图所示的地址,所以我们在初始化中断向量表时必须写在程序最开始,符合向量表初始化要求的地址。当异常1发生,就会跳到那个地址去。

中断发生后,会进入异常处理里的第三条,我们在这里调用一个定义的中断处理函数。

这个函数由我们定义

由寄存器图看出,没种状态的sp寄存器都是单独的。

pc的空间地址是0x40000000到0x40001000,这里由supervise模式切换到user模式,所以要分出两片空间(这块理解的不太清楚,还没学,可能有误)

但这里是必须的

3.从spsr恢复cpsr

区分中断的参数

swi的取值范围是0-0xffffff

因为lr寄存器存了swi的返回地址,就是下图45行代码的地址

所以用lr寄存器的值减去0x4就得到43行代码的地址,再去掉高八位,就可以拿到0x7的值了

再根据值进行判断处理

为了简单,我们可以在c文件定义.c处理函数。

比如

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

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

相关文章

【VMware Workstation】启动虚拟机报错“此主机支持 AMD-V,但 AMD-V 处于禁用状态”

问题出现步骤: 打开虚拟机: 然后报错: “此主机支持 AMD-V,但 AMD-V 处于禁用状态。 如果已在 BIOS/固件设置中禁用 AMD-V,或主机自更改此设置后从未重新启动,则 AMD-V 可能被禁用。 (1) 确认 BIOS/固件设…

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…

数据分析 -- numpy

文章目录 numpy库简介简介特点 numpy操作数组创建数组属性数组变更数据计算 numpy库简介 简介 开源的Python库,它提供了高性能的多维数值(numpy.ndarray)计算能力;由“Numerical Python”缩写而来,并且它是Pandas库的…

Zabbix6 - Centos7部署Grafana可视化图形监控系统配置手册手册

Zabbix6 - Centos7部署Grafana可视化图形监控系统配置手册手册 概述: Grafana是一个开源的数据可视化和监控平台。其特点: 1)丰富的可视化显示插件,包括热图、折线图、饼图,表格等; 2)支持多数据…

L2-2 口罩发放 (25 分)

坑点: 应该就是题目要求的身份证号唯一 然后是相同的人同一天多次申请 然后是时间相同按照申请记录排序 需要注意的是,不要在同一天内看到满足要求的就直接发放口罩,有可能发完之后发现后面的人的时间更早 #include "bits/stdc.h" …

Web Form

https://github.com/bonfy/go-mega/blob/master/04-web-form.md 从这网站学的 随着我们项目的扩大,代码量会愈来愈多,我们需要建立这样的数据结构来使整个项目看起来没有那么臃肿 package model - 负责数据建模 vm - View Model,定义各种…

【MySQL】增删改查操作(基础)

文章目录 1、新增操作(Create)1.1单行数据全列插入1.2多行数据指定列插入 2、查询操作(Retrieve)2.1全列查询2.2指定列查询2.3指定列查询2.4别名(as)2.5去重(distinct)2.6排序&#…

机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战,以及XGBClassifier分类器的调优策略

大家好,我是微学AI,今天给大家介绍一下机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战,以及XGBClassifier分类器的调优策略。XGBClassifier是基于eXtreme Gradient Boosting (XGBoost)算法的分类器模型,在机器学习领…

[Semi-笔记]Switching Temporary Teachers for Semi-Supervised Semantic Segmentation

目录 概要创新一:Dual Temporary Teacher挑战:解决: 创新二:Implicit Consistency Learning(隐式一致性学习)挑战:解决: 实验结果小结论文地址代码地址 分享一篇2023年NeurIPS的文章…

python 利用xpath 爬取一周天气

需求: 爬取 中国天气网指定城市一周的天气,以天津为例 实现: 1,先找到一周的数据位置。 divs html.xpath("//div[classhanml]") 2,再遍历每天。 trs div.xpath("./div/div[2]/table//tr[position…

PC发送指令给单片机控制LED(与上一篇文章相反)

此时要重新配置寄存器 ,实现电脑往单片机传输数据 1、配置SCON寄存器的REN 即 REN 1 2、有TI(发送中断)就有RI(接收中断) 3、优化 发现发送 o 时,D5亮灯会有延迟 下面就是做到真正的无延迟的全双工通信 …

day11 基础函数(二)

知识回顾 ```python # 函数:封装具有某种功能的代码块 函数的定义 def 函数名(): 代码 函数名() # 函数调用 实参:相当于变量值(演员) 形参:相当于变量名(角色) 必须参数(位置参数) 就是必须按照正确的顺序将实参传入到函数中,实参和形参个数必须一一对应 默认参数 de…

深入理解计算机系统 家庭作业 2.85

A 7111.01.11*V E2,M1.11,f0.11 位表示: exp:10000...001其中0有k-2个.frac:1100...000其中0有n-2个 B 有个默认条件就是E>n, En,M1.111...(小数部分n个1),f0.1111(n个1),V exp:111...11其中1有n-1个.frac:111...111其中1有n个 C有个默认条件就是没有符号位.最小的规格…

JS详解-设计模式

工厂模式: 单例模式: // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在,创建实例this.#instance new Single…

Android 关于apk反编译d2j-dex2jar classes.dex失败的几种方法

目录 确认路径正确直接定位到指定目录确定目录正确,按如下路径修改下面是未找到相关文件正确操作 确认路径正确 ,即d2j-dex2jar和classes.dex是否都在一个文件夹里(大部分的情况都是路径不正确) 直接定位到指定目录 路径正确的…

第12届蓝桥杯省赛 ---- C/C++ C组

文章目录 1. ASC2. 空间3. 卡片4. 相乘5. 路径6.时间显示7.最少砝码8. 杨辉三角形9. 左孩子右兄弟 第12届蓝桥杯省赛&#xff0c;C/C C组真题&#xff0c;第10题不是很清楚&#xff0c;题解不敢乱放&#x1f601;&#x1f601;&#x1f601; 1. ASC 额。。。。 #include <i…

Java NIO Selector选择器源码分析

文章目录 前言Selector类结构Selector抽象类AbstractSelectorSelectorImplWindowsSelectorImpl三种SelectionKey集合 前言 Java NIO&#xff08;New I/O&#xff09;的Selector选择器是一个用于多路复用&#xff08;Multiplexing&#xff09;的I/O操作的关键组件。它允许一个单…

【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(九)

2021年全国职业院校技能大赛 网络系统管理&#xff08;样题9&#xff09;模块B&#xff1a;Windows环境 全国职业院校技能大赛执委会.技术专家组 2021年03月 竞赛简介 请认真阅读以下指引&#xff01; 比赛共4个小时&#xff0c;你必须自行决定如何分配你的时间。 当比赛结…

java-权限修饰符、代码块

一、权限修饰符概念 权限修饰符是用来控制一个成员被访问的范围&#xff0c;可以用来修饰成员变量、方法、构造方法、内部类 二、权限修饰符的分类 举例&#xff1a; 1、private 2、空着不写 3、protected 4、public 三、权限修饰符的使用规则 实际开发中&#xff0c;一般使…

Vue2和3中的插槽区别及其简单案例

vue中的插槽是什么&#xff0c;官方解释是: Vue 实现了一套内容分发的 API&#xff0c;这套 API 的设计灵感源自 Web Components 规范草案&#xff0c;将 <slot> 元素作为承载分发内容的出口… vue2插槽和vue3插槽基本概念是一致的&#xff0c;也是匿名插槽、具名插槽、…