硬中断,软中断恢复位置
汇编初始化栈指针,interrupt,svc
preserve8 ;preserve8 和 restore8 通常用于保护寄存器的状态;以确保在函数调用前后某些寄存器的值保持不变area reset,code,readonlycode32entryb startldr pc,=do_undefined;这些地址不能随便写,0x0,0x4,0x8....这些地址代表异常向量表;代码不能随便写在这个地址处,发生异常时系统会自动到这个地址,会执行这个函数ldr pc,=do_sw_intldr pc,=do_pre_abortldr pc,=do_dat_abortnop;空指令ldr pc,=do_irqldr pc,=do_fiqdo_undefinedb do_undefined
do_sw_intimport swi_int_handlerstmfd sp!,{r0-r12,lr} ;不仅把swi的lr入栈是把所有模式的lr都入栈 ,把user的lr也入栈相当于lr指向执行67行bl sw_int_handlerldmfd sp!,{r0-r12,pc}^ ;恢复的时候把所有模式出栈,只不过此时把user的lr给pc
do_pre_abortb do_pre_abort
do_dat_abortb do_dat_abort
do_irqimport irq_handlersub lr,lr,#4stmfd sp!,{r0-r12,lr}bl irq_handlerldmfd sp!,{r0-r12,pc}^
do_fiqb do_fiq;bx lr ;跳到寄存器中的地址start ldr sp,=0x40001000 ;立即数之外的数也可以用mrs r0,cpsr ;m域interupt模式设置bic r0,r0,#0x1forr r0,r0,#0x12bic r0,r0,#(1<<7)msr cpsr_c,r0ldr r0,=0x40001000 ;设置栈指针sub r0,r0,#1024mov sp,r0mrs r0,cpsr ;m域user模式设置bic r0,r0,#0x1forr r0,r0,#0x10msr cpsr_c,r0ldr r0,=0x40001000sub r0,r0,#2048mov sp,r0import mainb mainasm_fnexport asm_fnswi #7bx lr;stmfd sp!,{r0-r12,lr} ;storage many full d; bl addfun ;跳到标签地址,并把当前pc值给lr;mov r0,#1;mov r1,#2;mov r2,#3;bl max;ldmfd sp!,{r0-r12,lr}
finishedb finishedend
#include<stdio.h>
extern max(int a,int b,int c);
extern void undefined_handler(void);
extern void swi_int_handler(void);
extern void pre_abort_handler(void);
extern void dat_abort__handler(void);
extern void irq_handler(void);
extern void fiq_handler(void);
extern void asm_fn(void);max(int a,int b,int c)
{int d=a>b?a:b;int e=c>e?c:e;return e;
}void undefined_handler(void)
{
}
void swi_int_handler(void)
{
}
void pre_abort_handler(void)
{
}
void dat_abort_handler(void)
{
}
void irq_handler(void)
{
}
void fiq_handler(void)
{
}
int main(void)
{asm_fn();//从这边调汇编的函数自动把pc放到lr里面while(1);}
mvn,不是立即数按位取反装
ldr是伪指令,实际由好几个指令组合在一起加等号可以直接装入寄存器
mov移入代码内部提高代码密度,ldr实际上是把数据放到代码区里面,占4个字节
软中断 vs. 硬件中断1. 触发机制:•软中断:通过 swi 指令触发。•硬件中断:通过外部事件触发。2. 返回机制:•软中断:通常通过修改 PC 来返回到调用点。•硬件中断:通过 bx lr 指令返回到中断前的位置。3. 上下文保存和恢复:•软中断:通常不需要显式保存和恢复寄存器状态。•硬件中断:需要显式保存和恢复寄存器状态。恢复位置的区别1. 软中断:•在软中断中,返回地址通常保存在 LR 中,但操作系统会直接修改 PC 来返回到调用点,因此不需要调整 LR。•相当于直接返回到下一条指令。2. 硬件中断:•在硬件中断中,返回地址也被保存在 LR 中,但为了返回到中断发生前的指令位置,通常需要将 LR 减去 4(因为 LR 中保存的是中断发生后的下一条指令地址)。•相当于返回到中断发生时的指令位置。总结•软中断(SWI):•通常用于调用系统调用。•通过修改 PC 来返回到调用点,相当于直接返回到下一条指令。•硬件中断:•用于处理外部事件。•通过 bx lr 指令返回到中断前的位置,通常需要调整 LR 来确保返回到中断发生时的指令位置
在中断处理期间,lr(链接寄存器,Link Register,通常是 r14)中保存的是中断发生后的下一条指令的地址。这一地址在整个中断处理期间保持不变,直到中断处理程序结束并返回到中断发生前的位置。详细解释1. 中断发生时:•当中断发生时,处理器会保存当前程序计数器(PC)的值到 lr 中。•当前 PC 的值实际上是中断发生后下一条指令的地址。2. 中断处理程序:•在进入中断处理程序时,通常会保存当前寄存器的状态(包括 lr)到堆栈中,以防止中断处理程序覆盖这些寄存器的值。•在处理完中断后,再从堆栈中恢复寄存器的状态,并通过 lr 中保存的地址返回到中断发生前的位置。
在ARM架构中,lr(链接寄存器)通常用于保存返回地址。当发生中断或异常时,处理器会自动保存当前 PC 的值到 lr 中,以便在处理完中断或异常后能够返回到中断或异常发生前的位置。具体来说:•中断发生时:lr 中保存的是中断发生后的下一条指令的地址。•中断处理期间:lr 中保存的地址不会改变,始终是中断发生后的下一条指令的地址。•中断处理程序结束时:通过 ldmfd sp!,{r0-r12,pc}^ 指令恢复寄存器状态,并将 pc 设置为 lr 中保存的地址,从而返回到中断发生前的位置。
中断模式和User模式的切换1. 中断发生时:•当中断发生时,处理器会自动进入中断模式(如IRQ模式),并将当前的CPSR保存到SPSR中。•这时,lr 中保存的是中断发生后的下一条指令的地址。2. 中断处理期间:•在中断处理期间,lr 中保存的地址不会改变,始终是中断发生后的下一条指令的地址。•处理器处于中断模式(如IRQ模式)。3. 中断处理结束时:•在中断处理结束后,通过恢复寄存器状态并返回到中断发生前的位置,处理器会恢复到原来的模式(如User模式)。
模式切换1. 进入中断模式:•当中断发生时,处理器会自动进入中断模式(如IRQ模式),并将当前的CPSR保存到SPSR中。•这时,CPSR中的模式位会被设置为中断模式。2. 恢复到原来的模式:•在中断处理结束后,通过恢复寄存器状态并返回到中断发生前的位置,处理器会恢复到原来的模式(如User模式)。•这是通过恢复SPSR中的状态来实现的。
在ARM架构中,当发生中断或异常时,处理器会自动保存当前的程序状态寄存器(CPSR)到备份程序状态寄存器(SPSR)中。具体来说,SPSR中保存的信息取决于处理器当前的模式。SPSR 的作用SPSR(Saved Program Status Register)用于在进入中断或异常处理时保存当前的CPSR状态。当退出中断或异常处理时,可以通过恢复SPSR中的状态来回到原来的工作模式。SPSR 在不同模式下的别名在ARM架构的不同模式下,SPSR有不同的别名:•用户模式(User Mode):无SPSR,因为用户模式下不发生模式切换。•管理模式(Supervisor Mode):SPSR_SVC•中止模式(Abort Mode):SPSR_ABT•未定义模式(Undefined Mode):SPSR_UND•IRQ模式(IRQ Mode):SPSR_IRQ•FIQ模式(FIQ Mode):SPSR_FIQ中断处理过程中的模式切换1. 进入中断模式:•当中断发生时,处理器会自动进入中断模式(如IRQ模式),并将当前的CPSR保存到对应的SPSR中(如SPSR_IRQ)。•这时,CPSR中的模式位会被设置为中断模式。2. 中断处理期间:•在中断处理期间,处理器处于中断模式(如IRQ模式)。3. 恢复到原来的模式:•在中断处理结束后,通过恢复SPSR中的状态来恢复到原来的模式(如User模式)
SPSR 在 IRQ 模式下的状态当进入IRQ模式时,SPSR中保存的是IRQ发生前的CPSR状态。具体来说:•模式位:指示当前的工作模式(通常是User模式)。•中断禁止位:指示是否禁止IRQ和FIQ中断。•条件码:指示当前运算的条件码(如进位标志、零标志等)
相关文章:
硬中断,软中断恢复位置
汇编初始化栈指针,interrupt,svc preserve8 ;preserve8 和 restore8 通常用于保护寄存器的状态;以确保在函数调用前后某些寄存器的值保持不变area reset,code,readonlycode32entryb startldr pc,do_undefined;这些地址不能随便写,0x0,0x4,0x8....这些…...

MySQL基础(13)- MySQL数据类型
目录 一、数据类型概述 1.MySQL中的数据类型 二、整型 1.数据类型可选属性 2.使用建议 三、浮点数、定点数、位类型 1.类型介绍 2.浮点类型 3.定点数类型 4.位类型 四、日期时间类型 1.YEAR 2.DATE 3.TIME 4.DATETIME 5.TIMESTAMP 6.TIMESTAMP和DATETIME的区别…...

数据结构------二叉树简单介绍及实现
如果不是满二叉树或者完全二叉树,就要用链式存储 //搜索二叉树:左子树的所有值比根小,右子树的所有值比根大 // 实现查找,最多找高度次(类似二分法) //二分查找存在的问题:…...

由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(六)
概述 在 WWDC 24 中,苹果推出了数据库框架 SwiftData 2.0 版本。听说里面新增了能让数据记录“借尸还魂”的绝妙法器,到底是真是假呢? 我们在上篇博文中介绍了 History Trace 是如何稳妥的处理数据删除操作的。而在这里,我们将继续介绍 SwiftData 2.0 中另一个新特性:“墓…...

尚品汇-秒杀下单实现-页面轮询查询订单状态(五十三)
目录: (1)整合秒杀业务 (2)秒杀下单 (3)秒杀下单监听 (4)页面轮询接口 (1)整合秒杀业务 秒杀的主要目的就是获取一个下单资格,拥…...

2024年微电子与纳米技术国际研讨会(ICMN 2024) Microelectronics and Nanotechnology
文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网:https://ais.cn/u/vEbMBz提交检索:EI Compendex、IEEE Xplore、Scopus大会时间:2024年9月20-22日地点:成都…...

2024最新版,人大赵鑫老师《大语言模型》新书pdf分享
本书主要面向希望系统学习大语言模型技术的读者,将重点突出核心概念与 算法,并且配以示例与代码(伪代码)帮助读者理解特定算法的实现逻辑。由于大语言模型技术的快速更迭,本书无法覆盖所有相关内容,旨在梳理…...

[Leetcode 543][Easy]-二叉树的直径-递归
目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 取一个结点的最大直径就是取一个结点的左子树最大深度右子树最大深度之和,因此可以定义一个递归函数,作用是取一个结点的最大直径。这个函数中还实现了求左子树最大深度…...

高级大数据开发学习路线指南
掌握大数据技术是一项系统性工程,涉及到广泛的技能和专业知识。为了帮助初学者构建坚实的基础,并逐步成长为大数据领域的专家,下面详细阐述了一条全面而深入的学习路线: 1. Java 编程基础 - 打造坚实的底层技能 关键知识点&…...

SpringBoot设置mysql的ssl连接
因工作需要,mysql连接需要开启ssl认证,本文主要讲述客户端如何配置ssl连接。 开发环境信息: SpringBoot: 2.0.5.RELEASE mysql-connector-java: 8.0.18 mysql version:8.0.18 一、检查服务端是否开启ssl认…...

2024-1.2.12-Android-Studio配置
本地博客: https://k1t0111.github.io/ K1T0 最近在做一些app方向的移动技术开发学习,但是由于AS的配置问题,市面上找不到最新的2024版本的AS的相关配置。笔者也是踩了很多坑,因此想写一篇文章记录一下最新的AS 2024 1.2.12的对应java环境的一…...
前端vue左侧树的一整套功能实现(一):vue2+vite封装v-resize指令,实现左侧树拖拽宽度和折叠展开
实现v-resize指令,具体以下功能: 指令接收宽度最大最小值,接收一个id用于localStorage存储拖拽宽度,接收padding拖拽时产生虚线拖拽,松开鼠标再进行元素宽度调整折叠展开图标使用本地图片 封装一个vite下使用本地图片…...

本地部署huggingface模型,建立自己的翻译应用
过去,我们使用翻译接口时,往往都是使用百度等的接口,每天有一定量的免费额度。今天为大家介绍一个可以进行翻译的模型,具备英译中、中译英的能力。并且在这个过程中,向大家介绍一个如何在本地部署模型。在之前的”五天…...

基于python+django+vue的在线学习资源推送系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…...

.Net Gacutil工具(全局程序集缓存工具)使用教程
GAC介绍: GAC(Global Assembly Cache)全局程序集缓存,是用于存放.Net应用程序共享的程序集。 像平常我们在Visual Studio中引用系统程序集时,这些程序集便来自于GAC。 GAC默认位置为:%windir%\Microsoft…...

安卓13修改设置设备型号和设备名称分析与更改-android13设置设备型号和设备名称更改
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 用户要定制一些系统显示的设备型号和设备名称,这就需要我们分析设置里面的相关信息来找到对应的位置进行修改了。 2.问题分析 像这种信息要么是config.xml里面写死了,要…...

AI健身体能测试之基于paddlehub实现引体向上计数个数统计
【引体向上计数】 本项目使用PaddleHub中的骨骼检测模型human_pose_estimation_resnet50_mpii,进行人体运动分析,实现对引体向上的自动计数。 1. 项目介绍 人体运动分析是近几年许多领域研究的热点问题。在学科的交叉研究上,人体运动分析涉…...
Redis常见报错及解决方法总结
Redis常见报错及解决方法总结 Redis作为高效的内存数据库,在实际使用过程中不可避免会遇到一些问题和报错。为了帮助大家更好地应对这些问题,我将常见的Redis报错及其解决方法进行总结,并提供具体的操作步骤。 1. Connection Refused 错误…...

【TabBar嵌套Navigation案例-JSON的简单使用 Objective-C语言】
一、JSON的简单使用 1.我们先来看一下示例程序里边,产品推荐页面, 在我们这个产品推荐页面里面, 它是一个CollectionViewController,注册的是一个xib的一个类型,xib显示这个cell,叫做item,然后,这个邮箱大师啊,包括这个图标,以及这些东西,都是从哪儿来的呢,都是从…...
通过鼠标移动来调整两个盒子的宽度(响应式)
DOM结构: <div class"courer"> // 外层盒子<div class"dividing-line" title"拖动"></div> // 拖动的那个线<div class"course-title-box"> // 第一个盒子<div class"course-content-…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...