📄 net_tmr.h
字号:
/*$PAGE*/
/*
*********************************************************************************************************
* DATA TYPES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* NETWORK TIMER QUANTITY DATA TYPE
*********************************************************************************************************
*/
typedef CPU_INT16U NET_TMR_QTY; /* Defines max qty of net tmrs to support. */
/*
*********************************************************************************************************
* NETWORK TIMER TICK DATA TYPE
*
* Note(s) : (1) 'NET_TMR_TICK' data type size determined by selecting the smaller data type size of
* 'CPU_INT16U'/'CPU_INT32U' whose maximum unsigned value is NOT less than NET_TMR_CFG_TICK_TH.
*
* (2) NET_TMR_TIME_INFINITE_TICK & NET_TMR_TIME_INFINITE MUST be globally #define'd AFTER
* 'NET_TMR_TICK' data type declared.
*********************************************************************************************************
*/
#define NET_TMR_CFG_TICK_TH NET_TMR_TIME_MAX
/* Defines max TMR tick cnts. */
#if (NET_TMR_CFG_TICK_TH < 65536)
typedef CPU_INT16U NET_TMR_TICK;
#define NET_TMR_TIME_INFINITE_TICK DEF_INT_16U_MAX_VAL /* Define as max unsigned val (see Note #2). */
#else
typedef CPU_INT32U NET_TMR_TICK;
#define NET_TMR_TIME_INFINITE_TICK DEF_INT_32U_MAX_VAL /* Define as max unsigned val (see Note #2). */
#endif
#define NET_TMR_TIME_INFINITE NET_TMR_TIME_INFINITE_TICK
/*$PAGE*/
/*
*********************************************************************************************************
* NETWORK TIMER DATA TYPE
*
* NET_TMR
* |-------------|
* | Timer Type |
* Previous |-------------|
* Timer <----------O |
* |-------------| Next
* | O----------> Timer
* |-------------| -------------
* | O-------------------------> | |
* |-------------| Object | Object |
* | O----------> Expiration | that |
* |-------------| Function | requested |
* | Current | | Timer |
* | Timer value | | |
* |-------------| -------------
* | Flags |
* |-------------|
*
*
* Note(s) : (1) Forced word-alignment at start of timer NOT required since first data member 'Type' is
* declared as 'CPU_INT32U'.
*
* (2) 'PrevPtr'/'NextPtr' ideally declared as 'NET_TMR' pointers; declared as 'void' pointers
* because 'NET_TMR' NOT fully defined at time of declaration.
*********************************************************************************************************
*/
/* --------------------- NET TMR ---------------------- */
typedef struct net_tmr {
NET_TYPE Type; /* Type cfg'd @ init : NET_TMR_TYPE_TMR. */
void *PrevPtr; /* Ptr to PREV tmr. */
void *NextPtr; /* Ptr to NEXT tmr. */
void *Obj; /* Ptr to obj using TMR. */
CPU_FNCT_PTR Fnct; /* Ptr to fnct used on obj when TMR expires. */
NET_TMR_TICK TmrVal; /* Cur tmr val (in NET_TMR_TICK ticks). */
NET_TMR_QTY ID; /* Tmr id. */
CPU_INT16U Flags; /* Tmr flags. */
} NET_TMR;
/*$PAGE*/
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
NET_TMR_EXT NET_TMR NetTmr_Tbl[NET_TMR_CFG_NBR_TMR];
NET_TMR_EXT NET_TMR *NetTmr_PoolPtr; /* Ptr to pool of free net tmrs. */
NET_TMR_EXT NET_STAT_POOL NetTmr_PoolStat;
NET_TMR_EXT NET_TMR *NetTmr_TaskListHead; /* Ptr to head of Tmr Task List. */
NET_TMR_EXT NET_TMR *NetTmr_TaskListPtr; /* Ptr to cur Tmr Task List tmr to update. */
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED) /* ------------------- NET TMR ERRS ------------------- */
NET_TMR_EXT NET_CTR NetTmr_ErrNoneAvailCtr; /* Nbr net tmr unavail accesses. */
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
NET_TMR_EXT NET_CTR NetTmr_ErrNullPtrCtr; /* Nbr null net tmr accesses. */
NET_TMR_EXT NET_CTR NetTmr_ErrNullObjCtr; /* Nbr null net tmr obj accesses. */
NET_TMR_EXT NET_CTR NetTmr_ErrNullFnctCtr; /* Nbr null net tmr fnct accesses. */
NET_TMR_EXT NET_CTR NetTmr_ErrNotUsedCtr; /* Nbr unused net tmr accesses. */
NET_TMR_EXT NET_CTR NetTmr_ErrInvalidTypeCtr; /* Nbr net tmr invalid type accesses. */
#endif
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void NetTmr_Init (NET_ERR *perr);
void NetTmr_TaskHandler (void);
/* ----------- TMR ALLOCATION FNCTS ----------- */
NET_TMR *NetTmr_Get (void *obj,
CPU_FNCT_PTR fnct,
NET_TMR_TICK time,
CPU_INT16U flags,
NET_ERR *perr);
void NetTmr_Free (NET_TMR *ptmr);
/* -------------- TMR API FNCTS --------------- */
void NetTmr_Set (NET_TMR *ptmr,
CPU_FNCT_PTR fnct,
NET_TMR_TICK time,
NET_ERR *perr);
/* ------------- TMR STATUS FNCTS ------------ */
NET_STAT_POOL NetTmr_PoolStatGet (void);
void NetTmr_PoolStatResetMaxUsed(void);
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
* DEFINED IN OS'S net_os.c
*********************************************************************************************************
*/
void NetOS_Tmr_Init (NET_ERR *perr); /* Create & start Tmr Task. */
/*$PAGE*/
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
#ifndef NET_TMR_CFG_NBR_TMR
#error "NET_TMR_CFG_NBR_TMR not #define'd in 'net_cfg.h'"
#error " [MUST be > 0] "
#error " [ && < 65536] "
/* See 'NETWORK TIMER QUANTITY DATA TYPE'. */
#elif ((NET_TMR_CFG_NBR_TMR < 1) || \
(NET_TMR_CFG_NBR_TMR > DEF_INT_16U_MAX_VAL))
#error "NET_TMR_CFG_NBR_TMR illegally #define'd in 'net_cfg.h'"
#error " [MUST be > 0] "
#error " [ && < 65536] "
#endif
#ifndef NET_TMR_CFG_TASK_FREQ
#error "NET_TMR_CFG_TASK_FREQ not #define'd in 'net_cfg.h'"
#error " [MUST be > 0 Hz] "
#elif (NET_TMR_CFG_TASK_FREQ < 1)
#error "NET_TMR_CFG_TASK_FREQ illegally #define'd in 'net_cfg.h'"
#error " [MUST be > 0 Hz] "
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -