新闻中心

EEPW首页 > 学习方法与实践 > ARM基础知识连载(5)

ARM基础知识连载(5)

——
作者: 时间:2007-08-03 来源:电子产品世界 收藏

*************************************************************

编译器支持的数据类型

************************************************************
数据类型 长度(位) 对齐特性
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.整数类型
体系中,整数类型是以2的补码形式存储的。对于long long类型来说,在little endian内存模式下,其低32位保存在低地址的字单元中,高32为保存在高地址的字单元中;在big endian模式下,其低32位保存在高地址的字单元中,高32为保存在低地址的字单元中。对于整型数据的操作遵守下面的规则:
**所有带符号的整型书的运算是按照二进制的补码进行的。
**带符号的整型数的运算不进行符号的扩展。
**带符号的整型数的右移操作是算数移位。
**制定的移位位数的数是8位的无符号数。
**进行移位操作的数被作为32位数。
**超过31位的逻辑左移的结果为0。
**对于无符号数和有符号的正数来说,超过32位的右移操作结果为0;对于有符号的负数来说,超过32位的右移操作结果为-1。
**整数除法运算的余数和除数有相同的符号。
**当把一个整数截断成位数更短的整数类型的数时,并不能保证所得到的结果的最高位的符号位的正确性。
**整型数据之间的类型转换不会产生异常中断。
**整型数据的溢出不会产生异常中断。
**整型数据除以0将会产生异常中断。
2.浮点数
体系中,浮点数是按照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的,其对齐特性能够满足整除的要求

*****************************************************

ARM编译器中预定义的宏

*****************************************************{{分页}}
ARM编译器预定义了一些宏,这些预定义宏对应一定的数值,有些预定义宏没有对应数值,见下表:

_arm                _               使用编译器armcc,tcc,armcpp,tcpp时

_ARMCC_VERSION      Ver             代表编译器版本号,其格式为:
                                    PVtbbb,其中:
                                    P为产品编号(1代表ADS)
                                    V为副版本号(1代表1.1)
                                    T为补丁版本号(0代表1.1)
                                    bbb为build号(比如650)

_APCS_INTERWORK     _               使用编译选项-apcs/interwork时

_APCS_ROPI          _               使用编译选项apcs/ropi时

_RWPI               _               使用编译选项-apcs/rwpi时

_APCS_SWST          _               使用编译选项-apcs/swst时

_BIG_ENDIAN         _               编译器针对目标系统使用big-endian内存模式时

_cplusplus          _               编译器工作与C++模式时

_CC_ARM             _               返回编译器的名称

_DATE_              date            编译源文件的日期

_embedded_cplusplus                 编译器工作于EC++模式时

_FEATURE_SINGED_CHAE                使用编译设置选项-zc时设置该预定义宏

_FILE_              name            包含全路径的当前被编译的源文件名称

_func_              name            当前被编译的函数名称

_LINE_              num             当前被编译的代码行号名称

_MOUDLE_            mod             预定义宏_FILE_的文件名称部分

_OPTIMISE_SPACE     _               使用编译选项-OSPACE时

_OPTIMISE_TIME      _               使用编译选项-Otime时

_pretty_func        name            unmangled的当前函数名称

_sizeof_int         4               sizeof(int),在预处理表达式中可以使用

_sizeof_long        4               sizeof(long),在预处理表达式中可以使用

_sizeof_ptr         4               sizeof(void*)在预处理表达式中可以使用

_SOFTFP             _               编译时使用浮点数

_                   _               在各种编译器模式下

_STDC_VERSION       _               标准的版本信息

_STRICT_ANSI_      _                使用编译选项-STRICT时

_TARGET_ARCH_xx     _               xx代表ARM体系编号

_TARGET_CPU_xx      _               xx代表CPU编号

_TARGET_FEATURE_                    当ARM体系支持指令PLD,LDRD,STRD,MCRR,MRRC时
DOUBLEWORD          _               设置该定义宏

_TARGET_FEATURE_                    当系统中包含DSP乘法处理器时,设置该
DSPMUL             _                预定义宏

_TARGET_FEATURE_                    如果目标ARM体系支持半字访问以及有符号的字节数据
HALFWORD           _                ,设置该预定义宏

_TARGET_FEATURE_                    如果目标ARM体系支持长乘法指令MULL和
MULTIPLY            _               MUAL,设置该预定义宏

_TARGET_FEATURE_                    如果目标ARM体系支持THUMB指令
THUMB               _              

_TARGET_FPU_xx      _               表示FPU选项,可能取值如下所示:
                                    _TARGET_FPU_VFP
                                    _TARGET_FPU_FPA
                                    _TARGET_FPU_SOFTVFP
                                    _TARGET_FPU_SOFTVFP_VFP
                                    _TARGET_FPU_SOFTFPA
                                    _TARGET_FPU_NONE

_thumb            _                编译器为tcc或tcpp时,设置该预定义宏

_TIME                              源文件编译时间



关键词: ARM

评论


相关推荐

技术专区

关闭