硬件-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.rhkb.cn/news/298893.html

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

相关文章

rust项目组织结构和集成测试举例

概述 在学习rust的过程中,当项目结构略微复杂的时候,写集成测试的时候发现总是不能引用项目中的代码,导致编写测试用例失败。查阅了教程,一般举例都很简单。查阅了谷歌和百度以及ai,也没有找到满意的答案。这里记录一…

论文笔记:Large Language Models as Analogical Reasoners

iclr 2024 reviewer打分5558 1 intro 基于CoT prompt的大模型能够更好地解决复杂推理问题 然而传统CoT需要提供相关的例子作为指导,这就增加了人工标注的成本——>Zero-shot CoT避免了人工标注来引导推理 但是对于一些复杂的任务难以完成推理,例如c…

Prometheus+grafana环境搭建redis(docker+二进制两种方式安装)(四)

由于所有组件写一篇幅过长,所以每个组件分一篇方便查看,前三篇 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环境搭建m…

Android APP加固利器:深入了解混淆算法与混淆配置

Android APP 加固是优化 APK 安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下 Android APP 加固的具体实现方式。 混淆代码 使用 ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解&#xff…

基于单片机多功能充电器系统设计

**单片机设计介绍,基于单片机多功能充电器系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机多功能充电器系统设计是一个集电源管理、充电控制和用户界面于一体的综合性项目。以下是对该系统设计的概…

Pnpm + Turbo 搭建 Web Component Monorepo 组件库

技术选型 使用 Pnpm Turbo 搭建 Web Component Monorepo项目 stencil-component-ui 组件库 pnpm 作为包管理器Turborepo 作为构建系统Vitepress 管理文档 pnpm 技术 什么是 pnpm? 它有哪些优势? pnpm 跟 npm、yarn一样,都是用于管理Node包依赖的管…

比nestjs更优雅的ts控制反转策略-依赖查找

一、Cabloy5.0内测预告 Cabloy5.0采用TS对整个全栈框架进行了脱胎换骨般的大重构,并且提供了更加优雅的ts控制反转策略,让我们的业务开发更加快捷顺畅 1. 新旧技术栈对比: 后端前端旧版js、egg2.0、mysqljs、vue2、framework7新版ts、egg3…

JVM基础

初识JAM JVM就是JAVA虚拟机,本质上是一个运行在计算机上的程序,他的职责是运行JAVA字节码文件. 下面是java代码执行过程 JVM的功能 1.解释和运行 对字节码文件中的指令实时的解释成机器码 2.内存管理 自动为对象,方法等分配内存自动的垃圾回…

java中大型医院HIS系统源码 Angular+Nginx+SpringBoot云HIS运维平台源码

java中大型医院HIS系统源码 AngularNginxSpringBoot云HIS运维平台源码 云HIS系统是一款满足基层医院各类业务需要的健康云产品。该产品能帮助基层医院完成日常各类业务,提供病患预约挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生工作站和护士工…

MySQL-排序与分页

1. 排序 如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。 SELECT * FROM employees;1.1 基本使用 1)使用 ORDER BY 对查询到的数据进行排序操作。 升序:ASC(ascend)降序:DESC (descend) 练习&am…

使用 LLMLingua-2 压缩 GPT-4 和 Claude 提示

原文地址:Compress GPT-4 and Claude prompts with LLMLingua-2 2024 年 4 月 1 日 向大型语言模型(LLM)发送的提示长度越短,推理速度就会越快,成本也会越低。因此,提示压缩已经成为LLM研究的热门领域。 …

JVM基础:类的生命周期详解

JDK版本:jdk8 IDEA版本:IntelliJ IDEA 2022.1.3 文章目录 一. 生命周期概述二. 加载阶段(Loading)2.1 加载步骤2.2 查看内存中的对象 三. 连接阶段(Linking)3.1 连接之验证3.2 连接之准备3.3 连接阶段之解析 四. 初始化阶段(Initialization)4.1 单个类的…

ChatGPT(3.5版本)开放无需注册:算力背后的数据之战悄然打响

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Logback日志框架(超详细)

logback-classic-1.2.3.jarhttp://链接: https://pan.baidu.com/s/1cA3gVB_6DEA-cSFJN6MDGw 提取码: sn8i 复制这段内容后打开百度网盘手机App,操作更方便哦 logback-core-1.2.3.jarhttp://链接: https://pan.baidu.com/s/19eCsvsO72a9PTqpXvXxrgg 提取码: 5yp…

元宇宙虚拟空间的场景构造(二)

前言 该文章主要讲元宇宙虚拟空间的场景构造,基本核心技术点,不多说,直接引入正题。 场景的构造 使用引入的天空模块 this.sky new Sky(this); 在Sky模块里,有设置对其中的阳光进行不同时间段的光线处理。而天空又是怎么样的…

微软云学习环境

微软公有云 - Microsoft Azure 本文介绍通过微软学习中心Microsoft Learn来免费试用Azure上的服务,也不需要绑定信用卡。不过每天只有几个小时的时间。 官网 https://docs.microsoft.com/zh-cn/learn/ 实践 比如创建虚拟机,看到自己的账号下多了Learn的…

非关系型数据库-----------探索 Redis高可用 、持久化、性能管理

目录 一、Redis 高可用 1.1什么是高可用 1.2Redis的高可用技术 二、 Redis 持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三、Redis 持久化之----------RDB 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.2执行流程 3.3启动时加载…

机器学习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…

下载页面上的视频

引言:有些页面上的视频可以直接右键另存为或者F12检索元素找到视频地址打开后保存,但有些视频页面是转码后的视频,不能直接另存为视频格式,可以参考下本方法 以该页面视频为例:加载中...点击查看详情https://wx.vzan.c…

【Node.js从基础到高级运用】二十一、使用child_process模块创建子进程

引言 在Node.js中,child_process模块是一个提供了创建和管理子进程的能力的核心模块。通过使用child_process模块,Node.js可以执行系统命令、运行其他脚本或应用程序,实现与Node.js进程的并行处理。 child_process模块提供了几种创建子进程的…