历史上的今天

今天是:2024年11月02日(星期六)

2021年11月02日 | ARM处理器工作状态和模式

发布者:brian808090 来源: eefocus关键字:ARM  处理器  工作状态  模式 手机看文章 扫描二维码
随时随地手机看文章

两种工作状态

1、ARM状态:处理器执行32位对齐的ARM指令;

2、Thumb状态:处理器执行16位对齐的ARM指令。


它们之间的区别在于:Thumb指令集不是完整的指令集,它是ARM指令集的子集。但是Thumb指令具有更高的代码密度,即占用存储空间小,仅为ARM代码规格的65%,但其性能却下降的很少。所以,Thumb指令集使ARM处理器能应用到有限的存储带宽,并且,代码密度要求很高的嵌入式系统中去。Thumb指令集没有协处理器指令、信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其他指令均为无条件执行;大多数Thumb数据处理指令采用2地址格式。


七种工作模式

1、用户模式(Usr):用于正常执行程序;

2、快速中断模式(FIQ):用于高速数据传输;

3、外部中断模式(IRQ):用于通常的中断处理;

4、管理模式(svc):操作系统使用的保护模式;

5、数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护;

6、系统模式(sys):运行具有特权的操作系统任务;

7、未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件。

除用户模式以外,其余6种模式都属于特权模式。用户模式不能够直接和其他6种模式进行切换,需要借助中断、异常,系统调用等。用户模式主要为了设置应用程序的权限,防止对系统造成破坏,起到保护作用。而其他6种模式直接可以直接进行切换。详情可以看下图:

在这里插入图片描述

两种寄存器

1、CPSR(current program status register):当前程序状态寄存器。

CPSR和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义.而CPSR寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息.(CPSR寄存器为32位)

在这里插入图片描述

CPSR的低8位(包括I、F、T和M[4:0])称为控制位,程序无法修改,除非CPU运行于特权模式下,程序才能修改控制位!

N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行!意义重大!

在这里插入图片描述

从对应表中可以看出M[4:0]各种状态表示的含义。


2、SPSR(Saved Program Status Register):程序状态保存寄存器

当切换进入某一个特权模式时,SPSR保存前一个工作模式的CPSR值,这样,当返回前一个工作模式时,可以将SPSR的值恢复到CPSR中;

总结如下:1.保存ALU中的当前操作信息;

2.控制允许和禁止中断;

3.设置处理器的运行模式。


ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。即MRS、MSR。在对CPSR,SPSR寄存器进行操作不能使用mov,ldr等通用指令,只能使用特权指令MRS和MSR。


在ARM处理器中,只有MRS(Move to Register from State register)指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以获得当前处理器的工作状态。读SPSR寄存器可以获得进入异常前的处理器状态(因为只有异常模式下有SPSR寄存器)。

比如:


MRS    R1,CPSR   ; 将CPSR状态寄存器读取,保存到R1中

MRS    R2,SPSR    ; 将SPSR状态寄存器读取,保存到R2中


MSR    CPSR_c,R0 ; 将修改后的值写回 CPSR寄存器的对应控制域


linux操作系统与ARM工作模式

首先,ARM开发板在刚上电或者复位后,都会首先进入SVC即管理模式,此时、程序计数器R15-PC会被自动赋值为0x0000 0000,bootloader就是在该模式下,位于0x0000 0000 的NOR FLASH或SRAM中装载的,因此,开机或重启后bootloader会被首先执行。

接着,bootloader引导linux内核,此时,linux内核仍然运行在SVC即管理模式下,当内核启动完毕后,进入用户态init进程时,内核将ARM的当前程序状态CPSR寄存器M[4:0]设置为10000,进而用户态程序只能运行在ARM的用户模式。


由于ARM用户模式下对资源的访问时受限制的,因此,用户态可以实现对linux操作系统内核保护的目的。


需要强调的是:Linux内核态是从ARM的SVC即管理模式下启动的,但在某些情况下、如:硬件中断、程序异常(被动)等情况下进入ARM的其他特权模式,这时仍然可以进入内核态(因为就是可以操作内核了);同样,Linux用户态是从ARM用户模式启动的,但当进入ARM系统模式时、仍然可以操作Linux用户态程序(进入用户态,如init进程的启动过程)。


即:Linux内核从ARM的SVC模式下启动,但内核态不仅仅指ARM的SVC模式(还包括可以访问内核空间的所有ARM模式);Linux用户程序从ARM的用户模式启动,但用户态不仅仅指ARM的用户模式。

关键字:ARM  处理器  工作状态  模式 引用地址:ARM处理器工作状态和模式

上一篇:ARM体系结构--第五章ARM存储系统
下一篇:嵌入式linux面试题解析(一)——ARM部分一

推荐阅读

          集微网小编:根据小编拿到的名单,寒武纪联合创始人、CEO陈天石作为集成电路行业的唯一代表参加了此次民营企业座谈会,显示了国家对集成电路产业的高度重视。来源:中华工商时报  记者/杜鹃 周勇刚 郭钇杉 黄涛 高春颀 李仁平 童芬芬 孙永剑  张文燕等 部分摄影/张雷          中共中央总书记、国家主席、中央...
(文章来源:百家号) 工厂在升级自动之前通常会对未来的趋势进行预测,分析机器设备投资回报率,对解决方案的可行性进行全面的评估。但是人们的预测不可能保持100%的成功率,未来有很多不可预测的事情发生,错误的决策将让企业付出更大的成本。 为此,一些企业在思考新的运营模式,为客房提供机器租赁服务,这种方式可以降低企业升级的风险和成本,具...
此前有消息称,小米Redmi将在11月推出新的Redmi Note系列,但这并非是新的Redmi Note10系列,而是Redmi Note 9系列手机。  根据微博博主@数码闲聊站 消息,Redmi Note9系列新机暂定本月中下旬发布,一共会上三款新机。Redmi Note 9其中一款搭载1.08亿像素HM2相机产品。  近期, Redmi Note 9系列两款新品正式获得 3C 认证。  ...
示波器的主要作用就是用来观察电压随时间变化的曲线,通过不同的传感器探头,示波器也可以测量电流,压强等。示波器是每一个电子爱好者和电子工程师必备的仪器,今天我们来看下在选择入门的基础示波器时,我们要考虑哪些因素。带宽带宽作为示波器的首要参数指标,带宽不足时波形就会严重失真,方波甚至可能会变成正弦波,我们用分别20M带宽和100M带宽的示...

史海拾趣

问答坊 | AI 解惑

什么情况下适用三相五线制?

什么情况下适用三相五线制,有何有点(较三项四线制)? 望大家多多赐教!!…

查看全部问答∨

原理图中的BUS总线问题?

为什么我原理图中的BUS总线显示连接上了,ERC检查也没错,导入到PCB中就没有连上呢,部分原理图如下,谢谢高手指导! [ 本帖最后由 zhouyueping1986 于 2008-6-16 16:03 编辑 ]…

查看全部问答∨

据说带上这个头罩可以进步办公效率

这是设计师专门为意大利米兰一家公司员工设计的办公专用头罩,它的作用就是在一些开放式办公环境里,戴上它,员工们可以把自己的注意力集中在一点,从而盼望能进步大家的办公效率。 头罩设计了15款,比较好笑的是,有些头罩戴着让人感到样子象一个 ...…

查看全部问答∨

请问谁用过AVR写过18B20的驱动啊?

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata     大家上午好,请问有谁用过AVR的单片机写过18B20的驱动啊 …

查看全部问答∨

k9k8gu08a怎么跳不到main里面

看着大家的帖子,我试着修改程序。 可是,怎么就不能进入main呢 我用led_test测试,已经执行到那一行了,下面是相关代码,请大家指点一下 ;        bl        Led_Test         ...…

查看全部问答∨

推荐一个学习嵌入式的培训和书籍

中心简介:   广东省嵌入式软件公共技术中心(简称GEC)是广东美的集团嵌入式产品研发中心,原是广东省政府公开向社会竞标的项目,由广东美的集团中标承建。中心建设资金总投入3000万元,其中省政府资助资金900万元、地方政府配套450万元、美的 ...…

查看全部问答∨

对话框如何从视图中读取数据作为它的初始值

CSetDlg::CSetDlg(CWnd* pParent /*=NULL*/)         : CDialog(CSetDlg::IDD, pParent) {         //{{AFX_DATA_INIT(CSetDlg)         m_bchannel1  =TRUE;//初始化 &nbs ...…

查看全部问答∨

紧急求助:USB设备移除后再插上,无法激活!

紧急求助:USB设备移除后再插上,无法激活! 2、我插上设备,在弹出的提示框中输入驱动程序名称后,能正确安装、调用USBDeviceAttach函数初始化设备了,我在应用程序中用CreateFil e和DeviceIOControl函数可以访问了,但是当我拔出设备第二次插进 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved