运行模式

2019-07-20 16:15发布

一 基础知识字节  8位
半字  16位
字    32位

二 解惑Code, RO-data,RW-data,ZI-dataCode为程序代码部分
RO-data 表示 程序定义的常量const temp;
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
Program Size: Code="18248" RO-data=320 RW-data=260 ZI-data=3952Code, RO-data,RW-data ............flash
RW-data, ZIdata...................RAM
三 详细分析初始化时RW-data从flash拷贝到RAM生成的map文件位于list文件夹下 (KEIL)    Total RO  Size (Code + RO Data)                18568 (  18.13kB)
    Total RW  Size (RW Data + ZI Data)              4212 (   4.11kB)
    Total ROM Size (Code + RO Data + RW Data)      18828 (  18.39kB)
ARM指令的长度刚好是1个字(分配为占用4个字节),Thumb指令的长度刚好是半字(占用2个字节)R0-R15 (R15-PC,R14-LR,R13-SP) 32位每个异常模式还带有一个程序状态保存寄存器 (SPSR),它用于保存在异常事件发生之前的CPSRLDMIA R1!,{R2-R7, R12} ;将R1单兀中的数据读出到R2-R7,R12,  R1自动加1
STMIA RO!,{R3-R6,R10}  ;将R3-R6,R10中的数据保存到RO指向的地址,RO自动加1
在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址.若使用后缀“!”,则结果写回到Rn中,且Rn值不允许为R15.指令举例如下:
LDR   Rd, [Rn, #Ox4]!
LDMFD  SP!,{R0-R3,PC}^ ;中断返回
“^”符号表示这是一条特殊形式的指令。这条指令在从存储器中装载PC的同时(PC是最后恢复的),CPSR也得到恢复
大端格式(Big-endian)
小端格式(Little-endian)
数据0x12345678存储格式
      大端格式
低地址<----0x12|0x34|0x56|0x78---->高地址
      小端格式
低地址<----0x78|0x56|0x34|0x12---->高地址
ARM微处理器支持7种运行模式,分别为: CPSR M[4:0]1.用户模式(usr):ARM处理器正常的程序执行状态。       10000
2.快速中断模式(fiq):用于高速数据传输或通道处理。    10001
3.外部中断模式(irq):用于通用的中断处理。            10010
4.管理模式(svc):操作系统使用的保护模式。            10011
5.数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。10111
6.系统模式(sys):运行具有特权的操作系统任务。        11111
7.定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 11011
ARM正常工作一般工作在用户模式和系统模式,复位的时候进入管理模式。对于ARM指令集来说,PC指向当前指令的下两条指令的地址,注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址假设反汇编代码:  0x000001 :  mov lr pc   (此时查看PC寄存器的值是0x000001,但实际PC值是0x000003, lr里面保存的就是0x000003) fields 指定传送的区域(psr  CPSR或SPSR)
c 控制域屏蔽字节(psr[7..0])
x 扩展域屏蔽字节(psr[15..8])
s 状态域屏蔽字节(psr[23..16])
f 标志域屏蔽字节(psr[31..24])
例如:MSR cpsr_c, #0xD3 ;  CPSR[7...0] = 0xD3
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
izhanghongcun
2019-07-21 00:21
两种操作模式分别为:处理者模式和线程模式(thread mode)。
引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。

两级特权操作分别为:特权级和用户级。
这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。
处理器支持两种特权级,这也是一个基本的安全模型。

主应用程序(线程模式),既可以使用特权级,也可以使用用户级;
异常服务例程(处理者模式)必须在特权级下执行。

通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没有调试好的程序,

不让它们随便地配置涉及要害的寄存器,因而系统的可靠性得到了提高。





控制寄存器(CONTROL)
CONTROL[0]=1,用户级的线程模式
CONTROL[0]=0,特权级的线程模式
CONTROL[1]=1,选择使用PSP
CONTROL[1]=0,选择使用MSP
复位后,处理器默认进入线程模式,特权极访问 ( 使用 MSP 作为堆栈指针 )

EXC_RETURN    Description
0xFFFFFFF1    Return to Handler mode. Exception return gets state from the main stack. Execution uses MSP after return.
0xFFFFFFF9    Return to Thread mode. Exception Return get state from the main stack. Execution uses MSP after return.
0xFFFFFFFD    Return to Thread mode. Exception return gets state from the process stack. Execution uses PSP after return.
Handler mode always uses the MSP, so the processor ignores explicit writes to the active stack pointer bit of the CONTROL register when in Handler mode. The exception entry and return mechanisms automatically update the CONTROL register based on the EXC_RETURN value

In an OS environment, ARM recommends
the kernel and exception handlers use the main stack.
the threads running in Thread mode use the process stack.

By default, Thread mode uses the MSP.
To switch the stack pointer used in Thread mode to the PSP
(1) use the MSR instruction to set the Active stack pointer bit to 1, CONTROL[1] = 1
(2) perform an exception return to Thread mode with the appropriate EXC_RETURN value

When changing the stack pointer, software must use an ISB instruction immediately after the MSR instruction. This ensures that instructions after the ISB instruction execute using the new stack pointer.


Processor mode and privilege levels for software execution

The processor modes are:

Thread mode
Used to execute application software.
The processor enters Thread mode when it comes out of reset.

Handler mode
Used to handle exceptions.
The processor returns to Thread mode when it has finished all exception processing.

The privilege levels for software execution are:

Unprivileged
The software:

has limited access to the MSR and MRS instructions, and cannot use the CPS instruction

cannot access the system timer, NVIC, or system control block

might have restricted access to memory or peripherals.

Unprivileged software executes at the unprivileged level.

Privileged
The software can use all the instructions and has access to all resources.

Privileged software executes at the privileged level.

In Thread mode, the CONTROL register controls whether software execution is privileged or unprivileged, see CONTROL register.
In Handler mode, software execution is always privileged.

Only privileged software can write to the CONTROL register to change the privilege level for software execution in Thread mode.
Unprivileged software can use the SVC instruction to make a supervisor call to transfer control to privileged software.


一周热门 更多>