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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛世危言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值