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 - 254,MS_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) | 定义行标签 |




陕公网安备61019002002605号