ARM工作模式

ARM工作模式根据功能不同,可分为7类:

User Mode:用户模式。操作系统的Task一般以这种模式执行。User Mode是ARM唯一的非特权模式,这表示如果CPU处于这种模式下,很多指令将不能够执行,因此操作系统的资源得以保护。

• System Mode:这是V4及其以上版本所引入的特权模式。
• IRQ Mode:中断模式。中断(不包括软中断)处理函数在这种模式下执行。
• FIQ Mode:快速中断模式。除了多了几个寄存器外,其他同IRQ一样。
• Supervisor Mode:监视模式。软中断(SWI)处理函数在这种模式下执行。
• Abort Mode:所有同内存保护相关的异常均在这种模式下执行。
• Undefined Mode:处理无效指令的异常处理函数在这种模式下执行。

ARM工作模式也可分为3大类:

• 用户模式:User Mode
• 系统模式:System Mode
• 异常模式:所有其它5种模式

为什么可以把7类功能不同的模式分为3大类呢?

这是由于异常模式同用户模式和系统模式有一个不一样的地方,那就是,当CPU产生中断或异常而自动切换到相应异常模式后,CPU会根据产生中断或异常的原因执行相应得中断或异常向量。这些向量的位置是CPU事先定义好的,目前有两种选择:

(1) 处于内存低地址0x00000000~0x0000001c,这种情况被称之为Low vector

(2) 处于内存高低之0Xffff0000~0xffff001c,这种情况被称之为High vector。

一般的操作系统会在这些异常向量地址处放置一条跳转指令。至于到底是使用Low vector,还是使用High vector,由CPU自己决定,ARM规范不做任何限制。

程序可以通过读取CPSR的MODE域来判断CPU当前的执行模式。

如何看待ARM的各种模式?
要回答这个问题,我们要看不同模式下,有哪些东西不同。归纳来说,有如下两个方面的不同:

(1) 物理寄存器不同
(2) 权限不同

如果将User Mode作为参考模式,那么:

(1) System Mode:寄存器一样,仅仅是权限不同

(2) 其他Exception Mode:寄存器不一样,权限也不一样

从权限的角度看,System Mode和其他Exception Mode(FIQ,IRQ,Supervisor,Abort,Undefined)是一样的,他们之间的区别仅仅是寄存器方面有一些差别。

从寄存器角度看,我们可以将CPSR中的MODE域看作一个类似于片选的东西,当其值不一样,所选中的寄存器也不一样。

虽然指令中的寄存器是一样的,但是经过MODE域的片选后,实际就指向不同的物理寄存器了。

必须要特别注意,SYSTEM模式和USER模式除了权限不一样外,其他都一样,这样可以让操作系统自由访问16个寄存器(包括状态寄存器)。

那么,模式切换是如何进行的呢?

(1) 执行SWI或Reset指令。如果在User模式下执行SWI指令,CPU就进入Supervisor模式。当然,在其它模式下执行SWI指令,也会进入Supervisor模式,补过一般操作系统不会这么做。因为除了User模式是非特权模式下,其他模式都属于特权模式(这说明ARM只有两种执行态,不想Dummy的X86,定义了4种执行态)。执行SWI一般是为了访问系统资源,在特权模式下可以访问所有的系统资源。SWI指令一般用来用来为操作系统提供API接口。

(2) 有外部中断发生。如果发生了外部中断,CPU就会进入IRQ或FIQ模式,具体是哪种模式,得看外部的中断源是接到CPU的那个Pin。

(3) CPU执行过程中产生异常。最典型的异常是由于MMU保护所引起的内存访问异常,此时CPU会切换到Abort模式。如果是无效指令,则会进入Undefined模式。

从上面我们发现,有一种模式是CPU无法自动进入的,这种模式就是System模式。要进入System模式必须由程序员自己编写指令来实现。其实很简单,在任何特权模式下改变CPSR的MODE域为System模式所对应得数字即可。进入System模式一般是为了利用“System 模式”和“User 模式”下的寄存器是一样的。因此一般操作系统在通过SWI进入Supervisor模式后,做一些简单处理后,就进入System模式。

另外,在任何特权模式下,都可以通过修改CPSR的MODE域而进入其他模式。不过需要注意的是,由于修改的CPSR是该模式下的影子CPSR,因此并不是实际的CPSR,所以一般的做法是修改影子CPSR,然后执行一个MOVS指令来恢复执行到某个断点并切换到新模式。

存储器格式(字对齐)

Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字节到第七个字节放置第二个存储的字数据,一次排列。作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。

存储器格式:

1、大端格式:高字节在低地址,低字节在高地址;

2、小端格式:高字节在高地址,低字节在低地址;

用户喜欢...

工作在Sub-GHz频段的无线模块为传感器网络提供了一条更加简单的途径

为了提高我们生活的方式的效率,工业化世界变得更加自动化。除了财务影响之外,提高效率可以对环境产生积极影响,因为我们使用的自然资源更少,污染物也更少。 自动化以需要以数据形...


使用隔离反激式拓扑设计开关模式电源

由于所有的电子系统都需要某种功率,所以电源的特性和理解都很明确。尽管如此,由于移动设备到线路供电硬件等应用的尺寸更小,效率更高,可靠性更高以及功率完整性更​​高,电源设计...


IDT F2950 SP2T射频开关IC是一款大功率、单刀双掷 (SP2T) 射频开关,工作频率范围为100MHz至8GHz

。这些射频开关在超宽带宽范围内具有0.58dB的极低插入损耗,并且在整个工作范围内具有出色的线性度性能。F2950射频开关在2.5GHz下具有44dB的高隔离度,典型开关速度为170ns。这些射频开关支持...


讨论的是ARM体系的CPU的7种工作模式

ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。本文主要讨论的是ARM体系的CPU的7种工作模式。 一、存储器格式(字对齐) Arm体系结构将存储器看做是从零地址开始的字节的线性组合。...


创建最终的嵌入式软件工作台

及时高效地构建嵌入式系统要求软件开发人员在其工作台上有合适的工具来完成工作。虽然预算通常是有限的,但是每个嵌入式软件工程师都需要一些工具来大大减少构建,调试和验证设计所需...


802.11x模块,开发套件可以帮助简化物联网无线设计工作

物联网(IoT)产品的设计者正在使用基于Wi-Fi的无线连接,因为它被广泛部署并且被很好地理解。但是,任何类型的RF都很复杂,需要进行合规性测试。没有正确的专业知识,可能会减慢开发速...


不惧缺货潮与物联网挑战,Mouser小批量加线上模式发挥优势

纵观全球电子行业,由于主要推动力手机市场趋于饱和,整个电子行业的增长也有所放缓。不过,人工智能、新能源汽车、物联网的快速发展增加了对更高品质电子元件的需求。可以看到20...


统计模式识别的原理与方法

1 统计模式识别的原理与方法简介 1.1 模式识别 什么是模式和模式识别? 广义地说,存在于时间和空间中可观察的事物,如果可以区别它们是否相同或相似,都可以称之为模式;狭义地说,模...


高效率、低功率转换 IC 提高可穿戴设备性能 并改善生活工作条件

可穿戴设备不再仅是在炫酷的科幻电影中才能看到的东西 (感谢《007》、《少数派报告》、《至尊神探》这些电影!),使用可穿戴设备也不再只是梦想,可穿戴设备已经蔚然成风。最初,可穿...


功率因数校正宽工作电压范围的可控硅整流器模块

TDK 集团最近推出了新型爱普科斯 (EPCOS) TSM-LC-NC690 可控硅整流器模块。新的模块 工作电压范围进一步扩展,可用于...


开关电源变换器工作模式--平均电流、滞回电流模式

平均电流模式的工作原理及特点 图1为平均电流模式的控制系统图,K为检测电流放大器,CEA为电流误差放大器,VEA为电压误差放大器。输出电压通过分压电阻器接到电压误差放大器的反相端,...


最小负载电流工作 — 零负载工作

selina 在 周一, 11/20/2017 - 10:25 提交 作为一名应用工程师,我经常被问及有关稳压器空载工作的问题。大多数现代 LDO 和开关稳压器均能在空载的情况下稳定工作,那么,人们为什么还要再三询...


自动驾驶车将改变人类社会生活模式

变革式创新总是会重塑社会,然而很少有创新能像无人驾驶车这样将人们生活产生巨大的影响。...


下一代线路传感器:采集电能、互联、减少维护工作量

在能源格局不断变化的今天,停电仍会引起企业关键运营的中断,例如生产流程,从而造成巨额损失。此外,某些老旧的电网设备仍在全世界运行,而在有些地区,用电风暴变得越来越常见。...


研华发布支持宽温工作的超薄Mini-ITX主板AIMB-217

全球智能系统产业的领导厂商研华科技今天发布新型工业级无风扇超薄Mini-ITX主板AIMB-217。该产品搭载最新Intel Pe...


第4章 利用Petalinux工程工作

建立一个新的工程 在从vivado中导出硬件描述文件后,下一步就是建立并初始化新的Petalinux工程。petalinux-create工具用于穿件基本工程目录: petalinux-create - -type project - -template CPU_NAME > - -name P...