lulu爱 发表于 2013-11-3 18:03:46

高效实时操作系原理以及实践-raw os 的基本数据类型

raw os 的基本数据类型


基本数据类型是每一个跨平台的软件设计所必须要考虑到的,基本数据类型的目的主要是为了可以移植性。比如,如何写出windows上和linux下共同能编译运行的代码呢?除了使用标准的c语言外,基本数据类型是必须要考虑到的不可缺的因素。

所以跨平台的软件需要考虑跨编译器的移植,还有需要考虑到64位编译器的兼容性。

raw os的基本类型数据定义在raw_type.h。具体数据类型如下:

1RAW_S8            有符号的单字节类型。
2RAW_BOOLEAN         boolean数据
3RAW_U8            无符号的单字节类型
4RAW_U16             无符号的双字节类型
5RAW_S16             有符号的双字节类型
6RAW_U32             无符号的4字节类型
7RAW_S32             有符号的4字节类型
8RAW_S64             有符号的8字节类型
9RAW_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 64 bit unsigned value*/

64位平台下定义的值是:
typedef RAW_U64 RAW_TICK_TYPE;/*32 bit or 64 bit unsigned value*/


又如以下类型定义:

typedef RAW_U8TASK_0_EVENT_TYPE; /*8 bit ,16 bit or 32 bit unsigned value*/
typedef RAW_U32 MSG_SIZE_TYPE; /*32 bit or 64 bit unsigned value*/


以上定义主要是为了程序数据量的可拓展性,经过加了一层define, 可以使得用户自定义的数据类型得到充分扩展,非常的灵活。


综上所述,设计跨平台的软件,基本数据类型的设计好坏,是对整个软件架构举足轻重的,不但要考虑到跨平台的移植,也需要考虑到64位平台的兼容。


raw os 官网地址为:www.raw-os.org
页: [1]
查看完整版本: 高效实时操作系原理以及实践-raw os 的基本数据类型