ARM 那几种模式

看图说话:

用户模式 usr 1 0000 程序正常运行时的工作模式,不可直接进入任何特权模式??

系统模式 sys 1 1111 可以进入其他特权模式,一般是OS的各种task用来访问各种资源

管理模式 svc 1 0011 OS的kernel,区别于用户空间,处于保护空间?
中止模式 abt 1 0111 data/pretech 异常进入
未定义模式 und 1 1011 undefine异常
中断模式 irq 1 0010 irq
快速中断 fiq 1 0001

fiq

INTEL 汇编格式: opcode dst,src

AT&T-------------:    opcode src,dst

这种对比更适合记msr,mrs这类指令。

msr: 可通过寄存器来改写CPSR,usr模式无法进入特权,意思该指令无法在usr mode下使用?该指令只在特权模式下可以写CPSR. 那么,usr模式下,如何主动进入特权模式? SWI immediate,可由usr直接进入SVC模式。

 异常优先级 名称 所处模式 I F  
1 reset SVC D(disabled) D  boot
2 data Abort abort I F 如果没有虚拟地址,存储管理,
3 FIQ fiq D D  
4 IRQ irq D F  
5 Prefetch Abort abort I F  
6 und undf I F 支持仿真的硬件协处理器?
6 swi svc D F  

I,F: 相应异常进入相关模式时, 并不改变CSPR的I,F位。

以reset为例,reset后做些啥?

设为M[1 0000], I,F置1, T clear 为0,确保为arm,再PC指向0地址。这些只是用于 svc stack setup。其后的boot,比如clock,pll, io,peripheral操作才算开始正式工作。

以swi为例,干啥用?

比如,os的task频繁switch,时间怎么定?看一下Vector,这个顺序更像是reset之外的异常按照优先级升序写起,data handler又例外。

0x0 reset handler
0x04 und handler
0x08 swi handler
0x0c prefetch handler
0x10 data abort handler
0x14 reserved
0x18 irq handler
0x1c fiq handler

将OS 的tick绑到swi上,时间到点,触发swi,看看要不要context switch。

SVC,同时有着最高最低优先级,会玩。

SWI和UND有着同样的优先级,万一同时发生了,怎么解?

你可能感兴趣的:(ARM 那几种模式)