Files
cosyos/System/sv_create.h
零中断延迟的RTOS 7d8fa7f232 update 内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-02-03 07:05:55 +00:00

289 lines
8.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_create.h
* @brief 创建服务
* @details 用于创建 CosyOS 内核对象。
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#ifndef __SV_CREATE_H
#define __SV_CREATE_H
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 创建服务
\brief 用于创建 CosyOS 内核对象。
@{
*/
/*
* 声明任务
*/
/** 简化声明静态任务 */
#define sCSV_ExtTask(name) \
extern s_tasknode_ts u_taskhand_##name; \
void u_task_##name
/** 简化声明动态任务 */
#define dCSV_ExtTask(name) \
extern s_taskhand_ts u_taskhand_##name; \
void u_task_##name
/** 完整声明静态任务 */
#define sCSV_ExternTask(name) \
extern s_tasknode_tsp name; \
sCSV_ExtTask(name)
/** 完整声明动态任务 */
#define dCSV_ExternTask(name) \
extern s_tasknode_tsp name; \
dCSV_ExtTask(name)
/*
* 创建任务
*/
#if (SYSCFG_DEBUGGING == __ENABLED__)
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
/** 静态创建,启用 DEBUGGING启用 安全运行时 */
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &name, ety, res, srt, u_taskstack_##name, 0}
#else /** 静态创建,启用 DEBUGGING禁用 安全运行时 */
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &name, ety, res, u_taskstack_##name, 0}
#endif
#else
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
/** 静态创建,禁用 DEBUGGING启用 安全运行时 */
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &name, ety, srt, u_taskstack_##name, 0}
#else /** 静态创建,禁用 DEBUGGING禁用 安全运行时 */
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &name, ety, u_taskstack_##name, 0}
#endif
#endif
#if (SYSCFG_DEBUGGING == __ENABLED__)
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
/** 动态创建,启用 DEBUGGING启用 安全运行时 */
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &name, ety, res, srt}
#else /** 动态创建,启用 DEBUGGING禁用 安全运行时 */
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &name, ety, res}
#endif
#else
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
/** 动态创建,禁用 DEBUGGING启用 安全运行时 */
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &name, ety, srt}
#else /** 动态创建,禁用 DEBUGGING禁用 安全运行时 */
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &name, ety}
#endif
#endif
/** 静态创建一般任务 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void u_task_##name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
sCSV_CreateTask_0(name, pri, tss, srt, res, u_task_##name); \
void u_task_##name(void) MCUCFG_TASK_ATTRIBUTE
/** 动态创建一般任务 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void u_task_##name(void); \
s_tasknode_tsp name = OS_NULL; \
dCSV_CreateTask_0(name, pri, tss, srt, res, u_task_##name); \
void u_task_##name(void) MCUCFG_TASK_ATTRIBUTE
/** 静态创建私信任务 */
#define sCSV_CreateTaskmsg(name, pri, tss, srt, res, ntm) \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
sCSV_CreateTask_0(name, pri, tss, srt, res, OS_NULL); \
void u_task_##name sCreateTaskMsg_##ntm
/** 动态创建私信任务 */
#define dCSV_CreateTaskmsg(name, pri, tss, srt, res, ntm) \
s_tasknode_tsp name = OS_NULL; \
dCSV_CreateTask_0(name, pri, tss, srt, res, OS_NULL); \
void u_task_##name sCreateTaskMsg_##ntm
/** for 定时任务 */
#if defined ( __GNUC__ )
#define s_hookorhand_hand(p) .hand=(s_taskhand_tsp)p
#define s_hookorhand_hook(p) .hook=p
#else
#define s_hookorhand_hand(p) (s_voidvoid_tfp)p
#define s_hookorhand_hook(p) p
#endif
#define OS_TIMQRYINIT (s_timqry_t)(SYSCFG_USERTIMQRYINIT - 1) /*!< 定时查询初始值 */
/** 静态创建定时中断任务 */
#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, {s_hookorhand_hand(&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, {s_hookorhand_hand(&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_OSIT_ATTRIBUTE {return (event ? true : false);} \
s_tasknode_ts u_taskhand_##name; \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, {s_hookorhand_hand(&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_OSIT_ATTRIBUTE {return (event ? true : false);} \
s_taskhand_ts u_taskhand_##name; \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, {s_hookorhand_hand(&u_taskhand_##name)}, u_timqryevent_##tmid}; \
dCSV_CreateTask(name, pri, tss, srt, res)
/*
* 创建钩子
*/
/** 创建定时中断钩子 */
#define sCSV_CreateHook_TimInt(tmid, arl) \
void u_timint_##tmid(void); \
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 0, {s_hookorhand_hook(u_timint_##tmid)}}; \
void u_timint_##tmid(void) MCUCFG_OSIT_ATTRIBUTE
/** 创建定时查询钩子 */
#define sCSV_CreateHook_TimQry(tmid, event, arl) \
void u_timqry_##tmid(void); \
bool u_timqryevent_##tmid(void) MCUCFG_OSIT_ATTRIBUTE {return (event ? true : false);} \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 0, {s_hookorhand_hook(u_timqry_##tmid)}, u_timqryevent_##tmid}; \
void u_timqry_##tmid(void) MCUCFG_OSIT_ATTRIBUTE
/*
* 互斥信号量
*/
/** 声明互斥信号量 */
#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 s_staque_ts name
/** 声明动态队列 */
#define sCSV_ExternQueue_Dynamic(name) \
extern s_dynque_ts name
/** 创建静态队列 */
#define sCSV_CreateQueue_Static(name, mode, len) \
void *u_queue_##name[len]; \
s_staque_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) \
s_dynque_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