mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-08-26 05:11:38 +08:00
726 lines
23 KiB
C
726 lines
23 KiB
C
/**************************************************************************//**
|
||
* @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_ /*!< MSP:stacklen,PSP:psp,MSP+PSP:psp */
|
||
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/251:mUserReg_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; /*!< 该定时中断是钩子还是任务?[0:hook,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; /*!< 该定时查询是钩子还是任务?[0:hook,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; /*!< 传输模式 [0:FIFO,1:LIFO] */
|
||
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
|