基本数据类型是每一个跨平台的软件设计所必须要考虑到的,基本数据类型的目的主要是为了可以移植性。比如,如何写出windows上和linux下共同能编译运行的代码呢?除了使用标准的c语言外,基本数据类型是必须要考虑到的不可缺的因素。
所以跨平台的软件需要考虑跨编译器的移植,还有需要考虑到64位编译器的兼容性。
raw os的基本类型数据定义在raw_type.h。具体数据类型如下:
1 RAW_S8 有符号的单字节类型。 2 RAW_BOOLEAN boolean数据 3 RAW_U8 无符号的单字节类型 4 RAW_U16 无符号的双字节类型 5 RAW_S16 有符号的双字节类型 6 RAW_U32 无符号的4字节类型 7 RAW_S32 有符号的4字节类型 8 RAW_S64 有符号的8字节类型 9 RAW_U64 无符号的8字节类型 10 PORT_STACK 栈元素的基本数据类型 11 RAW_PROCESSOR_INT 处理器的有符号的最大宽度 12 RAW_PROCESSOR_UINT 处理器的无符号的最大宽度
以上的基本类型数据需要在不同的编译器里重新定义,来达到移植的目的。
需要说明的是RAW_PROCESSOR_INT和RAW_PROCESSOR_UINT,RAW_PROCESSOR_INT 在32位的处理器上是有符号的4字节类型,RAW_PROCESSOR_UINT在32位的处理器上是无符号的4字节类型。在64位的处理器上,RAW_PROCESSOR_INT和RAW_PROCESSOR_UINT分别是8字节的有符号数和无符号数类型。
为了全面兼容64位的处理器,raw os 还有一个内部定义的数据类型,主要定义在raw_internal_type.h中。具体涉及的数据类型如下:
RAW_INTERNAL_NO_WAIT RAW_INTERNAL_WAIT_FOREVER RAW_TICK_TYPE MSG_SIZE_TYPE
这些定义类型在32位处理器中是不需要去修改的,只有到了64位处理器才有必要去修改。 举例说明如下: #define RAW_INTERNAL_WAIT_FOREVER 0xffffffffu/*32 bit value, if RAW_TICK_TYPE is 64 bit, you need change it to 64 bit*/ 上面定义的是在32位平台下的值。如果是64位平台下的话,这个值会定义为: #define RAW_INTERNAL_WAIT_FOREVER 0xffffffffffffffffu 又如以下是32位平台下定义的值: typedef RAW_U32 RAW_TICK_TYPE; /*32 bit or 64bit unsigned value*/ 64位平台下定义的值是: typedef RAW_U64 RAW_TICK_TYPE; /*32 bit or 64bit unsigned value*/
又如以下类型定义: typedef RAW_U8 TASK_0_EVENT_TYPE; /*8 bit ,16bit or 32 bit unsigned value*/ typedef RAW_U32 MSG_SIZE_TYPE; /*32 bit or 64 bit unsigned value*/
以上定义主要是为了程序数据量的可拓展性,经过加了一层define, 可以使得用户自定义的数据类型得到充分扩展,非常的灵活。
综上所述,设计跨平台的软件,基本数据类型的设计好坏,是对整个软件架构举足轻重的,不但要考虑到跨平台的移植,也需要考虑到64位平台的兼容。
[ 本帖最后由 jorya_txj 于 2013-9-21 08:40 编辑 ]
|