MS-RTOS 数据类型

更新时间:
2023-08-09
下载文档

MS-RTOS 数据类型

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

基础数据类型

类型描述
ms_bool_t布尔类型
ms_uint8_t8 位无符号整型
ms_uint16_t16 位无符号整型
ms_uint32_t32 位无符号整型
ms_uint64_t64 位无符号整型
ms_int8_t8 位有符号整型
ms_int16_t16 位有符号整型
ms_int32_t32 位有符号整型
ms_int64_t64 位有符号整型
ms_size_t32 位无符号大小类型
ms_ssize_t32 位有符号大小类型
ms_ptr_t指针类型,MS_NULL 为空指针
ms_const_ptr_tconst 指针类型,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_t32 位错误码类型
ms_stack_t堆栈类型
ms_addr_t地址类型
ms_func_t无参数无返回值的函数指针类型
ms_callback_t有参数无返回值的回调函数指针类型
ms_printf_func_tprintf 格式打印函数指针类型
ms_handle_t32 位句柄、ID 号类型,MS_HANDLE_INVALID 为无效的句柄、ID 号
ms_index_t16 位资源索引类型
ms_prio_t8 位的优先级类型,有效范围 0 - 254,数字越小,优先级越高,MS_PRIO_INVALID 为无效的优先级
ms_ipc_opt_tIPC 对象选项
ms_pid_t8 位的进程号类型,有效范围 0 - 254,MS_PID_KERN 为内核线程的进程号,MS_PID_INVALID 为无效的进程号
ms_arch_sr_tCPU 状态寄存器类型
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_BITSCPU 位宽
MS_ARCH_STK_ALIGNMENT堆栈对齐要求
MS_ARCH_STK_MIN_SIZE堆栈空间的最小值
MS_ARCH_CACHE_LINE_SIZED-CACHE 行大小
MS_ARCH_DCACHE_LINE_SIZED-CACHE 行大小
MS_ARCH_ICACHE_LINE_SIZEI-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_ATTRprintf 格式打印函数属性
MS_SNPRINTF_ATTRsnprintf 格式打印函数属性
MS_PRINTK_ATTRms_printk 格式打印函数属性
MS_LOG_ATTRms_log 格式打印函数属性
MS_HEAP_ALIGNMENT内存堆分配内存的对齐要求
MS_STRUCT_PACK_BEGINpack 紧排结构体开始
MS_STRUCT_PACK_ENDpack 紧排结构体结束
MS_STRUCT_PACK_FIELD(field)pack 紧排结构体成员
MS_STRUCT_PACK_STRUCTpack 紧排结构体
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)定义行标签
文档内容是否对您有所帮助?
有帮助
没帮助