曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7113|回复: 2
打印 上一主题 下一主题

可移植性和数据类型

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2009-8-30 23:18:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Linux 内核可以在多个平台上运行。为了确保平台上的可移植性,除了考虑平台之间的控制方式,还要明确变量的数据类型。

1、变量的数据类型

在 C 程序里,多数数据变量使用 int ,但是 int 型变量的大小依赖于平台。16 位微处理器中 int 型变量的大小为 2 字节,32 位微处理器中是 32 位,64 位微处理器中是 64 位。同样地,long 型的大小也随处理器的类型变化而变化。变量类型的大小差异会其他平台之间的移植带来负面的影响。为了解决此类问题,最好使用 Linux 内核提供的数据类型。对于现在较新的 2.6 内核中,在 include/asm-generic/int-l64.h 头文件中可以看到相应的数据类型定义,如:typedef unsigned char __u8;

常用的数据类型
带符号的正数
不带符号的正数
__s8, s8
 8位 
     __u8, u8
8位
__s16, s16
 16位
     __u16, u16
16位
__s32, s32
 32位
     __u32, u32
32位
__s64, s64
 64位
     __u64, u64
64位

应用程序中可以使用带两条下划线的变量类型,但是并不是说所有设备驱动程序都使用这些数据类型,但是如果考虑可移植性,最好还是使用内核提供的数据类型。

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
沙发
 楼主| 发表于 2009-8-30 23:34:16 | 只看该作者

字节顺序

移植到其他平台时应注意正数字节顺序。存储正数数据时,不同的微处理器在内存中存放最小字节的位置也有所不同。有大端格式(big edian),小端格式(little endian)。

相关头文件位置(对于ARM平台):
arch/arm/include/asm/byteorder.h

其内容为
/*
*  arch/arm/include/asm/byteorder.h
*
* ARM Endian-ness.  In little endian mode, the data bus is connected such
* that byte accesses appear as:
*  0 = d0...d7, 1 = d8...d15, 2 = d16...d23, 3 = d24...d31
* and word accesses (data or instruction) appear as:
*  d0...d31
*
* When in big endian mode, byte accesses appear as:
*  0 = d24...d31, 1 = d16...d23, 2 = d8...d15, 3 = d0...d7
* and word accesses (data or instruction) appear as:
*  d0...d31
*/
#ifndef __ASM_ARM_BYTEORDER_H
#define __ASM_ARM_BYTEORDER_H

#ifdef __ARMEB__
#include <linux/byteorder/big_endian.h>        /*大端格式处理*/
#else
#include <linux/byteorder/little_endian.h>      /*小端格式处理*/
#endif

#endif
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-29 16:31 , Processed in 0.084781 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表