您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

ARM底子知识教程四

发布日期:2011-04-19

ARM存储体系概述


ARM存储体系的体系布局适应差别的嵌入式应用体系的必要差别很大。最大略的存储体系利用平办事的地点映射机制,就像一些大略的弹片机体系中一样,地点空间的分派方法是牢固的,体系各部分都利用物理地点。而一些巨大体系大概包括下面的一种或几种技能,从而提供更为强大的存储体系。

**体系中大概包括多种范例的存储器,如FLASH,ROM,RAM,EEPROM等,差别范例的存储器的速率和宽度等各不雷同。
**通过利用CACHE及WRITE BUFFER技能缩小处理惩罚器和存储体系速率差别,从而进步体系的团体性能。
**内存办理部件通过内存映射技能实现假造空间到物理空间的映射。在体系加电时,将ROM/FLASH影射为地点0,如许可以举行一些初始化处理惩罚;当这些初始化完成后将RAM地点影射为0,并把体系步伐加载到RAM中运行,如许很好地办理了嵌入式体系的必要。
**引入存储掩护机制,加强体系的寂静性。
**引入一些机制包管I/O操纵应设成内存操纵后,种种I/O操纵可以或许得到精确的结果。

**与存储体系相干的步伐计划指南**
本节从外部来看ARM存储体系,及ARM存储体系提供的对外接口。本节先容用户通过这些接口来访问ARM存储体系时必要服从的规矩。

1.地点空间
ARM体系利用单一的寂静板地点空间。该地点空间大小为2^32个8位字节,这些字节的单位地点是一个无标记的32位数值,其取值范畴为0~2^32-1。ARM地点空间也可以看作是2^30个32位的字单位。这些字单位的地点可以被4整除,也便是说该地点低两位为0b00。地点为A的字数据包括地点为A、A+1、A+3、A+3 4个字节单位的内容。
各存储单位的地点作为32为无标记数,可以举行老例的整数运算。这些运算的结果举行2^32取模。
步伐正常实行时,每实行一条ARM指令,当前指令计数器加4个字节;每实行一条Thumb指令,当前指令计数器加2个字节。但是,本地点上产生溢出时,实行结果将是不可预知的。
2.存储器格局
ARM中,要是地点A是字对齐的,有下面几种:
**地点为A的字单位包括字节单位A,A+1,A+2,A+3。
**地点为A的班子单位包括字节单位A,A+1。
**地点为A+2的半字单位包括字节单位A+2,A=3.
**地点为A的字单位包括半字节单位A,A+2。
在big-endian格局中,对付地点为a的字单位此中字节单位由高位到低位字节次序为A,A+1,A=2,A+3;这种存储器格局如下所示:

31 24 23 16 15 8 7 0 
--------------------------------------------------------------------
字单位A |
--------------------------------------------------------------------
半字单位A | 半字单位A+2 |
--------------------------------------------------------------------
字节单位A | 字节单位A+1 | 字节单位A+2 | 字节单位A+3|
--------------------------------------------------------------------

在little-endian格局中,对付地点为A的字单位由高位到低位字节次序为A+3,A+2,A+1,A,这种存储格局如下所示

31 24 23 16 15 8 7 0 
--------------------------------------------------------------------
字单位A |
--------------------------------------------------------------------
半字单位A+2 | 半字单位A |
--------------------------------------------------------------------
字节单位A+3 |字节单位A+2 | 字节单位A+1 | 字节单位A |
--------------------------------------------------------------------

ARM体系中没有提供指令来选择存储器格局。要是体系中包括标准的ARM控制协处理惩罚器CP15,则CP15的寄存器C1的位[7]决定体系中存储器的格局。当体系复位时,寄存器C1的[7]值为零,这时体系中存储器格局为little-endian格局。要是体系中采取的是big-endian格局,则复位非常停止处理惩罚步伐中必须设置c1寄存器的[7]位。

3.非对齐的存储访问操纵
非对齐:位于arm状态时期,低二位不为0b00;位于Thumb状态时期,最低位不为0b0。
3.1非对齐的指令预取操纵
要是体系中指定当产生非对齐的指令预取操纵时,马虎地点中相应的位,则由存储体系实现这种马虎。
3.2非对齐的数据访问操纵
对付LOAD/STORE操纵,体系定义了下面3中大概的结果:
***实行结果不可预知
***马虎字单位地点低两位的值,即访问地点为字单位;马虎半字单位最低位的值,即访问地点为半字单位。
***由存储体系马虎字单位地点中低两位的值,半字单位地点最低位的值。

4.指令预取和自修改代码
当用户读取PC计数器的值时,返回的是当前指令下面的第二条指令的地点。对付ARM指令来说,返回当前指令地点值加8个字节;对付Thumb指令来说,返回值为当前指令地点值加4个字节。
自修改代码指的是代码在实行进程中修改自身。应只管即便克制利用。
5.存储器映射的I/O空间
ARM中,I/O操纵通常被影射为存储器操纵。通常必要将存储器映射的I/O空间设置成非缓冲的。

ARM编译器支持的数据范例


数据范例 长度(位) 对齐特性
Char 8 1(字节对齐)
short 16 2(百字对齐)
Int 32 4(字对齐)
Long 32 4(字对齐)
Longlong 64 4(字对齐)
Float 32 4(字对齐)
Double 64 4(字对齐)
Long double 64 4(字对齐)
All pointers 32 4(字对齐)
Bool(C++ only) 32 4(字对齐)

1.整数范例
ARM体系中,整数范例因此2的补码情势存储的。对付long long范例来说,在little endian内存模式下,其低32位生存在低地点的字单位中,高32为生存在高地点的字单位中;在big endian模式下,其低32位生存在高地点的字单位中,高32为生存在低地点的字单位中。对付整型数据的操纵服从下面的规矩:
**全部带标记的整型书的运算是根据二进制的补码举行的。
**带标记的整型数的运算不举行标记的扩展。
**带标记的整型数的右移操纵是算数移位。
**订定的移位位数的数是8位的无标记数。
**举行移位操纵的数被作为32位数。
**高出31位的逻辑左移的结果为0。
**对付无标记数和有标记的正数来说,高出32位的右移操纵结果为0;对付有标记的负数来说,高出32位的右移操纵结果为-1。
**整数除法运算的余数和除数有雷同的标记。
**当把一个整数截断成位数更短的整数范例的数时,并不克不及包管所得到的结果的最高位的标记位的精确性。
**整型数据之间的范例转换不会孕育产生非常停止。
**整型数据的溢出不会孕育产生非常停止。
**整型数据除以0将会孕育产生非常停止。
2.浮点数
ARM体系中,浮点数是根据IEEE标准存储的。
**float范例的数是根据IEEE的单精度数表现的。
**double和long double 是用IEEE的双精度数表现的。
对付浮点数的操纵服从下面的规矩:
**服从正常的IEEE754规矩。
**当默认环境下克制浮点数运算非常停止。
**当产生卷绕时,用最靠近的数据来表现。
3.指针范例的数据
下面的规矩实用于处数据成员指针以外的其他指针:
**NULL被定义为0。
**相邻的两个存储单位地点相差一。
**在指向函数的指针和指向数据的指针举行数据转换时,编译器将会孕育产生告诫信息。
**范例size_t被定义为unsigned int.
**范例ptrdiff_t被定义为signed int。
**两个指针范例的数据相减时,结果可以根据下面的公式得到。
((int)a-(int)b)/(int)sizeof(type pointed to)
这时,只要指针所指的东西不是pack的,其对齐特性可以或许餍足整除的请求。