Files
cosyos/System/os_redef.h
T
零中断延迟的RTOS 9b4f65be0f update CosyOS-内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2025-02-26 14:57:37 +00:00

726 lines
23 KiB
C
Raw 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 V1.0.1
* @date 2025.02.26
******************************************************************************/
#ifndef __OS_REDEF_H
#define __OS_REDEF_H
/*------------------------------------------------------------------------------
* SYSAPI */
#define sDefStr(s) sDefStr_0(s)
#define sDefStr_0(s) #s
#define sCat2Str(s1, s2) sCat2Str_0(s1, s2)
#define sCat2Str_0(s1, s2) s1##s2
#define sCat3Str(s1, s2, s3) sCat3Str_0(s1, s2, s3)
#define sCat3Str_0(s1, s2, s3) s1##s2##s3
#define sDefBitField(v) sDefBitField_0(v)
#define sDefBitField_0(v) volatile s_u8_t v:1
#define sDefVoidBits(n) sDefVoidBits_0(n)
#define sDefVoidBits_0(n) volatile s_u8_t :n
/*------------------------------------------------------------------------------
* INCLUDE */
#include <stdlib.h>
#include "..\Config\syscfg.h"
#include sDefStr(sCat2Str(..\Port\port_, SYSCFG_MCUCORE.h))
/*------------------------------------------------------------------------------
* ZERO-INSTALL */
#if MCUCFG_OSZEROINSTALL == __ENABLED__
#define sZeroInstall = 0
#define sZeroInstall_Group = {0}
#else
#define sZeroInstall
#define sZeroInstall_Group
#endif
/*------------------------------------------------------------------------------
* NOPxX */
#define OS_NOPx1 MCUCFG_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
/*------------------------------------------------------------------------------
* TOTAL */
#if SYSCFG_SAMEPRISCHEDULE == 0
#define OS_TASKTOTAL (SYSCFG_TASKPRIORITY - 1) /*!< 在线任务总数 */
#elif SYSCFG_DEBUGGING == 0
#define OS_TASKTOTAL (SYSCFG_USERTASKTOTAL + 2)
#else
#define OS_TASKTOTAL (SYSCFG_USERTASKTOTAL + 4)
#endif
#if SYSCFG_DEBUGGING == 0
#define OS_TIMINTTOTAL SYSCFG_USERTIMINTTOTAL /*!< 定时中断总数 */
#define OS_TIMQRYTOTAL SYSCFG_USERTIMQRYTOTAL /*!< 定时查询总数 */
#else
#define OS_TIMINTTOTAL (SYSCFG_USERTIMINTTOTAL + 1)
#define OS_TIMQRYTOTAL (SYSCFG_USERTIMQRYTOTAL + 2)
/*------------------------------------------------------------------------------
* TMID(定时器ID*/
#define OS_TMID_DEBUGGER SYSCFG_USERTIMINTTOTAL /*!< TMID of Debugger */
#define OS_TMID_DEBUGHOOK SYSCFG_USERTIMQRYTOTAL /*!< TMID of debug_hook */
/** 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
#elif OS_TIMQRYTOTAL == 35
#define OS_TMID_TASKMGR 34
#elif OS_TIMQRYTOTAL == 36
#define OS_TMID_TASKMGR 35
#elif OS_TIMQRYTOTAL == 37
#define OS_TMID_TASKMGR 36
#elif OS_TIMQRYTOTAL == 38
#define OS_TMID_TASKMGR 37
#elif OS_TIMQRYTOTAL == 39
#define OS_TMID_TASKMGR 38
#elif OS_TIMQRYTOTAL == 40
#define OS_TMID_TASKMGR 39
#elif OS_TIMQRYTOTAL == 41
#define OS_TMID_TASKMGR 40
#elif OS_TIMQRYTOTAL == 42
#define OS_TMID_TASKMGR 41
#elif OS_TIMQRYTOTAL == 43
#define OS_TMID_TASKMGR 42
#elif OS_TIMQRYTOTAL == 44
#define OS_TMID_TASKMGR 43
#elif OS_TIMQRYTOTAL == 45
#define OS_TMID_TASKMGR 44
#elif OS_TIMQRYTOTAL == 46
#define OS_TMID_TASKMGR 45
#elif OS_TIMQRYTOTAL == 47
#define OS_TMID_TASKMGR 46
#elif OS_TIMQRYTOTAL == 48
#define OS_TMID_TASKMGR 47
#elif OS_TIMQRYTOTAL == 49
#define OS_TMID_TASKMGR 48
#elif OS_TIMQRYTOTAL == 50
#define OS_TMID_TASKMGR 49
#elif OS_TIMQRYTOTAL == 51
#define OS_TMID_TASKMGR 50
#elif OS_TIMQRYTOTAL == 52
#define OS_TMID_TASKMGR 51
#elif OS_TIMQRYTOTAL == 53
#define OS_TMID_TASKMGR 52
#elif OS_TIMQRYTOTAL == 54
#define OS_TMID_TASKMGR 53
#elif OS_TIMQRYTOTAL == 55
#define OS_TMID_TASKMGR 54
#elif OS_TIMQRYTOTAL == 56
#define OS_TMID_TASKMGR 55
#elif OS_TIMQRYTOTAL == 57
#define OS_TMID_TASKMGR 56
#elif OS_TIMQRYTOTAL == 58
#define OS_TMID_TASKMGR 57
#elif OS_TIMQRYTOTAL == 59
#define OS_TMID_TASKMGR 58
#elif OS_TIMQRYTOTAL == 60
#define OS_TMID_TASKMGR 59
#elif OS_TIMQRYTOTAL == 61
#define OS_TMID_TASKMGR 60
#elif OS_TIMQRYTOTAL == 62
#define OS_TMID_TASKMGR 61
#elif OS_TIMQRYTOTAL == 63
#define OS_TMID_TASKMGR 62
#elif OS_TIMQRYTOTAL == 64
#define OS_TMID_TASKMGR 63
#elif OS_TIMQRYTOTAL == 65
#define OS_TMID_TASKMGR 64
#elif OS_TIMQRYTOTAL == 66
#define OS_TMID_TASKMGR 65
#endif
#endif
/*------------------------------------------------------------------------------
* Time Sharing(时间片)*/
#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_ALGORITHMTIMESHARING(htask->pri)
#define OS_TIMESHARING_MAX SYSCFG_ALGORITHMTIMESHARING(0)
#define OS_TIMESHARING_MIN SYSCFG_ALGORITHMTIMESHARING(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 时间片定义非法!
#endif
/*------------------------------------------------------------------------------
* Taskmgr - LEN */
#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 \
)
/*------------------------------------------------------------------------------
* DEBUGBUFF - SIZE */
#define OS_DEBUGRECVBUFFSIZE (SYSCFG_TASKNAMELEN_MAX + 64) /*!< size of DEBUG 接收缓存 */
#define OS_CMDLINESENDBUFFSIZE (SYSCFG_TASKNAMELEN_MAX + 64) /*!< size of 命令行 发送缓存 */
#define OS_TASKMGRSENDBUFFSIZE \
( \
(OS_TASKMGR_LEN_LINE + 2) * (OS_TASKTOTAL + 7 + SYSCFG_RTC_SHOW) + 2 * 2 + 1 \
) /*!< size of Taskmgr 发送缓存 */
/*------------------------------------------------------------------------------
* typedef base */
typedef s_u8_t s_ecode_t; /*!< 错误码类型 */
#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 时间片溢出!
#endif
#if OS_TASKTOTAL < 256
typedef s_u8_t s_tqcount_t;
#else
typedef s_u16_t s_tqcount_t;
#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 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); /*!< 每半秒 */
sDefBitField(set); /*!< 设置时间 */
}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__
s_u16_t 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; /*!< 阻塞类型 */
s_delay_t timer; /*!< 软件定时器(延时/超时计数)*/
#if SYSCFG_MCUCORE == 8051
void _STATIC_MEM_ *handle; /*!< 内核对象句柄,仅指向静态对象 */
#endif
#if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__
s_sharing_t tc_counter; /*!< 滴答周期计数器 */
#endif
#if SYSCFG_DEBUGGING == __ENABLED__
s_u32_t usedtime[2]; /*!< CPU 使用时间计数 */
m_stacksize_t stacklen_max; /*!< 任务栈的实际占用在历史上的最大值 */
#endif
#if SYSCFG_SAFERUNTIME == __ENABLED__
s_u32_t srt_counter; /*!< 安全运行时计数器 */
#endif
struct s_tasknode_ts _OBJ_MEM_ *next_b; /*!< 下一节点 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 优先级组 */
#endif
mTaskNode_Tail_ /*!< MCS51/251mUserReg_C_,减栈: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; /*!< 任务装载块句柄 */
/**
\brief 定时中断HAND(控制块)
\details 创建定时中断任务或钩子时,会定义此结构体。
*/
typedef struct
{
s_timint_t timer; /*!< 定时器 */
s_timint_t reload; /*!< 重装载值 */
bool autoreload; /*!< 是否自动重装载定时器?*/
const bool hookortask; /*!< 该定时中断是钩子还是任务?[0hook,1:task] */
void _CODE_MEM_ * 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; /*!< 该定时查询是钩子还是任务?[0hook,1:task] */
void _CODE_MEM_ * const hookorhand; /*!< 钩子函数指针或任务HAND指针 */
s_boolvoid_tfp const event; /*!< 定时查询事件函数指针 */
}s_timqryhand_ts;
typedef s_timqryhand_ts _STATIC_MEM_ *s_timqryhand_tsp; /*!< 定时查询句柄 */
/**
\brief 互斥信号量控制块
\details 创建互斥信号量时,会定义此结构体。
*/
typedef struct
{
volatile s_u8_t mutex;
s_tasknode_tsp htask;
s_tasknode_tsp otask;
s_u8_t opri;
}s_mutex_ts;
typedef s_mutex_ts _STATIC_MEM_ *s_mutex_tsp; /*!< 互斥信号量句柄 */
/**
\brief 二值信号量控制块
\details 创建二值信号量时,会定义此结构体。
*/
typedef struct
{
volatile bool binary;
s_tasknode_tsp htask;
}s_binary_ts;
typedef s_binary_ts _STATIC_MEM_ *s_binary_tsp; /*!< 二值信号量句柄 */
/**
\brief 计数信号量控制块
\details 创建计数信号量时,会定义此结构体。
*/
typedef struct
{
volatile s_semsize_t counter;
const s_semsize_t maximum;
s_tasknode_tsp htask;
}s_semaph_ts;
typedef s_semaph_ts _STATIC_MEM_ *s_semaph_tsp; /*!< 计数信号量句柄 */
/**
\brief 信箱控制块
\details 创建信箱时,会定义此结构体。
*/
typedef struct
{
volatile m_fetion_t tion;
s_tasknode_tsp htask;
}s_tionbox_ts;
typedef s_tionbox_ts _STATIC_MEM_ *s_tionbox_tsp; /*!< 信箱句柄 */
/**
\brief 邮箱控制块
\details 创建邮箱时,会定义此结构体。
*/
typedef struct
{
volatile bool flag;
void *mail;
s_tasknode_tsp htask;
}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
{
size_t counter;
const s_u8_t type;
const s_u8_t mode;
const size_t len;
s_tasknode_tsp htask;
volatile bool mutex;
s_msgnode_tsp head;
s_msgnode_tsp tail;
}sd_queue_ts;
typedef sd_queue_ts _STATIC_MEM_ *sd_queue_tsp; /*!< 动态队列句柄 */
/**
\brief 静态队列控制块
\details 创建静态队列时,会定义此结构体。
*/
typedef struct
{
size_t counter;
const s_u8_t type;
const s_u8_t mode;
const size_t len;
s_tasknode_tsp htask;
volatile bool mutex;
void * _STATIC_MEM_ * head;
void * _STATIC_MEM_ * tail;
void * _STATIC_MEM_ * const base;
}ss_queue_ts;
typedef ss_queue_ts _STATIC_MEM_ *ss_queue_tsp; /*!< 静态队列句柄 */
/**
\brief 队列控制块
\details 创建队列时,并不会定义此结构体;访问队列时,通过其队列句柄,
即可访问动态队列控制块,也可访问静态队列控制块。
*/
typedef struct
{
size_t counter; /*!< 队列计数器:记录队列中消息的数量 */
const s_u8_t type; /*!< 队列类型 [0:静态队列,1:动态队列] */
const s_u8_t mode; /*!< 传输模式 [0FIFO1LIFO] */
const size_t len; /*!< 队列长度 */
s_tasknode_tsp htask; /*!< 任务句柄 */
volatile bool mutex; /*!< 队列互斥量 */
}s_queue_ts;
typedef s_queue_ts _STATIC_MEM_ *s_queue_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_queue_tsp const hque;
void *msg;
}sp_msg_ts;
typedef sp_msg_ts _STATIC_MEM_ *sp_msg_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;
typedef struct
{
const s_u8_t svid;
bool * const sign;
}sp_sign_ts;
typedef sp_sign_ts _STATIC_MEM_ *sp_sign_tsp;
#endif