Chinaunix首页 | 论坛 | 博客
  • 博客访问: 34047
  • 博文数量: 13
  • 博客积分: 270
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-29 09:29
文章分类

全部博文(13)

文章存档

2020年(1)

2017年(4)

2016年(1)

2013年(1)

2012年(3)

2011年(1)

2010年(2)

我的朋友

分类: 嵌入式

2016-02-23 10:59:36

ARM处理器的架构很复杂,因此才更应该多学习一下,对今后的工作帮助会很大。
因为,之前在别的平台上开发(公司自己的处理器),所以思维模式的转变会有些大吧。
在此,开博记录学习过程吧。

一.特殊寄存器:
 ARM处理器共有31个32位通用寄存器,其中有16个是任何时点都可以访问的。
其他的寄存器是为了,中断和异常处理准备的。这16个寄存器中又有三个比较特殊,在这里简单记录一下。

1.Stack Pointer
R13,程序通常就把它当作栈指针用。Thumb指令集可以用PUSH和POP操作,ARM指令集就只能用SRS和RFE来操作了。
2.Return Register
R14又是LR,区别于其他架构的地方啊,保存了子函数的返回地址。
(关联操作:BL,BLX之行后,它的下一条指令的地址就被偷偷的保存到R14里面了,其他情况下它是通用寄存器)
3.Program Counter
R15,不废话。

除以上3个特殊的寄存器以外,剩下的那13个寄存器,就由程序员随便玩儿了。


二.Status Register
CPSR:当前程序状态寄存器(对应于其他架构相当于PSW)。
SPSR:保存了进入异常模式前的CPSR的值。
CPSR_C:代表了CPSR的低八位。

以上的寄存器需要用MSR,MRS才能够进行读写操作。

三.数据类型
Byte            --   8bit
Half word     --  16bit
Word           --  32bit

四.处理器模式
    编号            说明
usr        0b10000        用户模式,程序通常执行时的模式
fiq         0b10001        快速中断模式,快速传输数据(DMA?),还有Channel Process(什么意思?
irq         0b10010        通用中断
svc        0b10011        给OS用的保护模式
abt        0b10111        保护内存,虚拟内存(访问了非法地址就进这个模式了吧?)
und       0b11011        文档中说,协处理器的软件模拟用,没接触过,暂时搁着吧
sys        0b11111        OS执行模式

大部分应用程序在usr下运行,OS在sys下运行。应用想要访问被保护的资源时,要通过产生中断,切换到sys模式。
    =〉也就是调用系统调用了。

其中,fiq,irq,svc,abt,und 也叫做特权模式,在这些模式下可以访问系统资源,还可以切换到任意的模式去。


未完,陆续补充。
阅读(514) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~