www.pudn.com > hos-v4_os.rar > knl_flg.h


/* ------------------------------------------------------------------------ */ 
/*  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                  */ 
/*    カーネル依存情報定義ヘッダ イベントフラグ                             */ 
/*                                                                          */ 
/*                                  Copyright (C) 1998-2002 by Project HOS  */ 
/*                                  http://sourceforge.jp/projects/hos/     */ 
/* ------------------------------------------------------------------------ */ 
 
 
#ifndef __HOS_V4__knl_flg_h__ 
#define __HOS_V4__knl_flg_h__ 
 
 
#include "knl_hos.h" 
 
 
 
/* ------------------------------------------ */ 
/*                  定数定義                  */ 
/* ------------------------------------------ */ 
 
/* IDの範囲 */ 
#define KERNEL_TMIN_FLGID	TMIN_FLGID			/* イベントフラグIDの最小値 */ 
#define KERNEL_TMAX_FLGID	(KERNEL_TMIN_FLGID + kernel_flgcb_cnt - 1) 
												/* イベントフラグIDの最大値 */ 
 
/* ビットパターンのビット数 */ 
#define TBIT_FLGPTN			16					/* イベントフラグのビット数 */ 
 
 
 
/* ------------------------------------------ */ 
/*                 型定義                     */ 
/* ------------------------------------------ */ 
 
/* イベントフラグ生成情報 */ 
typedef struct t_cflg 
{ 
	ATR    flgatr;		/* イベントフラグ属性 */ 
	FLGPTN iflgptn;		/* イベントフラグのビットパターンの初期値 */ 
} T_CFLG; 
 
/* イベントフラグ状態 */ 
typedef struct t_rflg 
{ 
	ID     wtskid;		/* イベントフラグの待ち行列の先頭のタスクのID番号 */ 
	FLGPTN flgptn;		/* イベントフラグの現在のビットパターン */ 
} T_RFLG; 
 
 
/* イベントフラグコントロールブロック(ROM部) */ 
typedef struct t_kernel_flgcb_rom 
{ 
	ATR    flgatr;		/* イベントフラグ属性 */ 
	FLGPTN iflgptn;		/* イベントフラグのビットパターンの初期値 */ 
} T_KERNEL_FLGCB_ROM; 
 
/* イベントフラグコントロールブロック(RAM部) */ 
typedef struct t_kernel_flgcb_ram 
{ 
	T_MKNL_QUE que;			/* イベントフラグ待ち行列 */ 
	FLGPTN     flgptn;		/* イベントフラグのビットパターン */ 
	const T_KERNEL_FLGCB_ROM* flgcb_rom;	/* イベントフラグコントロールブロックROM部へのポインタ */ 
} T_KERNEL_FLGCB_RAM; 
 
 
/* 待ちフラグ情報構造体 */ 
typedef struct t_kernel_flginf 
{ 
	MODE   wfmode;		/* 待ちモード */ 
	FLGPTN waiptn;		/* 待ちビットパターン(解除時パターンと兼用) */ 
} T_KERNEL_FLGINF; 
 
 
 
/* ---------------------------------- */ 
/*        グローバル変数宣言          */ 
/* ---------------------------------- */ 
 
/* イベントフラグ管理 */ 
extern       T_KERNEL_FLGCB_RAM *kernel_flgcb_ram_tbl[];	/* イベントフラグコントロールブロックテーブル(RAM部) */ 
extern const INT kernel_flgcb_cnt;							/* イベントフラグコントロールブロック個数 */ 
 
#define KERNEL_FLGID_TO_FLGCB_RAM(flgid)	(kernel_flgcb_ram_tbl[(flgid) - KERNEL_TMIN_FLGID]) 
															/* イベントフラグIDからFLGCB RAMアドレスを取得 */ 
 
 
 
/* ------------------------------------------ */ 
/*                関数宣言                    */ 
/* ------------------------------------------ */ 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
/* イベントフラグ */ 
void    kernel_ini_flg(void);								/* イベントフラグの初期化 */ 
ER      cre_flg(ID flgid, const T_CFLG *pk_cflg);			/* イベントフラグの生成 */ 
ER_ID   acre_flg(const T_CFLG *pk_cflg);					/* イベントフラグの生成(ID番号自動割付け) */ 
ER      kernel_cre_flg(ID flgid, const T_CFLG *pk_cflg);	/* イベントフラグの生成(カーネル内部関数) */ 
ER      del_flg(ID flgid);									/* イベントフラグの削除 */ 
ER      set_flg(ID flgid, FLGPTN setptn);					/* イベントフラグのセット */ 
#define iset_flg	set_flg									/* イベントフラグのセット(非タスクコンテキスト用マクロ) */ 
ER      clr_flg(ID flgid, FLGPTN clrptn);					/* イベントフラグのクリア */ 
ER      wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn); 
															/* イベントフラグ待ち */ 
ER      pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn); 
															/* イベントフラグ待ち(ポーリング) */ 
ER      twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout); 
															/* イベントフラグ待ち(タイムアウトあり) */ 
ER      ref_flg(ID flgid, T_RFLG *pk_rflg);					/* イベントフラグの状態参照 */ 
BOOL    kernel_chk_flg(T_KERNEL_FLGCB_RAM *flgcb_ram, T_KERNEL_FLGINF *pk_flginf); 
															/* フラグが起床条件を満たしているかチェック */ 
 
#ifdef __cplusplus 
} 
#endif 
 
 
 
#endif	/* __HOS_V4__knl_flg_h__ */ 
 
 
/* ------------------------------------------------------------------------ */ 
/*  Copyright (C) 1998-2002 by Project HOS                                  */ 
/* ------------------------------------------------------------------------ */