ARM基础知识

目录

一、ARM处理器及其对应的架构

二、Cortex-M3处理器基础知识

1、寄存器组

2、处理器操作模式


一、ARM处理器及其对应的架构

 1、MMU与MPU

        MMU,存储器管理单元,用于实现虚拟内存和内存的分区保护,这是应用处理器与嵌入式处理器的分水岭。 可以把MPU认为是MMU的功能子集,它只支持分区保护,不支持具有“定位决定性”的虚拟内存机制。

2、处理器支持的指令集:thumb(16 bit)、thumb2(16 bit/32 bit混合)、ARM指令集(32 bit)

Cortex-M3:支持Thumb或者Thumb-2指令集;

Cortex-A7:支持ARM、Thumb、Thumb-2、ThumbEE指令集;

3 、Cortex-A7用的是ARM-v7-A架构,处理器有9种运行模式:

英文:

对应中文:

二、Cortex-M3处理器基础知识

1、寄存器组

(1) 通用寄存器(R0~R15)

a. R0 - R3 : 子程序传递参数(函数传参保存参数),若函数参数超过四个,需要接着栈来保存;

b. R4 - R11: 子程序保存局部变量;

c. R12:记为IP,暂存寄存器,暂时保存LR的值;

d. R13:堆栈指针(别名SP):栈指针寄存器;在进入子程序时,和退出子程序时,值必须相等。

主堆栈指针(MSP),或写作 SP_main。这是缺省的堆栈指针,它由 OS 内核、异常服务例程(中断服务函数)以及所有需要特权访问的应用程序代码来使用。对于未使用操作系统的裸机程序的多数简单应用,对于不具有操作系统的简单应用,可以在所有操作中只使用MSP,而不用管PSP。

进程堆栈指针(PSP),或写作 SP_process。用于常规的应用程序代码(不处于异常服 用例程中时)。对于具有RTOS的系统,异常处理(包括部分RTOS内核)使用MSP ,而应用任务则使用PSP。

e. R14:连接寄存器(别名LR):用于保存子程序的返回值,不像大多数其它处理器,ARM 为了减少访问内存的次数,把返回地址直接存储在寄存器中。这样足以使很多只有 1 级子程序调用的代码无需访问内存(堆栈内存),从而提高了子程序调用的效率。如果多于 1 级,则需要把前一级的 R14 值压到堆栈里。

f. R15:程序计数寄存器(别名PC):存放下一条指令所在单元的地址。如果修改它的值,就能改变程序的执行流,指向当前的正在运行的指令地址。

PC = 正在执行的指令地址 + 4,因为Cortex-M3采用的是3级流水线的方式运行,在执行第一条指令时候,已经对第二条指令译码,对第三条指令取值。

并且由于在M3架构中,采用Thumb-2指令,每个指令占据 2 个字节,所以PC总是返回PC+4,

在ARM指令状态下,每条指令占据 4 字节,总是返回PC+8。

(2) 特殊功能寄存器

a. 它们只能被专用的 MSR 和 MRS(特殊)指令访问,而且它们也没有存储器地址。

b. 程序状态寄存器组(xPSR):

程序状态寄存器在其内部又被分为三个子状态寄存器:

应用程序 PSR(APSR):应用PSR(APSR) : 包含前一条指令执行后的条件标志,比较结果:大于等于,小于,进位等等;

中断号 PSR(IPSR):包含当前ISR的异常编号;

执行 PSR(EPSR):包含Thumb状态位;

c. 中断屏蔽寄存器组

PRIMASK,FAUITMASK和 BASEPRI寄存器都用于异常或中断屏蔽这些特殊寄存器可基于优先等级屏蔽异常,只有在特权访问等级对它们进行操作(非特权状态下的写操作会被忽略,而读出则会返回0)。它们默认全部为0,也就是屏蔽(禁止异常/中断)不起作用。

d. 控制寄存器(CONTROL):控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针

2、处理器操作模式

1、handler与线程模式  特权级与用户级

(1) 引入两个模式的本意,是用于区别普通应用程序的代码和异常服务例程的代码(包括中断服务例程的代码);

(2) 把代码按特权级用户极分开对待,有利于使架构更加安全和健壮;

2、程序运行时只有三种状态:特权级线程模式、用户级线程模式、特权级handler模式;

(1) 正常情况下,系统复位后,处理器处于特权级+线程模式(因为系统复位后,一般都需要先配置内核寄存器);

(2) 在特权级下的代码可以通过置位 CONTROL[0]来进入用户级;


(3) 用户级下的代码不能再试图修改 CONTROL[0]来回到特权级(因为CONTROI寄存器只能在特权访问等级进行修改操作,而读取操作则在特权和非特权访问等级都可以)。则它必须通过一个异常 handler,由那个异常 handler 来修改 CONTROL[0],才能在返回到线程模式后拿到特权级;

3、处理器在特权模式与用户模式有何区别:

(1) 处理器在特权模式下,程序可以访问所有范围的存储器(如果有 MPU,还要在 MPU 规定的禁地之外),并且可以执行所有指令,包括内核的所有寄存器。

(2) 处理器在用户模式下,对系统控制寄存器 NVIC、SCB(系统控制寄存器)和特殊寄存器(通过 MSR/MRS 访问的寄存器)的访问将被阻止(除了 APSR,因为 APSR 是专门用于给应用程序标志位的);如果在用户模式下,访问了上述寄存器,将会抛出硬件异常 。

(3) 所以特权级和用户级的区别体现在对访问内核寄存器的限制。

参考链接:FreeRTOS-ARM架构深入理解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值