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)- 工作模式与工作状态相关推荐

  1. raid0 raid1 raid5 三种工作模式的工作原理及特点

    简述raid0 raid1 raid5 三种工作模式的工作原理及特点 RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据还有一个大功能,多块盘放在一起可以有冗余(备份).RAID整合 ...

  2. LVS负载均衡(3)——LVS工作模式与工作原理

    LVS介绍及工作原理 1. LVS 介绍 LVS,Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统,可以在 UNIX/Linux 平台下实现负 ...

  3. LVS 工作模式以及工作原理

     原文地址:http://blog.csdn.net/caoshuming_500/article/details/8291940 LVS 简介 LVS 是 Linux  Virtual Serv ...

  4. raid0 raid1 raid5 raid10工作模式的工作原理及特点

    RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据 还有一个大功能,多块盘放在一起可以有冗余(备份) RAID整合方式有很多,常用的:0 1 5 10 RAID 0,可以是一块盘和N ...

  5. [ARM] ARM处理器的7种工作模式和2种工作状态

    转载:https://blog.csdn.net/ly930156123/article/details/79219303 两种工作状态 1.ARM状态:32位,ARM状态执行字对齐的32位ARM指令 ...

  6. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 :  -- 三星 ARM Archit ...

  7. 【嵌入式开发】ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存器 CPSR SPSR | 模式设置代码编写 | 设置 svc 模式 )

    一. 处理器工作模式相关介绍 1. 处理器模式简介 (1) 处理器工作模式分类 (2) 处理器不同工作模式区别 (3) Linux 系统运行的模式 (4) 特权模式 说明 (5) 异常模式 (6) 系 ...

  8. Zabbix探针工作模式解析

    本文转载于:http://ghoulich.xninja.org/2016/07/11/analysis-of-zabbix-agent-work-mode/ ZABBIX Zabbix探针工作模式解 ...

  9. NVIDIA Jetson AGX Xavier设置风扇转速、工作模式及性能监控

    目录 前言 设置风扇转速 切换工作模式 状态监控 安装 使用 前言 通过前两篇文章,我们搭建好了Xavier的开发环境,接下来介绍Xavier如何设置风扇转速.切换工作模式以及使用状态监控软件. 设置 ...

最新文章

  1. mysql悲观锁和乐观锁
  2. Drools学习 入门实例
  3. 浅析SQL Server 2005中的主动式通知机制
  4. 本地打开extjs api docs 的方法
  5. mysql外键读锁_MySQL的锁
  6. nginx 配置图片服务器 文件大小,nginx 配置图片服务器 文件大小
  7. 问题十二:怎么用ray tracing画第一张图
  8. Dubbo 的设计思想,真优秀!
  9. 设计模式入门,工厂模式,c++代码实现
  10. Linux 配置rdate时间服务器方法
  11. Mysql 正序 空值在后
  12. 禁忌搜索算法c语言代码,禁忌搜索算法CC++源代码.doc
  13. haneWIN Software NFS工具的使用
  14. fspecial 创建预定义的二维滤波器 (Matlab)
  15. 计算机标准红色,标准红色cmyk值
  16. 基于Mongodb的轻量级领域驱动框架(序)
  17. django models 数据库 update_or_create 更新或者插入
  18. Kafka eagel 网页能打开,但是登录不上
  19. LabVIEW之TDMS学习笔记
  20. 【PMP考前冲刺题-第一小节(2022.7)】

热门文章

  1. cdoj 1342 郭大侠与甲铁城 树状数组+离线
  2. 数学概率游戏之:三国杀,吕布vs赵云谁会胜?
  3. dell服务器开机蓝屏无限重启,戴尔笔记本电脑一开机就蓝屏,然后就一直重启,怎么处理...
  4. 5. springboot-----项目实战-帐单管理系统(Thymeleaf)
  5. java邮件模板_java创建邮件模板
  6. ERP中自定义报表制作流程
  7. 广泛使用的Residual Block
  8. 秀场衰落之后,谁来主导直播的下半场?
  9. Waves效果器离线安装包-Waves v9.6 Offline Install WiN-MAC
  10. 帝国理工学院计算机博士,帝国理工大学博士:从0到1,一位博士生的蜕变之路...