一、ARM处理器7种工作模式(特权模式 特权模式异常模式)
用户模式(USR):正常程序执行模式,不能直接切换到其他模式
系统模式(SYS):运行操作系统的特权任务,与用户模式类似,但具有可以直接切换到其他模式等特权
快中断模式(FIQ):支持高速数据传输及通道处理,FIQ异常响应时进入此模式
中断模式(IRQ):用于通用中断处理,IRQ异常响应时进入此模式
管理模式(SVC):操作系统保护模式,系统复位和软件中断响应时进入此模式(由系统调用执行软中断SWI命令触发)
中止模式(ABT):用于支持虚拟内存和/或存储器保护,在ARM7TDMI没有大用处
未定义模式(UND):支持硬件协处理器的软件仿真,未定义指令异常响应时进入此模式
表3-1 ARM处理器工作模式
处理器工作模式
特权模式
异常模式
说明
用户(user)模式
用户程序运行模式
系统(system)模式
该组模式下可以任意访问系统资源
运行特权级的操作系统任务
一般中断(IRQ)模式
通常由系统异常状态切换进该组模式
普通中断模式
快速中断(FIQ)模式
快速中断模式
管理(supervisor)模式
提供操作系统使用的一种保护模式,swi命令状态
中止(abort)模式
虚拟内存管理和内存数据访问保护
未定义指令终止(undefined)模式
支持通过软件仿真硬件的协处理
CPU的模式可以简单的理解为当前CPU的工作状态,比如:当前操作系统正在执行用户程序,那么当前CPU工作在用户模式,这时网卡上有数据到达,产生中断信号,CPU自动切换到一般中断模式下处理网卡数据(普通应用程序没有权限直接访问硬件),处理完网卡数据,返回到用户模式下继续执行用户程序。
特权模式
除用户模式外,其它模式均为特权模式(Privileged Modes)。ARM 内部寄存器 和一些 片内外设 在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。
异常模式
特权模式中除系统(system)模式之外的其他5种模式又统称为异常模式。它们除了可以通过在特权下的程序切换进入外,也可以由特定的异常进入。比如硬件产生中断信号进入中断异常模式,读取没有权限数据进入中止异常模式,执行未定义指令时进入未定义指令中止异常模式。其中管理模式也称为超级用户模式,是为操作系统提供软中断的特有模式,正是由于有了软中断,用户程序才可以通过系统调用切换到管理模式
7种工作模式介绍
(1)用户模式:
用户模式是用户程序的工作模式,它运行在操作系统的用户态,它没有权限去操作其它硬件资源,只能执行处理自己的数据,也不能切换到其它模式下,要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。
(2)系统模式:
系统模式是特权模式,不受用户模式的限制。用户模式和系统模式共用一套寄存器,操作系统在该模式下可以方便的访问用户模式的寄存器,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
说明:用户模式与系统模式两者使用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状态寄存器),但系统模式比用户模式有更高的权限,可以访问所有系统资源。
(3)一般中断模式:
一般中断模式也叫普通中断模式,用于处理一般的中断请求,通常在硬件产生中断信号之后自动进入该模式,该模式为特权模式,可以自由访问系统硬件资源。
(4)快速中断模式:
快速中断模式是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。
(5)管理模式(Supervisor,SVC) :
管理模式是CPU上电后默认模式,因此在该模式下主要用来做系统的初始化,软中断处理也在该模式下。当用户模式下的用户程序请求使用硬件资源时,通过软件中断进入该模式。
说明:系统复位或开机、软中断时进入到SVC模式下。
(6)终止模式:
中止模式用于支持虚拟内存或存储器保护,当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式,linux下编程时经常出现的segment fault通常都是在该模式下抛出返回的。
(7)未定义模式:
未定义模式用于支持硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别该指令操作时,会进入未定义模式。
说明:
1、用户模式外,其它6种模式称为特权模式。所谓特权模式,即具有如下权利:
a.MRS(把状态寄存器的内容放到通用寄存器);
b.MSR(把通用寄存器的内容放到状态寄存器中)。
由于状态寄存器中的内容不能够改变,因此要先把内容复制到通用寄存器中,然后修改通用寄存器中的内容,再把通用寄存器中的内容复制给状态寄存器中,即可完成“修改状态寄存器”的任务。
2、剩下的六种模式中除去系统模式外,统称为异常模式。
除用户模式外,其余6种工作模式都属于特权模式
特权模式中除了系统模式以外的其余5种模式称为异常模式
大多数程序运行于用户模式
进入特权模式是为了处理中断、异常、或者访问被保护的系统资源
硬件权限级别:系统模式 > 异常模式 > 用户模式
快中断与慢中断区别:快中断处理时禁止中断
二、异常的优先级
三、存储器格式
大端格式:高字节在低地址,低字节在高地址
小端格式:高字节在高地址,低字节在低地址
四、ARM体系的CPU有两种工作状态
ARM状态
THumb状态
五、Linux操作系统与ARM工作模式
首先,ARM开发板在刚上电或复位后都会首先进入SVC即管理模式,此时、程序计数器R15-PC值会被赋为0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中装载的,因此、开机或重启后bootloader会被首先执行。
接着,bootloader引导Linux内核,此时、Linux内核一样运行在ARM的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裸机程序][2]TQ2440、ADS1.2、JLINK建立集成开发环境
下一篇:[ARM裸机程序][4]ARM寄存器详解
推荐阅读最新更新时间:2024-11-10 14:47
推荐帖子
- 乐鑫ESP8266 将如何与云服务器通信?
- 标准HTTP协议可用于连接到更新服务器。例如,当您的自定义服务器正在运行时,当ESP8266设备启动套接字并发送HTTP请求时:GET/your-bin-file-path.binHTTP/1.1主机:yourdomain.com连接:keep-alive缓存控制:max-age=0接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8用户代理:Mozi
- 火辣西米秀 国产芯片交流
- Simplicity Studio支持跨平台了
- SiliconLabs公司的SimplicityStudio也终于支持跨平台了。目前可以在Windows/Linux/Mac三种主流平台上运行了。在debian7上的运行效果,还在检查更新。http://cn.silabs.com/products/mcu/Pages/simplicity-studio.aspxSimplicityStudio支持跨平台了没用过这个环境Silicon的也没用过,就用过cp210xoutman了ljj3166发表
- dcexpert 单片机
- 433MHz是我们的专属免费频段?
- 在我们国家免费,在其他国家不免费么?433MHz是我们的专属免费频段?回楼上的,百度了下:ISM频段即工业,科学和医用频段。一般来说世界各国均保留了一些无线频段,以用于工业,科学研究,和微波医疗方面的应用。应用这些频段无需许可证,只需要遵守一定的发射功率(一般低于1W),并且不要对其它频段造成干扰即可。ISM频段在各国的规定并不统一。如在美国有三个频段902-928MHz、2400-2484.5MHz及5725-5850MHz,而在欧洲900MHz的频段则有部份用于GSM通信。而2.
- fish001 RF/无线
- 此板现在有官方QQ群吗?
- 现在碰到个问题,怎么核芯板上焊接的是512M的SDRAM?是我查错了吗?不知道是不是有官方学习群,如果没有,我可以建立一个群友学习群此板现在有官方QQ群吗?搞明白了,把b当B了,64M的。。。。。。。。,但还是想问有没有学习群?本次活动的全部支持都在论坛里进行,这样方便后来者查寻问题,也方便我们今后整理出一个FAQ,如果用QQ群就难以达到效果了。。。但出现问题时的实时性就要差了一点了。。。。。。。。,就像我刚才碰到那么2的问题,自己还和寻思寻思,但有群友的话,一句话就茅塞顿开了。。。。
- ethunter 嵌入式系统
- 单片机的延时问题
- voiddelay(intx){inti,j;for(i=0;ix;i++)//计数X次,延长X*Y时间。for(j=1,j=60;j++);//计数60次延迟Y时间?}单片机是12M的晶振,请教下,它的延时问题。单片机的延时问题网上搜索一下,有延时计算软件我想知道它的每次运算能延时多久。不是只想要他的结果。回复沙发conghaisheng的帖子12*X*Y/Fsoc就是粗略的答案啦!Fsoc是为12M,说
- lzcqust 单片机
- 瑞萨e2studio如何去除汉化
- #背景安装e2studio时选择了中文语言,但使用之后发现汉化不完全,而且某些地方汉化词不达意。想把汉化去掉,但是网络并没有多少资料,而且过时了,不生效。经过我一番摸索,终于找到了法门。#卸载汉化过程##卸载插件入口从菜单栏**Help**-->**Aboute2studio**进入。##进入安装细节在弹出的界面点击**InstallationDetails**##搜索中文插件搜索ch开头的插件,找到三个,全部卸载。##卸载完成重启
- CoderX9527 DigiKey得捷技术专区
设计资源 培训 开发板 精华推荐
- LTC3634EFE 降压型稳压器的设计示例电路
- FA-128_CC253x,用于 CC253x 系列低功耗 802.15.4 LR-WPAN 无线应用的外部振荡电路
- 基于STM32H723ZG MCU的STM32 Nucleo-144开发板,支持Arduino,ST Zio和morpho连接
- STR-ACF-12V100WPSU-GEVB:启用 Strata 的 NCP1568 100W 交流到直流转换器
- 使用 Analog Devices 的 LTC2415-1CGN 的参考设计
- 使用 ROHM Semiconductor 的 BA00BC0WT-V5 的参考设计
- 使用 ON Semiconductor 的 FAN5093 的参考设计
- 使用 Dialog Semiconductor 的 SLG46140 的参考设计
- LTC2946CDE 具有板载 ADC 和 I2C 的宽范围电源、电荷和能量监视器的典型应用
- USB转四路串口