Files
cosyos/System/sv_create.h
T
零中断延迟的RTOS 63e86bc966 update System/sv_create.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2025-04-09 11:53:29 +00:00

282 lines
8.3 KiB
C

/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_create.h
* @brief 创建服务
* @details 用于创建 CosyOS 内核对象。
* @author 迟凯峰
* @version V1.2.1
* @date 2025.04.09
******************************************************************************/
#ifndef __SV_CREATE_H
#define __SV_CREATE_H
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 创建服务
\brief 用于创建 CosyOS 内核对象。
@{
*/
/*
* 声明任务
*/
/** 声明静态任务 */
#define sCSV_ExternTask(name) \
void name(void); \
extern s_tasknode_ts u_taskhand_##name; \
extern s_tasknode_tsp u_taskhandle_##name
/** 声明动态任务 */
#define dCSV_ExternTask(name) \
void name(void); \
extern s_taskhand_ts u_taskhand_##name; \
extern s_tasknode_tsp u_taskhandle_##name
/*
* 创建任务
*/
#if SYSCFG_DEBUGGING == __ENABLED__
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 静态创建,启用 DEBUGGING,启用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, res, srt, u_taskstack_##name, 0}; \
void name(void)
#else /** 静态创建,启用 DEBUGGING,禁用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, res, u_taskstack_##name, 0}; \
void name(void)
#endif
#else
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 静态创建,禁用 DEBUGGING,启用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, srt, u_taskstack_##name, 0}; \
void name(void)
#else /** 静态创建,禁用 DEBUGGING,禁用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, u_taskstack_##name, 0}; \
void name(void)
#endif
#endif
#if SYSCFG_DEBUGGING == __ENABLED__
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 动态创建,启用 DEBUGGING,启用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, res, srt}; \
void name(void)
#else /** 动态创建,启用 DEBUGGING,禁用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, res}; \
void name(void)
#endif
#else
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 动态创建,禁用 DEBUGGING,启用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, srt}; \
void name(void)
#else /** 动态创建,禁用 DEBUGGING,禁用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name}; \
void name(void)
#endif
#endif
/** 静态创建定时中断任务 */
#define sCSV_CreateTask_TimInt(tmid, arl, name, pri, tss, srt, res) \
s_tasknode_ts u_taskhand_##name; \
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 1, &u_taskhand_##name}; \
sCSV_CreateTask(name, pri, tss, srt, res)
/** 动态创建定时中断任务 */
#define dCSV_CreateTask_TimInt(tmid, arl, name, pri, tss, srt, res) \
s_taskhand_ts u_taskhand_##name; \
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 1, &u_taskhand_##name}; \
dCSV_CreateTask(name, pri, tss, srt, res)
/** 静态创建定时查询任务 */
#define sCSV_CreateTask_TimQry(tmid, event, arl, name, pri, tss, srt, res) \
bool u_timqryevent_##tmid(void) MCUCFG_C51USING {return (event ? true : false);} \
s_tasknode_ts u_taskhand_##name; \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, &u_taskhand_##name, u_timqryevent_##tmid}; \
sCSV_CreateTask(name, pri, tss, srt, res)
/** 动态创建定时查询任务 */
#define dCSV_CreateTask_TimQry(tmid, event, arl, name, pri, tss, srt, res) \
bool u_timqryevent_##tmid(void) MCUCFG_C51USING {return (event ? true : false);} \
s_taskhand_ts u_taskhand_##name; \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, &u_taskhand_##name, u_timqryevent_##tmid}; \
dCSV_CreateTask(name, pri, tss, srt, res)
/*
* 创建钩子
*/
/** 创建定时中断钩子 */
#define sCSV_CreateHook_TimInt(tmid, arl, name) \
void name(void); \
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 0, name}; \
void name(void) MCUCFG_C51USING
/** 创建定时查询钩子 */
#define sCSV_CreateHook_TimQry(tmid, event, arl, name) \
void name(void); \
bool u_timqryevent_##tmid(void) MCUCFG_C51USING {return (event ? true : false);} \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 0, name, u_timqryevent_##tmid}; \
void name(void) MCUCFG_C51USING
/*
* 互斥信号量
*/
/** 声明互斥信号量 */
#define sCSV_ExternMut(name) \
extern s_mutex_ts name
/** 创建互斥信号量 */
#define sCSV_CreateMut(name) \
s_mutex_ts name/**/sZeroInstall_Group
/*
* 二值信号量
*/
/** 声明二值信号量 */
#define sCSV_ExternBin(name) \
extern s_binary_ts name
/** 创建二值信号量 */
#define sCSV_CreateBin(name, init) \
s_binary_ts name = {OS_NULL, init}
/*
* 计数信号量
*/
/** 声明计数信号量 */
#define sCSV_ExternSem(name) \
extern s_semaph_ts name
/** 创建计数信号量 */
#define sCSV_CreateSem(name, init, max) \
s_semaph_ts name = {OS_NULL, init, max}
/*
* 飞信
*/
/** 声明信箱 */
#define sCSV_ExternTionbox(name) \
extern s_tionbox_ts name
/** 创建信箱 */
#define sCSV_CreateTionbox(name) \
s_tionbox_ts name/**/sZeroInstall_Group
/*
* 邮箱
*/
/** 声明邮箱 */
#define sCSV_ExternMailbox(name) \
extern s_mailbox_ts name
/** 创建邮箱 */
#define sCSV_CreateMailbox(name) \
s_mailbox_ts name/**/sZeroInstall_Group
/*
* 消息队列
*/
/** 声明静态队列 */
#define sCSV_ExternQueue_Static(name) \
extern ss_queue_ts name
/** 声明动态队列 */
#define sCSV_ExternQueue_Dynamic(name) \
extern sd_queue_ts name
/** 创建静态队列 */
#define sCSV_CreateQueue_Static(name, mode, len) \
void *u_queue_##name[len]; \
ss_queue_ts name = {OS_NULL, true, 0, __STATIC__, mode, len, u_queue_##name, u_queue_##name + len - 1, u_queue_##name}
/** 创建动态队列 */
#define sCSV_CreateQueue_Dynamic(name, mode, len) \
sd_queue_ts name = {OS_NULL, true, 0, __DYNAMIC__, mode, len, OS_NULL, OS_NULL}
/*
* 事件标志组(必须声明)
*/
/** 声明标志组 */
#define sCSV_ExternFlagGroup(name, bits) \
typedef struct{bits}u_##name##_ts; \
extern volatile u_##name##_ts name
/** 创建标志组 */
#define sCSV_CreateFlagGroup(name) \
volatile u_##name##_ts name
/*
* 线程内存
*/
/** 创建线程内存池 */
#define sCSV_CreateMempool() \
static s_thrmem_ts u_thrmem/**/sZeroInstall_Group
/** @} */
/** @} */
#endif