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