ARM学习笔记(五)--ARM编译器支持的数据类型及预定义宏

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

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的,其对齐特性能够满足整除的要求。

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

ARM编译器中预定义的宏

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

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

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

_ARMCC_VERSION Ver 代表编译器版本号,其格式为:

PVtbbb,其中:

P为产品编号(1代表ADS

V为副版本号(1代表1.1

T为补丁版本号(0代表1.1

bbbbuild号(比如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 _ &nbs

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值