LiteOS学习笔记二
前言
LiteOS有一套自定义的基础数据类型。余以为和苹果的 IOS 基础类型命名高度相似。因为有别于 C 语言中常用的类型名,学习 LiteOS 有必要先熟悉这些自定义的基础类型。
一、LiteOS 基础数据类型定义位置
LiteOS 同时可支持64位和32位的处理器,不同处理器相关的基础数据类型都定义在 kernel/include/los_typedef.h 文件中。
二、支持 C++ 兼容
为了支持 C++ 兼容,LiteOS 的大多数 C 源文件和头文件中都存在以下几行声明
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
进行上述声明后,该文件中的接口就可以直接被 C++ 所使用。
三、LiteOS 32位处理器相关的基础类型定义
/* type definitions */
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;
typedef signed char INT8;
typedef signed short INT16;
typedef signed int INT32;
typedef float FLOAT;
typedef double DOUBLE;
typedef char CHAR;
typedef unsigned long long UINT64;
typedef signed long long INT64;
typedef unsigned int UINTPTR;
typedef signed int INTPTR;
#ifndef LOSCFG_LIB_LIBC
typedef INT32 ssize_t;
typedef UINT32 size_t;
#endif
32 位处理器支持的C编译器中把 long 定义成 32 bit,所以此时用 long long 表示一个 64 位数据类型。
四、 LiteOS 64位处理器相关的基础类型定义
/* type definitions */
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;
typedef signed char INT8;
typedef signed short INT16;
typedef signed int INT32;
typedef float FLOAT;
typedef double DOUBLE;
typedef char CHAR;
#ifdef __LP64__
typedef long unsigned int UINT64;
typedef long signed int INT64;
typedef unsigned long UINTPTR;
typedef signed long INTPTR;
typedef __uint128_t UINT128;
#define LOSCFG_AARCH64
#ifndef LOSCFG_LIB_LIBC
typedef INT64 ssize_t;
typedef UINT64 size_t;
#endif
64 位处理器支持的C编译器中把 long 定义成 64 bit,所以此时用 long unsigned int 可表示一个 64 位无符号整型。
五、 LiteOS 通用的基础类型定义
typedef volatile INT32 Atomic;
typedef volatile INT64 Atomic64;
#define VOID void
#define STATIC static
#ifndef FALSE
#define FALSE 0U /* 无符号整型数0 */
#endif
#ifndef TRUE
#define TRUE 1U /* 无符号整型数1 */
#endif
#ifndef NULL
#define NULL ((VOID *)0) /* 空指针初始化 */
#endif
#ifdef YES
#undef YES
#endif
#define YES 1
#ifdef NO
#undef NO
#endif
#define NO 0
#define OS_NULL_BYTE ((UINT8)0xFF) /* 八位清零 */
#define OS_NULL_SHORT ((UINT16)0xFFFF) /* 十六位清零 */
#define OS_NULL_INT ((UINT32)0xFFFFFFFF) /* 三十二位清零 */
#ifndef LOS_OK
#define LOS_OK 0 /* 常用于作指示操作成功的返回值 */
#endif
#ifndef LOS_NOK
#define LOS_NOK 1 /* 常用于作指示操作失败的返回值 */
#endif
#ifndef LOS_USED
#define LOS_USED 1 /* 常用于作指示函数已被调用的返回值 */
#endif
#ifndef LOS_UNUSED
#define LOS_UNUSED 0 /* 常用于作指示函数未被调用的返回值 */
#endif
#define OS_FAIL 1 /* 常用于作指示系统级错误的返回值 */
#define OS_ERROR (UINT32)(-1) /* 常用于作指示一般错误的返回值 */
#define OS_INVALID (UINT32)(-1) /* 常用于作指示非法错误的返回值 */
#define asm __asm /* 用于调用内联汇编指令 */
#ifdef typeof
#undef typeof
#endif
#define typeof __typeof__
#ifndef LOS_LABEL_DEFN
#define LOS_LABEL_DEFN(label) label /* 常用于系统标签赋值 */
#endif
#ifndef LOSARC_ALIGNMENT
#define LOSARC_ALIGNMENT 8 /* 常用于字节对齐 */
#endif
/* And corresponding power of two alignment */
#ifndef LOSARC_P2ALIGNMENT
#ifdef LOSCFG_AARCH64
#define LOSARC_P2ALIGNMENT 3 /* 常用于2的幂对齐 */
#else
#define LOSARC_P2ALIGNMENT 2
#endif
#endif