mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-05 11:29:44 +08:00
288
System/sv_create.h
Normal file
288
System/sv_create.h
Normal file
@@ -0,0 +1,288 @@
|
|||||||
|
/**************************************************************************//**
|
||||||
|
* @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
|
||||||
1967
System/ur_api.h
Normal file
1967
System/ur_api.h
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user