Files
cosyos/System/os_redef.h
零中断延迟的RTOS ddbec84cbc update 内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-02-01 18:58:41 +00:00

681 lines
22 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 os_redef.h
* @brief 系统重定义
* @details 基于 os_def.h、os_base.h、syscfg.h、mcucfg_x.h、port_x.h 等文件
中的定义而再次定义,包括宏定义和类型定义。
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#ifndef __OS_REDEF_H
#define __OS_REDEF_H
/*------------------------------------------------------------------------------
* INCLUDE */
#include <stdlib.h>
#include "os_def.h"
#include "syscfg.h"
#include sDefStr(sCat2Str(port_, SYSCFG_MCUCORE.h))
/*------------------------------------------------------------------------------
* ZERO-INSTALL */
#if (MCUCFG_OSZEROINSTALL == __ENABLED__)
#define sZeroInstall = 0
#define sZeroInstall_Group = {0}
#else
#define sZeroInstall
#define sZeroInstall_Group
#endif
/*------------------------------------------------------------------------------
* OS-NOP */
#define OS_NOPx1 __NOP()
#define OS_NOPx2 OS_NOPx1; OS_NOPx1
#define OS_NOPx3 OS_NOPx2; OS_NOPx1
#define OS_NOPx4 OS_NOPx3; OS_NOPx1
#define OS_NOPx5 OS_NOPx4; OS_NOPx1
#define OS_NOPx6 OS_NOPx5; OS_NOPx1
#define OS_NOPx7 OS_NOPx6; OS_NOPx1
#define OS_NOPx8 OS_NOPx7; OS_NOPx1
#define OS_NOP(n) sCat2Str(OS_NOPx, n)
/*------------------------------------------------------------------------------
* TOTAL */
#if (SYSCFG_TIMESLOTBITS >= 1 && SYSCFG_TIMESLOTBITS <= 8)
#define OS_TIMESLOTBITS SYSCFG_TIMESLOTBITS
#elif (SYSCFG_TIMESLOTBITS == 251 || SYSCFG_TIMESLOTBITS == 253 || SYSCFG_TIMESLOTBITS == 256)
#define __OS_TIMESLOTNUM (SYSCFG_TASKPRIORITY * (SYSCFG_SAMEPRISCHEDULE ? 3 : 1)) / (SYSCFG_TIMESLOTBITS - 250)
#if (__OS_TIMESLOTNUM >= (128 + 64))
#define OS_TIMESLOTBITS 8
#elif (__OS_TIMESLOTNUM >= (64 + 32))
#define OS_TIMESLOTBITS 7
#elif (__OS_TIMESLOTNUM >= (32 + 16))
#define OS_TIMESLOTBITS 6
#elif (__OS_TIMESLOTNUM >= (16 + 8))
#define OS_TIMESLOTBITS 5
#elif (__OS_TIMESLOTNUM >= (8 + 4))
#define OS_TIMESLOTBITS 4
#elif (__OS_TIMESLOTNUM >= (4 + 2))
#define OS_TIMESLOTBITS 3
#elif (__OS_TIMESLOTNUM >= (2 + 1))
#define OS_TIMESLOTBITS 2
#else
#define OS_TIMESLOTBITS 1
#endif
#else
#error 参数非法 of 延时定时器时间轮槽数!
#endif
#define OS_TIMESLOTNUM (1UL << OS_TIMESLOTBITS)
#define OS_TIMINTTOTAL SYSCFG_USERTIMINTTOTAL /*!< 定时中断总数 */
#if (SYSCFG_DEBUGGING == __DISABLED__)
#define OS_TIMQRYTOTAL SYSCFG_USERTIMQRYTOTAL /*!< 定时查询总数 */
#else
#define OS_TIMQRYTOTAL (SYSCFG_USERTIMQRYTOTAL + 2)
/*------------------------------------------------------------------------------
* TMID定时器ID*/
#define OS_TMID_DEBUGGER SYSCFG_USERTIMQRYTOTAL /*!< TMID of Debugger */
/** TMID of Taskmgr */
#if (OS_TIMQRYTOTAL == 2)
#define OS_TMID_TASKMGR 1
#elif (OS_TIMQRYTOTAL == 3)
#define OS_TMID_TASKMGR 2
#elif (OS_TIMQRYTOTAL == 4)
#define OS_TMID_TASKMGR 3
#elif (OS_TIMQRYTOTAL == 5)
#define OS_TMID_TASKMGR 4
#elif (OS_TIMQRYTOTAL == 6)
#define OS_TMID_TASKMGR 5
#elif (OS_TIMQRYTOTAL == 7)
#define OS_TMID_TASKMGR 6
#elif (OS_TIMQRYTOTAL == 8)
#define OS_TMID_TASKMGR 7
#elif (OS_TIMQRYTOTAL == 9)
#define OS_TMID_TASKMGR 8
#elif (OS_TIMQRYTOTAL == 10)
#define OS_TMID_TASKMGR 9
#elif (OS_TIMQRYTOTAL == 11)
#define OS_TMID_TASKMGR 10
#elif (OS_TIMQRYTOTAL == 12)
#define OS_TMID_TASKMGR 11
#elif (OS_TIMQRYTOTAL == 13)
#define OS_TMID_TASKMGR 12
#elif (OS_TIMQRYTOTAL == 14)
#define OS_TMID_TASKMGR 13
#elif (OS_TIMQRYTOTAL == 15)
#define OS_TMID_TASKMGR 14
#elif (OS_TIMQRYTOTAL == 16)
#define OS_TMID_TASKMGR 15
#elif (OS_TIMQRYTOTAL == 17)
#define OS_TMID_TASKMGR 16
#elif (OS_TIMQRYTOTAL == 18)
#define OS_TMID_TASKMGR 17
#elif (OS_TIMQRYTOTAL == 19)
#define OS_TMID_TASKMGR 18
#elif (OS_TIMQRYTOTAL == 20)
#define OS_TMID_TASKMGR 19
#elif (OS_TIMQRYTOTAL == 21)
#define OS_TMID_TASKMGR 20
#elif (OS_TIMQRYTOTAL == 22)
#define OS_TMID_TASKMGR 21
#elif (OS_TIMQRYTOTAL == 23)
#define OS_TMID_TASKMGR 22
#elif (OS_TIMQRYTOTAL == 24)
#define OS_TMID_TASKMGR 23
#elif (OS_TIMQRYTOTAL == 25)
#define OS_TMID_TASKMGR 24
#elif (OS_TIMQRYTOTAL == 26)
#define OS_TMID_TASKMGR 25
#elif (OS_TIMQRYTOTAL == 27)
#define OS_TMID_TASKMGR 26
#elif (OS_TIMQRYTOTAL == 28)
#define OS_TMID_TASKMGR 27
#elif (OS_TIMQRYTOTAL == 29)
#define OS_TMID_TASKMGR 28
#elif (OS_TIMQRYTOTAL == 30)
#define OS_TMID_TASKMGR 29
#elif (OS_TIMQRYTOTAL == 31)
#define OS_TMID_TASKMGR 30
#elif (OS_TIMQRYTOTAL == 32)
#define OS_TMID_TASKMGR 31
#elif (OS_TIMQRYTOTAL == 33)
#define OS_TMID_TASKMGR 32
#elif (OS_TIMQRYTOTAL == 34)
#define OS_TMID_TASKMGR 33
#endif
#endif
/*------------------------------------------------------------------------------
* Time Sharing时间片*/
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__)
#if (SYSCFG_TIMESHARINGMODE == 0)
#define OS_TIMESHARING(htask) SYSCFG_GLOBALTIMESHARING
#define OS_TIMESHARING_MAX SYSCFG_GLOBALTIMESHARING
#define OS_TIMESHARING_MIN SYSCFG_GLOBALTIMESHARING
#elif (SYSCFG_TIMESHARINGMODE == 1)
#define OS_TIMESHARING(htask) SYSCFG_FORMULATIMESHARING(htask->pri)
#define OS_TIMESHARING_MAX SYSCFG_FORMULATIMESHARING(0)
#define OS_TIMESHARING_MIN SYSCFG_FORMULATIMESHARING(SYSCFG_TASKPRIORITY - 1)
#elif (SYSCFG_TIMESHARINGMODE == 2)
#define OS_TIMESHARING(htask) s_time_sharing[htask->pri]
#define OS_TIMESHARING_MAX SYSCFG_TIMESHARING_MAX
#define OS_TIMESHARING_MIN 1
#endif
#if (OS_TIMESHARING_MIN == 0 || OS_TIMESHARING_MAX > 65535)
#error 参数非法 of 时间片!
#endif
#endif
/*------------------------------------------------------------------------------
* DEBUG */
#if (SYSCFG_DEBUGGING == __ENABLED__)
#if (MCUCFG_ISA == __ARM__)
#define OS_TASKMGR_LEN_RAM 15
#else
#define OS_TASKMGR_LEN_RAM 13
#endif
#define OS_TASKMGR_LEN_LINE \
( \
SYSCFG_TASKNAMELEN_MAX \
+ OS_TASKMGR_LEN_PRI + OS_TASKMGR_LEN_STA \
+ OS_TASKMGR_LEN_CPU + OS_TASKMGR_LEN_RAM \
)
#define OS_CMDLINESENDBUFFSIZE (SYSCFG_TASKNAMELEN_MAX + 64) /*!< size of 命令行发送缓存 */
#if (SYSCFG_SAMEPRISCHEDULE == 0)
#define OS_TASKTOTAL SYSCFG_TASKPRIORITY /*!< 在线任务总数 */
#else
#define OS_TASKTOTAL (SYSCFG_USERTASKTOTAL + 4)
#endif
#define OS_TASKMGRSENDBUFFSIZE \
( \
(OS_TASKMGR_LEN_LINE + 2) * (OS_TASKTOTAL + 7 + SYSCFG_RTC_SHOW) + 2 * 2 + 1 \
) /*!< size of Taskmgr发送缓存 */
#endif
/*------------------------------------------------------------------------------
* typedef base */
#if (OS_TIMESHARING_MAX < 256)
typedef s_u8_t s_sharing_t; /*!< 时间片类型 */
#elif (OS_TIMESHARING_MAX < 65536)
typedef s_u16_t s_sharing_t;
#else
#error 参数非法 of 时间片!
#endif
typedef sCat3Str(s_u, SYSCFG_DELAYBITS, _t) s_delay_t; /*!< 延时定时器类型 */
typedef sCat3Str(s_u, SYSCFG_TIMINTBITS, _t) s_timint_t; /*!< 定时中断定时器类型 */
typedef sCat3Str(s_u, SYSCFG_TIMQRYBITS, _t) s_timqry_t; /*!< 定时查询定时器类型 */
typedef sCat3Str(s_u, SYSCFG_SEMAPHOREBITS, _t) s_semsize_t; /*!< 计数信号量类型 */
/*------------------------------------------------------------------------------
* typedef function and function pointer */
typedef bool s_boolvoid_tf(void); /*!< Keil C51 专用 */
typedef bool (_CODE_MEM_ *s_boolvoid_tfp)(void);
typedef void (_CODE_MEM_ *s_voidvoid_tfp)(void);
/*------------------------------------------------------------------------------
* typedef union */
/**
\brief 调度信号
*/
typedef union
{
volatile s_u8_t every[2];
volatile s_u16_t total;
}s_schesign_tu;
/*------------------------------------------------------------------------------
* typedef struct */
/**
\brief 运行时间
*/
typedef struct
{
s_u16_t day; /*!< 天 */
s_u8_t hour; /*!< 时 */
s_u8_t minute; /*!< 分 */
s_u8_t second; /*!< 秒 */
}s_runtime_ts;
/**
\brief 软件RTC
*/
typedef struct
{
s_u8_t yeah; /*!< 年高八位 */
s_u8_t year; /*!< 年低八位 */
s_u8_t month; /*!< 月 */
s_u8_t date; /*!< 日 */
s_u8_t hour; /*!< 时 [24时制] */
s_u8_t minute; /*!< 分 */
s_u8_t second; /*!< 秒 */
s_u8_t day; /*!< 周 [1周一7周日] */
}s_rtc_ts;
/**
\brief 软件RTC-每信号
\details 典型的应用示例参见 tick_hook。
*/
typedef struct
{
sDefBitField(year); /*!< 每年 */
sDefBitField(month); /*!< 每月 */
sDefBitField(day); /*!< 每日 */
sDefBitField(hour); /*!< 每时 */
sDefBitField(minute); /*!< 每分 */
sDefBitField(second); /*!< 每秒 */
sDefBitField(halfsec); /*!< 每半秒 */
sDefVoidBits(1);
}s_every_ts;
/**
\brief 系统警告
*/
typedef struct
{
sDefBitField(overflow_msgqueue); /*!<【omq】消息队列溢出 ....... */
sDefBitField(timeout_saferuntime); /*!<【srt】安全运行时超时 ..... */
sDefBitField(outrange_taskpriority); /*!<【otp】任务优先级超出范围 . */
sDefBitField(realloc_taskstack); /*!<【rts】任务栈重分配发生 ... */
sDefBitField(overflow_taskstack); /*!<【ots】未来的任务栈溢出 ... */
sDefVoidBits(3);
}s_alarm_ts;
/**
\brief 系统异常
*/
typedef struct
{
sDefBitField(mallocfailed_msgnode); /*!<【mmn】消息节点内存分配失败 */
sDefBitField(mallocfailed_tasknode); /*!<【mtn】任务节点内存分配失败 */
sDefBitField(mallocfailed_taskstack); /*!<【mts】任务栈内存分配失败 . */
sDefBitField(reallocfailed_taskstack); /*!<【rts】任务栈内存重分配失败 */
sDefBitField(overflow_taskstack); /*!<【ots】任务栈溢出 ......... */
sDefBitField(failed_startuptask); /*!<【fst】启动任务失败 ....... */
sDefBitField(error_recvmsg_int); /*!<【erm】中断中接收消息错误 . */
sDefBitField(overflow_pendsvfifo); /*!<【opd】PendSV_FIFO溢出 .... */
}s_fault_ts;
/**
\brief 任务节点(控制块)
\details CosyOS 的 任务节点 即 任务控制块,包含了任务所需的全部关键信息。
任务静态创建时,任务节点为静态;任务动态创建时,任务节点为动态。
*/
typedef struct s_tasknode_ts
{
mTaskNode_Head_ /*!< MSPstacklenPSPpspMSP+PSPpsp */
s_u8_t opri; /*!< 任务创建时的优先级 */
m_stacksize_t stacksize; /*!< 任务栈size */
struct s_tasknode_ts _OBJ_MEM_ * _STATIC_MEM_ *dualhandle; /*!< 任务二重句柄:指向任务句柄的指针 */
s_voidvoid_tfp entry; /*!< 任务函数入口指针 */
#if (SYSCFG_DEBUGGING == __ENABLED__)
const char _CONST_MEM_ *name; /*!< 任务名称(字符串)*/
#endif
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
unsigned int saferuntime; /*!< 安全运行时设定值 */
#endif
s_u8_t _OBJ_MEM_ *bsp; /*!< base stack pointer任务栈的起始地址 */
s_u8_t create; /*!< 任务创建 [0静态创建1动态创建未重分配2动态创建已重分配] */
s_u8_t pri; /*!< 任务当前优先级 */
s_u8_t status; /*!< 任务状态 */
s_u8_t blocktype; /*!< 阻塞类型 */
struct{
s_u8_t slots;
s_delay_t cycle;
}timer; /*!< 任务定时器 */
void _STATIC_MEM_ *handle; /*!< 内核对象句柄,仅指向静态对象 */
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__)
s_sharing_t tc_counter; /*!< 滴答周期计数器 */
#endif
#if (SYSCFG_DEBUGGING == __ENABLED__)
s_u32_t usedtime[2]; /*!< CPU 使用时间计数 */
m_stacklen_t stacklen_max; /*!< 任务栈的实际占用在历史上的最大值 */
#endif
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
unsigned int srt_counter; /*!< 安全运行时计数器 */
struct s_tasknode_ts _OBJ_MEM_ *next_o; /*!< 下一节点 of 超时链表 */
#endif
struct s_tasknode_ts _OBJ_MEM_ *last_b; /*!< 上一节点 of 阻塞链表 */
struct s_tasknode_ts _OBJ_MEM_ *next_b; /*!< 下一节点 of 阻塞链表 */
struct s_tasknode_ts _OBJ_MEM_ *last_t; /*!< 上一节点 of 定时器链表 */
struct s_tasknode_ts _OBJ_MEM_ *next_t; /*!< 下一节点 of 定时器链表 */
#if (SYSCFG_SAMEPRISCHEDULE)
struct s_tasknode_ts _OBJ_MEM_ *last; /*!< 上一节点 of 任务链表 */
struct s_tasknode_ts _OBJ_MEM_ *next; /*!< 下一节点 of 任务链表 */
#if (SYSCFG_MUTEX == __ENABLED__)
struct s_tasknode_ts _OBJ_MEM_ *link; /*!< 互斥信号量获取阻塞-任务链接 */
#endif
#endif
mTaskNode_Tail_ /*!< MCS51/251mUserReg_DEFc_减栈psp_top */
}s_tasknode_ts;
typedef s_tasknode_ts _OBJ_MEM_ *s_tasknode_tsp; /*!< 任务句柄 */
/**
\brief 任务HAND装载块
\details 创建任务时,用来装载任务的关键参数。
1、当任务为动态创建时会定义此结构体在启动任务时会动态的分配任务节点
再把任务HAND中的参数传入任务节点。
2、当任务为静态创建时任务节点就是任务HAND不会再额外定义此结构体。
注:有关结构体成员的相关说明参见任务节点。
*/
typedef struct
{
const mTaskNode_Head_
const s_u8_t opri;
const m_stacksize_t stacksize;
s_tasknode_ts _OBJ_MEM_ * _STATIC_MEM_ * const dualhandle;
s_voidvoid_tfp entry;
#if (SYSCFG_DEBUGGING == __ENABLED__)
const char _CONST_MEM_ * const name;
#endif
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
const s_u16_t saferuntime;
#endif
}s_taskhand_ts;
typedef s_taskhand_ts _STATIC_MEM_ *s_taskhand_tsp; /*!< 任务装载块句柄 */
typedef union
{
s_voidvoid_tfp hook;
s_taskhand_tsp hand;
}s_hookorhand_tu;
/**
\brief 定时中断HAND控制块
\details 创建定时中断任务或钩子时,会定义此结构体。
*/
typedef struct
{
s_timint_t timer; /*!< 定时器 */
s_timint_t reload; /*!< 重装载值 */
bool autoreload; /*!< 是否自动重装载定时器?*/
const bool hookortask; /*!< 该定时中断是钩子还是任务?[0hook1task] */
s_hookorhand_tu const hookorhand; /*!< 钩子函数指针或任务HAND指针 */
}s_timinthand_ts;
typedef s_timinthand_ts _STATIC_MEM_ *s_timinthand_tsp; /*!< 定时中断句柄 */
/**
\brief 定时查询HAND控制块
\details 创建定时查询任务或钩子时,会定义此结构体。
*/
typedef struct
{
s_timqry_t timer; /*!< 定时器 */
s_timqry_t reload; /*!< 重装载值 */
bool autoreload; /*!< 是否自动重装载定时器?*/
const bool hookortask; /*!< 该定时查询是钩子还是任务?[0hook1task] */
s_hookorhand_tu const hookorhand; /*!< 钩子函数指针或任务HAND指针 */
s_boolvoid_tfp const event; /*!< 定时查询事件函数指针 */
}s_timqryhand_ts;
typedef s_timqryhand_ts _STATIC_MEM_ *s_timqryhand_tsp; /*!< 定时查询句柄 */
/**
\brief 互斥信号量控制块
\details 创建互斥信号量时,会定义此结构体。
*/
typedef struct
{
s_tasknode_tsp htask;
s_tasknode_tsp otask;
s_u8_t opri;
volatile s_u8_t mutex;
}s_mutex_ts;
typedef s_mutex_ts _STATIC_MEM_ *s_mutex_tsp; /*!< 互斥信号量句柄 */
/**
\brief 二值信号量控制块
\details 创建二值信号量时,会定义此结构体。
*/
typedef struct
{
s_tasknode_tsp htask;
volatile bool binary;
}s_binary_ts;
typedef s_binary_ts _STATIC_MEM_ *s_binary_tsp; /*!< 二值信号量句柄 */
/**
\brief 计数信号量控制块
\details 创建计数信号量时,会定义此结构体。
*/
typedef struct
{
s_tasknode_tsp htask;
volatile s_semsize_t counter;
const s_semsize_t maximum;
}s_semaph_ts;
typedef s_semaph_ts _STATIC_MEM_ *s_semaph_tsp; /*!< 计数信号量句柄 */
/**
\brief 信箱控制块
\details 创建信箱时,会定义此结构体。
*/
typedef struct
{
s_tasknode_tsp htask;
volatile m_fetion_t tion;
}s_tionbox_ts;
typedef s_tionbox_ts _STATIC_MEM_ *s_tionbox_tsp; /*!< 信箱句柄 */
/**
\brief 邮箱控制块
\details 创建邮箱时,会定义此结构体。
*/
typedef struct
{
s_tasknode_tsp htask;
volatile bool flag;
void *mail;
}s_mailbox_ts;
typedef s_mailbox_ts _STATIC_MEM_ *s_mailbox_tsp; /*!< 邮箱句柄 */
/**
\brief 消息节点
\details 动态队列之消息节点。
*/
typedef struct s_msgnode_ts
{
void *msg;
struct s_msgnode_ts _MALLOC_MEM_ *last;
struct s_msgnode_ts _MALLOC_MEM_ *next;
}s_msgnode_ts;
typedef s_msgnode_ts _MALLOC_MEM_ *s_msgnode_tsp; /*!< 消息句柄 */
/**
\brief 动态队列控制块
\details 创建动态队列时,会定义此结构体。
*/
typedef struct
{
s_tasknode_tsp htask;
volatile bool mutex;
volatile size_t counter;
const s_u8_t type;
const s_u8_t mode;
const size_t len;
s_msgnode_tsp head;
s_msgnode_tsp tail;
}s_dynque_ts;
typedef s_dynque_ts _STATIC_MEM_ *s_dynque_tsp; /*!< 动态队列句柄 */
/**
\brief 静态队列控制块
\details 创建静态队列时,会定义此结构体。
*/
typedef struct
{
s_tasknode_tsp htask;
volatile bool mutex;
volatile size_t counter;
const s_u8_t type;
const s_u8_t mode;
const size_t len;
void * _STATIC_MEM_ * head;
void * _STATIC_MEM_ * tail;
void * _STATIC_MEM_ * const base;
}s_staque_ts;
typedef s_staque_ts _STATIC_MEM_ *s_staque_tsp; /*!< 静态队列句柄 */
/**
\brief 队列控制块
\details 创建队列时,并不会定义此结构体;访问队列时,通过其队列句柄,
即可访问动态队列控制块,也可访问静态队列控制块。
*/
typedef struct
{
s_tasknode_tsp htask; /*!< 任务句柄 */
volatile bool mutex; /*!< 队列互斥量 */
volatile size_t counter; /*!< 队列计数器:记录队列中消息的数量 */
const s_u8_t type; /*!< 队列类型 [0静态队列1动态队列] */
const s_u8_t mode; /*!< 传输模式 [0FIFO1LIFO] */
const size_t len; /*!< 队列长度 */
}s_msgque_ts;
typedef s_msgque_ts _STATIC_MEM_ *s_msgque_tsp; /*!< 队列句柄 */
/**
\brief 线程内存控制块
\details 创建线程内存池时,会定义此结构体。
*/
typedef struct
{
void _MALLOC_MEM_ *head;
void _MALLOC_MEM_ *move;
size_t size;
}s_thrmem_ts;
typedef s_thrmem_ts _STATIC_MEM_ *s_thrmem_tsp; /*!< 线程内存句柄 */
/*------------------------------------------------------------------------------
* 中断挂起服务_FIFO 结构体类型定义 */
typedef struct
{
const s_u8_t svid;
}sp_svid_ts;
typedef sp_svid_ts _STATIC_MEM_ *sp_svid_tsp;
typedef struct
{
const s_u8_t svid;
s_tasknode_tsp htask;
}sp_task_ts;
typedef sp_task_ts _STATIC_MEM_ *sp_task_tsp;
typedef struct
{
const s_u8_t svid;
s_tasknode_tsp htask;
const s_u8_t npri;
}sp_taskpri_ts;
typedef sp_taskpri_ts _STATIC_MEM_ *sp_taskpri_tsp;
typedef struct
{
const s_u8_t svid;
s_tasknode_tsp htask;
const s_delay_t tick;
}sp_blocktime_ts;
typedef sp_blocktime_ts _STATIC_MEM_ *sp_blocktime_tsp;
typedef struct
{
const s_u8_t svid;
const s_u8_t tmid;
s_timint_t tick;
}sp_timint_ts;
typedef sp_timint_ts _STATIC_MEM_ *sp_timint_tsp;
typedef struct
{
const s_u8_t svid;
const s_u8_t tmid;
s_timqry_t tick;
}sp_timqry_ts;
typedef sp_timqry_ts _STATIC_MEM_ *sp_timqry_tsp;
typedef struct
{
const s_u8_t svid;
s_binary_tsp const hbin;
const bool value;
}sp_binary_ts;
typedef sp_binary_ts _STATIC_MEM_ *sp_binary_tsp;
typedef struct
{
const s_u8_t svid;
s_semaph_tsp const hsem;
}sp_semaph_ts;
typedef sp_semaph_ts _STATIC_MEM_ *sp_semaph_tsp;
typedef struct
{
const s_u8_t svid;
s_tionbox_tsp const htbox;
m_fetion_t tion;
}sp_tionbox_ts;
typedef sp_tionbox_ts _STATIC_MEM_ *sp_tionbox_tsp;
typedef struct
{
const s_u8_t svid;
s_mailbox_tsp const hmbox;
void *mail;
}sp_mailbox_ts;
typedef sp_mailbox_ts _STATIC_MEM_ *sp_mailbox_tsp;
typedef struct
{
const s_u8_t svid;
s_msgque_tsp const hque;
void *msg;
}sp_msgque_ts;
typedef sp_msgque_ts _STATIC_MEM_ *sp_msgque_tsp;
typedef struct
{
const s_u8_t svid;
void _STATIC_MEM_ * const hgrp;
const char size;
m_group_t value;
}sp_group_ts;
typedef sp_group_ts _STATIC_MEM_ *sp_group_tsp;
typedef struct
{
const s_u8_t svid;
void * const gp;
void * const lp;
const size_t size;
}sp_gvar_ts;
typedef sp_gvar_ts _STATIC_MEM_ *sp_gvar_tsp;
typedef struct
{
const s_u8_t svid;
s_voidvoid_tfp const fp;
}sp_pendsvc_ts;
typedef sp_pendsvc_ts _STATIC_MEM_ *sp_pendsvc_tsp;
#endif