ARM体系结构(1)- 工作模式与工作状态
1. ARM的工作模式
用户模式(usr):属于正常的用户模式,ARM处理器正常的程序执行状态。
快速中断模式(fiq):用于处理快速中断,对高速数据传输或通道处理。
外部中断模式(irq):对一般情况下的中断进行处理。
管理模式(svc):属于操作系统使用的保护模式,处理软件中断swi reset。
数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于处理存储器故障、实现虚拟存储器和存储器保护。
系统模式(sys):运行具有特权的操作系统任务。
未定义指令中止模式(und):处理未定义的指令陷阱,当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
模式的改变可由软件控制,或者由外部中断或进入异常引起。大部分应用程序都将在用户模式执行。 被称为特权模式的非用户模式,都将进入到中断服务或异常中去,或者访问受保护的资源
用户模式和特权模式
除了用户模式之外的其他6种处理器模式称为特权模式
特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。
特权模式中,除系统模式外,其他5种模式又称为异常模式。
大多数的用户程序运行在用户模式下,此时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。
用户模式下,当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。
缺页异常、中断和系统调用同属arm异常处理
1.1 异常跳转过程
异常向量表
所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作) 异常向量表是硬件向软件提供的处理异常的支持。
异常产生时
做好保护现场的工作:
(1)把cpsr保存到spsr中,设置适当的cpsr(改变处理器的ARM状态、改变处理器进入相应的异常模式、(视情况)改变中断禁止位禁止相应中断)
(2)保存返回地址到lr
(3)设置pc为相应的异常向量实现跳转。
异常返回时
做好恢复现场工作:
(1)从spsr恢复cpsr
(2)从lr恢复pc
注意:这些操作必须在ARM状态执行
因为:当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。
TIPS:
(1)异常向量表中除了FIQ中断都是4个字节,所以只够存放一段异常处理程序的代码的首地址
(2)FIQ中断为快速中断,其中一个特殊的地方就体现在他的异常向量表(Vector Table)地址在最后一个,所以它可以存放不止4个字节,这样的话FIQ中断可以不用只存放地址,而是把整个异常处理程序放进去,这样就少跳转了一次,加快了中断相应速度。
ARM模式与thumb工作状态下各工作模式的寄存器访问地址
对应关系
1.2 为什么需要不同的工作模式
不同的工作模式来响应不同的异常,起到管理异常的作用。同时配合操作系统,比如说linux内核可以在不同的模式下,而用户程序不可以,起到权限管理、保护的作用,能够保证系统的正确运行。
2. ARM的工作状态
在ARM的体系结构中,可以工作在三种不同的状态,一是ARM状态,二是Thumb状态及Thumb-2状态,三是调试状态。
ARM状态和Thumb状态可以直接通过某些指令直接切换,都是在运行程序,只不过指令长度不一样而已
2.1 ARM状态
arm处理器工作于32位指令的状态,所有指令均为32位
2.2 thumb状态
arm执行16位指令的状态,即16位状态
2.3 thumb-2状态
这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升,优化。
2.4 调试状态
处理器停机时进入调试状态,使用jtag调试的时候使用。
2.5 arm与thumb间的切换
1,由arm状态切换到thumb
状态将寄存器的最低位设置为1
BX指令:R0[0]=1,则执行BXR0指令将进入thumb状态
2,由thumb状态切换到ARM状态
寄存器最低位设置为0
BX指令:R0[0]=0,则执行BX
R0指令将进入arm状态
3,ARM处理器复位后开始执行代码时总是只处于ARM状态
Cortex-M3只有Thumb-2状态和调试状态;由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。
2.6 为什么需要thumb状态
与ARM指令集相比较,Thumb指令集中的数据处理指令的操作数仍然是32位,指令地址也为32位,但Thumb指令集为实现16位的指令长度,舍弃了ARM指令集的一些特性,如大多数的Thumb指令是无条件执行的,而几乎所有的ARM指令都是有条件执行的;大多数的Thumb数据处理指令的目的寄存器与其中一个源寄存器相同。
由于Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能,所以,要实现特定的程序功能,所需的Thumb指令的条数较ARM指令多。在一般的情况下,Thumb指令与ARM指令的时间效率和空间效率关系为:
— Thumb代码所需的存储空间约为ARM代码的60%~70%
— Thumb代码使用的指令数比ARM代码多约30%~40%
— 若使用32位的存储器,ARM代码比Thumb代码快约40%
— 若使用16位的存储器,Thumb代码比ARM代码快约40%~50%
— 与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30%
显然,ARM指令集和Thumb指令集各有其优点,若对系统的性能有较高要求,应使用32位的存储系统和ARM指令集,若对系统的成本及功耗有较高要求,则应使用16位的存储系统和Thumb指令集。当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。
ARM体系结构(1)- 工作模式与工作状态相关推荐
- raid0 raid1 raid5 三种工作模式的工作原理及特点
简述raid0 raid1 raid5 三种工作模式的工作原理及特点 RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据还有一个大功能,多块盘放在一起可以有冗余(备份).RAID整合 ...
- LVS负载均衡(3)——LVS工作模式与工作原理
LVS介绍及工作原理 1. LVS 介绍 LVS,Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统,可以在 UNIX/Linux 平台下实现负 ...
- LVS 工作模式以及工作原理
原文地址:http://blog.csdn.net/caoshuming_500/article/details/8291940 LVS 简介 LVS 是 Linux Virtual Serv ...
- raid0 raid1 raid5 raid10工作模式的工作原理及特点
RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据 还有一个大功能,多块盘放在一起可以有冗余(备份) RAID整合方式有很多,常用的:0 1 5 10 RAID 0,可以是一块盘和N ...
- [ARM] ARM处理器的7种工作模式和2种工作状态
转载:https://blog.csdn.net/ly930156123/article/details/79219303 两种工作状态 1.ARM状态:32位,ARM状态执行字对齐的32位ARM指令 ...
- 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 : -- 三星 ARM Archit ...
- 【嵌入式开发】ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存器 CPSR SPSR | 模式设置代码编写 | 设置 svc 模式 )
一. 处理器工作模式相关介绍 1. 处理器模式简介 (1) 处理器工作模式分类 (2) 处理器不同工作模式区别 (3) Linux 系统运行的模式 (4) 特权模式 说明 (5) 异常模式 (6) 系 ...
- Zabbix探针工作模式解析
本文转载于:http://ghoulich.xninja.org/2016/07/11/analysis-of-zabbix-agent-work-mode/ ZABBIX Zabbix探针工作模式解 ...
- NVIDIA Jetson AGX Xavier设置风扇转速、工作模式及性能监控
目录 前言 设置风扇转速 切换工作模式 状态监控 安装 使用 前言 通过前两篇文章,我们搭建好了Xavier的开发环境,接下来介绍Xavier如何设置风扇转速.切换工作模式以及使用状态监控软件. 设置 ...
最新文章
- mysql悲观锁和乐观锁
- Drools学习 入门实例
- 浅析SQL Server 2005中的主动式通知机制
- 本地打开extjs api docs 的方法
- mysql外键读锁_MySQL的锁
- nginx 配置图片服务器 文件大小,nginx 配置图片服务器 文件大小
- 问题十二:怎么用ray tracing画第一张图
- Dubbo 的设计思想,真优秀!
- 设计模式入门,工厂模式,c++代码实现
- Linux 配置rdate时间服务器方法
- Mysql 正序 空值在后
- 禁忌搜索算法c语言代码,禁忌搜索算法CC++源代码.doc
- haneWIN Software NFS工具的使用
- fspecial 创建预定义的二维滤波器 (Matlab)
- 计算机标准红色,标准红色cmyk值
- 基于Mongodb的轻量级领域驱动框架(序)
- django models 数据库 update_or_create 更新或者插入
- Kafka eagel 网页能打开,但是登录不上
- LabVIEW之TDMS学习笔记
- 【PMP考前冲刺题-第一小节(2022.7)】
热门文章
- cdoj 1342 郭大侠与甲铁城 树状数组+离线
- 数学概率游戏之:三国杀,吕布vs赵云谁会胜?
- dell服务器开机蓝屏无限重启,戴尔笔记本电脑一开机就蓝屏,然后就一直重启,怎么处理...
- 5. springboot-----项目实战-帐单管理系统(Thymeleaf)
- java邮件模板_java创建邮件模板
- ERP中自定义报表制作流程
- 广泛使用的Residual Block
- 秀场衰落之后,谁来主导直播的下半场?
- Waves效果器离线安装包-Waves v9.6 Offline Install WiN-MAC
- 帝国理工学院计算机博士,帝国理工大学博士:从0到1,一位博士生的蜕变之路...