XWOS标准

XWOS的基本类型、概念、习惯

基本类型

XWOS的所有可以确定位宽的数据类型被称为 基本数据类型 ,定义如下:

  • xwu8_t 8位无符号整数
  • xws8_t 8位有符号整数
  • xwu16_t 16位无符号整数
  • xws16_t 16位有符号整数
  • xwu32_t 32位无符号整数
  • xws32_t 32位有符号整数
  • xwu64_t 64位无符号整数
  • xws64_t 64位有符号整数
  • xwsz_t 大小值(无符号)
  • xwssz_t 大小值(有符号)
  • xwstk_t 栈帧(无符号),必须与指针位宽一致
  • xwptr_t 指针的整数值(无符号),必须与指针位宽一致
  • xwreg_t 寄存器(无符号),必须与指针位宽一致
  • xwsreg_t 寄存器(有符号),必须与指针位宽一致
  • xwer_t 错误码(有符号),必须与指针位宽一致
  • xwsq_t 序列值/位置/偏移(无符号),必须与指针位宽一致
  • xwssq_t 序列值/位置/偏移(有符号),必须与指针位宽一致
  • xwsid_t ID(有符号),必须与指针位宽一致
  • xwid_t ID(无符号),必须与指针位宽一致
  • typedef void (* xwisr_f)(void) 中断向量(函数指针)
  • xwirq_t 中断号(有符号),负的中断号表示系统异常,正的中断号表示外部中断
  • xwpr_t 优先级(有符号)
  • xwbmp_t 位图(无符号)
  • xwtm_t 时间(64位有符号整数,单位:纳秒)
  • xwlfq_t 无锁队列
  • typedef void (* ctor_f)(void * /*obj*/) 构造函数
  • typedef void (* dtor_f)(void * /*obj*/) 析构函数
  • typedef xws64_t (* xwsc_f)(void * /*arg*/, ...) 系统调用

数据类型命名习惯

用户在阅读XWOS源码时,要注意以下几个命名习惯的隐含意义:

  • 对于比较小的数据结构,XWOS会通过 typedef 定义成一种类型。这种类型就像基本数据类型一样, 在函数间传递参数时是直接传递,不会使用 type * 去传递指针,除非是返回数据。
    • 命名通常是 type_t 的形式,函数指针则为 type_f 的形式,对象描述符 则为 xwobj_d
  • 对于比较大的结构体,XWOS使用关键字 struct 定义。XWOS代码中不会省略关键字 struct 。 目的是提醒读者这是一个结构体,将它作为参数传递时是通过传递指针来引用数据。

原子类型

所有基本数据类型增加前缀 atomic_ 表示此类型的原子类型。例如: _Atomic xwsq_t 等价于 __xwcc_atomic xwsq_t 等价于 atomic_xwsq_t。 原子类型的变量可以使用XWOS的 原子操作库 来操作,也可以使用标准C头文件 <stdatomic.h> 中定义的函数来操作。

系统位数

XWOS内核支持32位与64位两种CPU。

时间

XWOS内核使用64位有符号整数 xwtm_t 表示时间,单位为纳秒。并提供一系列操作函数。

详细参考头文件 xwos/osal/time.h

对象

xwos_object 是XWOS所有对象的父类。

对象描述符

对象描述符 是XWOS为了解决对象野指针问题而引入的机制。

调度器

XWOS会为每个CPU创建独立的 调度器,每个调度器 独立调度线程,且都有一个私有的滴答定时器。

滴答定时器

为调度器产生固定频率中断的硬件定时器。

线程

调度器内的基本调度单位为 线程 ,因此线程是与调度器绑定的。

软件定时器

基于调度器的滴答定时器实现的 软件定时器 也是与调度器绑定的。

XWOS的锁机制有:

  • 互斥锁 :防止两个 线程 竞争内存数据的锁。
  • 自选锁 :可防止任意上下文竞争内存数据的锁。
  • 顺序锁 :自选锁的改良锁,可分为读锁和写锁,读锁可共享,写锁独占。

同步机制

XWOS的 基本同步机制

通讯机制

基于 基本同步机制 ,XWOS的中间件XWMD提供了线程间的通讯机制:

内存管理

XWOS的内核提供了多种动态 内存管理 的方法。

电源管理

XWOS的内核为 电源管理 ,提供了一套基本的流程。