两种工作状态
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存储系统
下一篇:嵌入式linux面试题解析(一)——ARM部分一
推荐阅读
史海拾趣
随着Helium商业模式的成功实施,其热点数量迅速增长。据数据显示,Helium的热点数量从最初的少数几个发展到数十万乃至数百万个,覆盖了全球169个国家和地区。这一成就不仅彰显了Helium在物联网领域的领先地位,也为其带来了巨大的市场影响力和商业价值。通过广泛的网络覆盖,Helium为物联网设备提供了稳定、可靠的连接服务,促进了物联网技术的普及和应用。
随着Helium在物联网领域的不断突破和发展,其市场认可度逐渐提升。在2021年,Helium通过Token销售完成了1.11亿美元的融资;次年年初,又以12亿美元估值完成了2亿美元的D轮融资。这些融资的成功不仅为Helium提供了充足的资金支持,也进一步验证了其在物联网和区块链领域的商业价值和发展潜力。同时,Helium还吸引了众多明星机构和投资者的青睐,为其未来的发展奠定了坚实的基础。
随着技术的不断成熟和产品质量的提升,Futaba Electric开始将目光投向国际市场。20世纪70年代末至80年代初,公司成功进入欧美市场,与多家国际知名企业建立了合作关系。通过参加国际展会、设立海外分支机构等方式,Futaba Electric的产品逐渐在全球范围内得到推广和应用。这一时期,公司的国际化战略取得了显著成效,为公司的长远发展奠定了更加坚实的基础。
APM Hexseal的创始人Milton Morse是一位自学成才的工程师和杰出的创新者。他敏锐地洞察到电子行业对密封解决方案的迫切需求,于是开始设计原始的密封开关“靴子”。这种模制的覆盖物能够保护拨动开关和安装面板免受各种液体和气体的渗透。这一创新产品迅速取得了巨大的成功,为APM Hexseal公司奠定了坚实的基础。
APM Hexseal一直致力于技术的持续创新和突破。公司不仅开发了可重复使用的自密封紧固件和垫圈等创新产品,还不断提升其产品的性能和可靠性。这些创新不仅满足了电子行业对密封解决方案的更高要求,也为APM Hexseal在激烈的市场竞争中保持了领先地位。
这些故事只是APM Hexseal在电子行业中发展起来的冰山一角。然而,正是这些故事所展现的创新精神、卓越品质和市场洞察能力,使得APM Hexseal能够在电子行业中脱颖而出,成为一家备受尊敬的企业。
面对电子行业日益多样化的市场需求,FlexiPanel推出了定制化RF模块解决方案服务。公司拥有一支专业的技术团队,能够根据客户的具体需求,提供从需求分析、方案设计、样品制作到批量生产的全流程服务。这种灵活多样的服务模式不仅满足了客户对于个性化产品的需求,还帮助FlexiPanel在市场中建立了良好的口碑和品牌形象。
为什么我原理图中的BUS总线显示连接上了,ERC检查也没错,导入到PCB中就没有连上呢,部分原理图如下,谢谢高手指导! [ 本帖最后由 zhouyueping1986 于 2008-6-16 16:03 编辑 ]… 查看全部问答∨ |
|
这是设计师专门为意大利米兰一家公司员工设计的办公专用头罩,它的作用就是在一些开放式办公环境里,戴上它,员工们可以把自己的注意力集中在一点,从而盼望能进步大家的办公效率。 头罩设计了15款,比较好笑的是,有些头罩戴着让人感到样子象一个 ...… 查看全部问答∨ |
|
本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata 大家上午好,请问有谁用过AVR的单片机写过18B20的驱动啊 … 查看全部问答∨ |
看着大家的帖子,我试着修改程序。 可是,怎么就不能进入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设备移除后再插上,无法激活! 2、我插上设备,在弹出的提示框中输入驱动程序名称后,能正确安装、调用USBDeviceAttach函数初始化设备了,我在应用程序中用CreateFil e和DeviceIOControl函数可以访问了,但是当我拔出设备第二次插进 ...… 查看全部问答∨ |