📄 rtos.h
字号:
typedef UH STATUS_REG;
typedef struct t_rmbx{
VP exinf;
BOOL_ID wtsk;
T_MSG *pk_msg;
} T_RMBX;
typedef struct t_memblc
{
UB data[MEM_BLOCK_SIZE];
UH attr;
} T_MEMBLC;
#define MEMORY_BLOCK_NOT_USED 0
#define MEMORY_BLOCK_USED 1
/* version information reference */
typedef struct t_ver
{
UINT maker; /* vendor */
UINT id; /* format number */
UINT spver; /* specification version */
UINT prver; /* product version */
UINT prno[4]; /* product control information */
UINT cpu; /* CPU information */
UINT var; /* variation descriptor */
} T_VER;
/* context */
typedef struct t_context
{
UH di;
UH si;
UH argreg;
FP task; /* procedure */
} T_CONTEXT;
/* task control queue */
typedef struct t_queue
{ /* double linking queue */
struct t_queue *next; /* next queue */
struct t_queue *prev; /* previous queue */
} T_QUEUE;
/* TSKCB(task control block) */
typedef struct t_tskcb
{
T_QUEUE queue; /* queue */
T_CONTEXT *stackp; /* statck pointer(context) */
UINT tskstat; /* status */
PRI tskpri; /* priority */
UINT tskwait; /* wait */
INT wupcnt; /* number of wake-up queing */
#ifndef NO_SUSCNT
INT suscnt; /* number nesting of SUSPEND */
#endif
UINT waiptn; /* event flag patern */
UINT wfmode; /* even flag mode */
/* requested size of memory pool */
SYSTIME *waistm; /* pointer of wait time */
VP *ans; /* return value without dispatch */
PRI itskpri; /* initial priority */
T_CONTEXT *istackp;/* pointer of initial statck */
FP itask; /* start address of initial task */
#ifdef _TIME_SLICE_
INT tmslc; /* time slice : 0=none */
#endif
#ifndef NO_ERCHK
SYSTIME ttltic; /* total time (msec unit) */
#endif
} T_TSKCB;
/* SEMCB(semaphore control block) */
typedef struct t_semcb
{
T_QUEUE queue; /* wait task */
INT semcnt; /* count of semaphore */
INT maxsem; /* maximum count of semaphore */
#ifndef NO_ERCHK
PRI sempri; /* priority */
#endif
} T_SEMCB;
/* FLGCB(event flag control block) */
typedef struct t_flgcb
{
T_QUEUE queue; /* wait task */
UINT flgptn; /* event flag value */
} T_FLGCB;
/* MSGCB(message control block) */
typedef struct t_msgcb
{
T_QUEUE queue; /* wait task */
INT head; /* top of message queue */
INT tail; /* tail of message queue */
T_MSG msgque[MSGQUEMAX]; /* message queue */
} T_MSGCB;
/* MPFCB(fixed memory pool control block) */
typedef struct t_mpfcb
{
T_QUEUE queue; /* wait task */
} T_MPFCB;
/* MPLCB(variable memory pool control block) */
typedef struct t_mplcb
{
T_QUEUE queue; /* wait task */
} T_MPLCB;
/* DLYCB(delay time control block) */
typedef struct t_dlycb
{
T_QUEUE queue; /* wait task */
} T_DLYCB;
#ifdef DEBUG_OS
/* trace buffer control block for debug */
typedef struct t_dbgtrccb
{
ID tskid; /* task ID */
PRI tskpri; /* priority */
char* srvnm; /* savice name */
UINT tim; /* time : UINT for PARTNER-J */
} T_DBGTRCCB;
#endif
struct progaddrsptr {
void (*func)(void);
};
#ifndef _RTOS_H
#define _RTOS_H
/* ////////////////////////////////////////////////////////////////////////////
; EXTERNAL Subroutine
//////////////////////////////////////////////////////////////////////////// */
/*=============================================================================
; Subroutine
=============================================================================*/
/* you can use function in task independent */
#define ista_tsk sta_tsk
#define iter_tsk ter_tsk
#define ichg_pri chg_pri
#define irot_rdq rot_rdq
#define irel_wai rel_wai
#define iwup_tsk wup_tsk
#define ican_wup can_wup
#define isus_tsk sus_tsk
#define irsm_tsk rsm_tsk
#define isig_sem sig_sem
#define ipreq_sem preq_sem
#define iset_flg set_flg
#define iclr_flg clr_flg
#define ipol_flg pol_flg
#define isnd_msg snd_msg
#define iprcv_msg prcv_msg
#define ipget_blf pget_blf
#define iset_tim set_tim
#define iget_tim get_tim
#define iget_ver get_ver
#ifdef _TIME_SLICE_
extern void init_rtos( ID tskid, PRI tskpri, INT tmslc );
extern void init_task( ID tskid, T_CONTEXT *stackp, FP task, PRI tskpri, INT tmslc );
#else
extern void init_rtos( ID tskid, PRI tskpri );
extern void init_task( ID tskid, T_CONTEXT *stackp, FP task, PRI tskpri );
#endif
#ifndef NO_ERCHK
#if SEMMAX
extern void init_sem( ID semid, PRI sempri );
#endif
#endif
extern void start_rtos( void );
extern ER dis_dsp( void );
extern ER ena_dsp( void );
extern ER sta_tsk( ID tskid, INT stacd );
extern void ext_tsk( void );
extern ER ter_tsk ( ID tskid );
extern ER chg_pri( ID tskid, PRI tskpri );
extern ER rot_rdq( PRI tskpri );
extern ER rel_wai( ID tskid );
extern ER get_tid( ID *p_tskid );
extern ER slp_tsk( void );
extern ER wup_tsk( ID tskid );
extern ER can_wup( INT *p_wupcnt, ID tskid );
extern ER sus_tsk( ID tskid );
extern ER rsm_tsk( ID tskid );
extern ER sig_sem( ID semid );
extern ER wai_sem( ID semid );
extern ER preq_sem( ID semid );
extern ER check_sem( ID semid );
extern ER set_flg( ID flgid, UINT setptn );
extern ER clr_flg( ID flgid, UINT clrptn );
extern ER wai_flg( UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode );
extern ER pol_flg( UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode );
extern ER snd_msg( ID mbxid, T_MSG *pk_msg );
extern ER rcv_msg( T_MSG *ppk_msg, ID mbxid );
extern ER prcv_msg( T_MSG *ppk_msg, ID mbxid );
//extern ER ref_mbx( T_MSG *ppk_msg, ID mbxid );
extern ER ref_mbx( T_RMBX *pk_rmbx, ID mbxid );
extern ER loc_cpu( void );
extern ER unl_cpu( void );
extern void ent_int( void );
extern void ret_int( void );
extern ER set_tim( SYSTIME *pk_tim );
extern ER get_tim( SYSTIME *pk_tim );
extern ER dly_tsk( DLYTIME dlytim );
extern ER pget_blf( VP *p_blk, ID mplid);
extern ER get_blf( VP *p_blk, ID mplid);
extern ER rel_blf( ID mplid, VP blk );
extern ER pget_blk( VP *p_blk, ID mplid, INT blksz);
extern ER get_blk( VP *p_blk, ID mplid, INT blksz);
extern ER rel_blk( ID mplid, VP blk );
extern void interrupt_timer( void );
extern ER get_ver( T_VER *pk_ver );
#ifdef DEBUG_OS
extern void set_dbgtrc(T_TSKCB *tsk, char* srvnm);
#endif
extern STATUS_REG InterruptDisable( void );
extern STATUS_REG InterruptEnable( void );
extern void set_SR( STATUS_REG SRkeep );
extern ER change_stack(T_CONTEXT **next, T_CONTEXT **last);
extern void copy_data (void *dest,void* sour,unsigned int num);
/*=============================================================================
; Work area
=============================================================================*/
#else /* #ifndef _RTOS_H */
#ifdef _TIME_SLICE_
void init_rtos( ID tskid, PRI tskpri, INT tmslc );
void init_task( ID tskid, T_CONTEXT *stackp, FP task, PRI tskpri, INT tmslc );
#else
void init_rtos( ID tskid, PRI tskpri );
void init_task( ID tskid, T_CONTEXT *stackp, FP task, PRI tskpri );
#endif
#ifndef NO_ERCHK
#if SEMMAX
void init_sem( ID semid, PRI sempri );
#endif
#endif
void start_rtos( void );
ER dis_dsp( void );
ER ena_dsp( void );
ER sta_tsk( ID tskid, INT stacd );
void ext_tsk( void );
ER ter_tsk ( ID tskid );
ER chg_pri( ID tskid, PRI tskpri );
ER rot_rdq( PRI tskpri );
ER rel_wai( ID tskid );
ER get_tid( ID *p_tskid );
ER slp_tsk( void );
ER wup_tsk( ID tskid );
ER can_wup( INT *p_wupcnt, ID tskid );
ER sus_tsk( ID tskid );
ER rsm_tsk( ID tskid );
ER sig_sem( ID semid );
ER wai_sem( ID semid );
ER preq_sem( ID semid );
ER set_flg( ID flgid, UINT setptn );
ER clr_flg( ID flgid, UINT clrptn );
ER wai_flg( UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode );
ER pol_flg( UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode );
ER snd_msg( ID mbxid, T_MSG *pk_msg );
ER rcv_msg( T_MSG *ppk_msg, ID mbxid );
ER prcv_msg( T_MSG *ppk_msg, ID mbxid );
//ER ref_mbx( T_MSG *ppk_msg, ID mbxid );
ER ref_mbx( T_RMBX *pk_rmbx, ID mbxid );
ER loc_cpu( void );
ER unl_cpu( void );
void ent_int( void );
void ret_int( void );
ER set_tim( SYSTIME *pk_tim );
ER get_tim( SYSTIME *pk_tim );
ER dly_tsk( DLYTIME dlytim );
ER pget_blf( VP *p_blk, ID mplid);
ER get_blf( VP *p_blk, ID mplid);
ER rel_blf( ID mplid, VP blk );
ER pget_blk( VP *p_blk, ID mplid, INT blksz);
ER get_blk( VP *p_blk, ID mplid, INT blksz);
ER rel_blk( ID mplid, VP blk );
void interrupt_timer( void );
ER get_ver( T_VER *pk_ver );
#ifdef DEBUG_OS
void set_dbgtrc(T_TSKCB *tsk, char* srvnm);
#endif
STATUS_REG InterruptDisable( void );
STATUS_REG InterruptEnable( void );
void set_SR( STATUS_REG SRkeep );
ER change_stack(T_CONTEXT **next, T_CONTEXT **last);
void copy_data (void *dest,void* sour,unsigned int num);
#endif /* #ifndef _RTOS_H */
/* end ///////////////////////////////////////////////////////////////////// */
#endif /* #ifndef _RTOS_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -