【嵌入式可移植性】嵌入式可移植性分析

移植性问题包含的内容很广泛,本节要介绍的是代码在不同体系结构下的移植问题。Linux内核是高度可移植的,若希望在不同平台下开发的应用程序或设备驱动程序也能很好地兼容,这就要求用户在开发的过程中要充分考虑与移植相关的内容。本文将讨论数据类型、数据对齐,以及与字节顺序相关的移植性问题。

1 字长和数据类型

不同的体系结构具有不同的字长,表1列出了一些常见体系结构的字长。

表1 表示例

体 系 结 构

字     长

alpha

64

ia64

64

mips64

64

powerpc64

64

sparc64

64

x86_64

64

um

32/64

s390

32/64

arm

32

体 系 结 构

字     长

h8300

32

i386

32

m32r

32

m68r

32

mips

32

powerpc

32

v850

32

因此在不同体系结构下C语言数据类型的大小不是相同的,用户必须安排特定大小的数据项,才能更好地进行移植。

在编写程序代码之前,有必要了解各种常用数据类型的长度,比如说char、short、int和long的长度。

● char类型的长度被定义为8字节。

● short类型的长度被定义为至少2字节。因此在有些计算机上,对于某些编译器,short类型的长度可能就是4个字节,甚至更长。

● int类型是一个整数的“自然”大小,其长度至少为2字节,并且至少要和short类型一样长。在16位计算机上,int类型的长度可能为2字节;在32位计算机上,可能为4字节;当64位计算机流行起来后,int类型的长度可能会达到8字节。例如,早期的Motorala 68000是一种16/32位的混合型计算机,依赖于不同的命令行选项,一个68000编译程序能产生两个字节长或4字节长的int类型。

● long类型至少和int类型一样长(因此,它也至少和short类型一样长)。long类型的长度至少为4字节。32位计算机上的编译程序可能会使short、int和long类型的长度都为4字节。

如果需要一个4字节长的整型变量,不能想当然地以为int或long类型能满足要求,而要用sizeof()来检测int和 long的长度;再根据检测的结果,使用typedef把一种固有的类型定义为用户所需要长度的类型,并在其前后加上相应的#ifdef指令。

#ifdef four_Byte_long

typedef long int4;

#endif

Linux内核,在/usr/src/linux/include/asm/types.h文件中也定义了一些长度确定的数据类型。

typedef unsigne

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值