# MS-RTOS 数据类型

本章将介绍 MS-RTOS 开发用到的基础数据类型和宏定义。

# 基础数据类型

类型 描述
ms_bool_t 布尔类型
ms_uint8_t 8 位无符号整型
ms_uint16_t 16 位无符号整型
ms_uint32_t 32 位无符号整型
ms_uint64_t 64 位无符号整型
ms_int8_t 8 位有符号整型
ms_int16_t 16 位有符号整型
ms_int32_t 32 位有符号整型
ms_int64_t 64 位有符号整型
ms_size_t 32 位无符号大小类型
ms_ssize_t 32 位有符号大小类型
ms_ptr_t 指针类型,MS_NULL 为空指针
ms_const_ptr_t const 指针类型,MS_NULL 为空指针
ms_ulong_t 无符号 long 类型
ms_long_t 有符号 long 类型
ms_ullong_t 无符号 long long 类型
ms_llong_t 有符号 long long 类型

# ms_bool_t

布尔类型,可取的值为以下的宏:

含义
MS_TRUE
MS_FALSE

# 其它数据类型

类型 描述
ms_err_t 32 位错误码类型
ms_stack_t 堆栈类型
ms_addr_t 地址类型
ms_func_t 无参数无返回值的函数指针类型
ms_callback_t 有参数无返回值的回调函数指针类型
ms_printf_func_t printf 格式打印函数指针类型
ms_handle_t 32 位句柄、ID 号类型,MS_HANDLE_INVALID 为无效的句柄、ID 号
ms_index_t 16 位资源索引类型
ms_prio_t 8 位的优先级类型,有效范围 0 - 254,数字越小,优先级越高,MS_PRIO_INVALID 为无效的优先级
ms_ipc_opt_t IPC 对象选项
ms_pid_t 8 位的进程号类型,有效范围 0 - 254MS_PID_KERN 为内核线程的进程号,MS_PID_INVALID 为无效的进程号
ms_arch_sr_t CPU 状态寄存器类型
ms_mem_region_t 内存区域类型
ms_mem_layout_t 内存布局类型

# ms_func_t

无参数无返回值的函数指针类型:

typedef void (*ms_func_t)(void);

# ms_callback_t

有参数无返回值的回调函数指针类型:

typedef void (*ms_callback_t)(ms_ptr_t arg);

# ms_printf_func_t

printf 格式打印函数指针类型:

typedef void (*ms_printf_func_t)(const char *fmt, ...) MS_PRINTF_ATTR;

# ms_ipc_opt_t

IPC 对象选项类型,可取的值为以下的宏:

含义
MS_WAIT_TYPE_PRIO 按优先级高低规则等待
MS_WAIT_TYPE_FIFO 按先来先服务规则等待
MS_IPC_OPT_PROCESS 进程私有的 IPC 对象
MS_IPC_OPT_SHARE 进程间共享的 IPC 对象

# ms_arch_sr_t

CPU 状态寄存器类型用于关闭与恢复 CPU 中断,用于以下接口:

ms_arch_sr_t ms_arch_int_disable(void);
void ms_arch_int_resume(ms_arch_sr_t sr);

# ms_mem_region_t

内存区域类型是一个结构体:

typedef struct {
    ms_addr_t   base;
    ms_size_t   size;
} ms_mem_region_t;
参数 说明
base 内存区域的基地址
size 内存区域的大小

# ms_mem_layout_t

内存布局类型是一个内存区域类型的数组:

typedef ms_mem_region_t ms_mem_layout_t;

#

MS-RTOS 定义了一些十分有用的宏:

含义
MS_ARCH_CPU_BITS CPU 位宽
MS_ARCH_STK_ALIGNMENT 堆栈对齐要求
MS_ARCH_STK_MIN_SIZE 堆栈空间的最小值
MS_ARCH_CACHE_LINE_SIZE D-CACHE 行大小
MS_ARCH_DCACHE_LINE_SIZE D-CACHE 行大小
MS_ARCH_ICACHE_LINE_SIZE I-CACHE 行大小
MS_ARCH_IDLE() CPU 进入空闲状态
MS_ARCH_ISB() 指令屏障
MS_ARCH_MB() 内存屏障
MS_ARCH_RMB() 读内存屏障
MS_ARCH_WMB() 写指令屏障
MS_ARCH_NOP() NOP 指令
MS_WEAK 弱符号
MS_PRINTF_ATTR printf 格式打印函数属性
MS_SNPRINTF_ATTR snprintf 格式打印函数属性
MS_PRINTK_ATTR ms_printk 格式打印函数属性
MS_LOG_ATTR ms_log 格式打印函数属性
MS_HEAP_ALIGNMENT 内存堆分配内存的对齐要求
MS_STRUCT_PACK_BEGIN pack 紧排结构体开始
MS_STRUCT_PACK_END pack 紧排结构体结束
MS_STRUCT_PACK_FIELD(field) pack 紧排结构体成员
MS_STRUCT_PACK_STRUCT pack 紧排结构体
MS_ALIGN_ATTR(var, alignment) 定义一个地址对齐的变量
MS_FORCE_INLINE 强制内联函数
MS_SHELL_CMD(_name, _func, _help, var_name) 定义一条 shell 命令(仅内核空间可用)
MS_BIT(bit)
MS_ARRAY_SIZE(array) 数组的大小
MS_ROUND_UP(x, align) 向上圆整
MS_ROUND_DOWN(x, align) 向下圆整
MS_IS_ALIGNED(x, align) 判断是否对齐
MS_IS_POWER_OF_2(x) 判断是否为 2 的次方
MS_MIN(a, b) 最小值
MS_MAX(a, b) 最大值
MS_TICK_PER_SEC 每秒的 tick 数
MS_MS_PER_SEC 每秒的毫秒数
MS_US_PER_SEC 每秒的微秒数
MS_NS_PER_SEC 每秒的纳秒数
MS_US_PER_MS 每毫秒的微秒数
MS_NS_PER_MS 每毫秒的纳秒数
MS_NS_PER_US 每微秒的纳秒数
MS_NS_PER_TICK 每 tick 的纳秒数
MS_MS_TO_TICK(ms) 毫秒数转 tick 数
MS_TICK_TO_MS(tick) tick 数转毫秒数
MS_CONTAINER_OF(entry, type, member) 通过成员地址获得容器(结构体)的地址

# MS_STRUCT_PACK_???

使用 MS_STRUCT_PACK_??? 宏定义一个 pack 紧排结构体的方式如下:

MS_STRUCT_PACK_BEGIN
struct xxx {
    MS_STRUCT_PACK_FIELD(ms_uint32_t yyy);
} MS_STRUCT_PACK_STRUCT;
MS_STRUCT_PACK_END

# MS_SHELL_CMD

使用 MS_SHELL_CMD 宏定义一条内核命令的方式如下:

#include "ms_shell.h"

/**
 * @brief xxx command.
 *
 * @param[in] argc    Arguments count
 * @param[in] argv    Arguments array
 * @param[in] io      Pointer to shell io driver
 *
 * @return N/A
 */
static void __ms_shell_xxx(int argc, char *argv[], const ms_shell_io_t *io)
{
    /* do some thing */
}
MS_SHELL_CMD(xxx, __ms_shell_xxx, "xxx", __ms_shell_cmd_xxx);

# 汇编文件使用的宏

针对汇编文件,MS-RTOS 还提供了以下的宏定义:

含义
FILE_BEGIN 汇编文件的开始
FILE_END 汇编文件的结尾
ENTRY(name) 汇编函数入口
ENDPROC(name) 汇编函数结尾
LABEL(label) 定义行标签