www.pudn.com > hos-v4_os.rar > knl_sem.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_sem_h__ 
#define __HOS_V4__knl_sem_h__ 
 
 
#include "knl_hos.h" 
 
 
 
/* ------------------------------------------ */ 
/*                  定数定義                  */ 
/* ------------------------------------------ */ 
 
/* IDの範囲 */ 
#define KERNEL_TMIN_SEMID	TMIN_SEMID			/* セマフォIDの最小値 */ 
#define KERNEL_TMAX_SEMID	(KERNEL_TMIN_SEMID + kernel_semcb_cnt - 1) 
												/* セマフォIDの最大値 */ 
 
 
 
/* ------------------------------------------ */ 
/*                 型定義                     */ 
/* ------------------------------------------ */ 
 
/* セマフォ生成情報 */ 
typedef struct t_csem 
{ 
	ATR  sematr;		/* セマフォ属性 */ 
	UINT isemcnt;		/* セマフォ資源数の初期値 */ 
	UINT maxsem;		/* セマフォの最大資源数 */ 
} T_CSEM; 
 
/* セマフォ状態情報 */ 
typedef struct t_rsem 
{ 
	ID   wtskid;		/* セマフォの待ち行列の先頭のタスクのID番号 */ 
	UINT semcnt;		/* セマフォの現在の資源数 */ 
} T_RSEM; 
 
 
/* セマフォコントロールブロック(ROM部) */ 
typedef struct t_kernel_semcb_rom 
{ 
	ATR  sematr;		/* セマフォ属性 */ 
	UINT isemcnt;		/* セマフォ資源数の初期値 */ 
	UINT maxsem;		/* セマフォの最大資源数 */ 
} T_KERNEL_SEMCB_ROM; 
 
/* セマフォコントロールブロック(RAM部) */ 
typedef struct t_kernel_semcb_ram 
{ 
	T_MKNL_QUE que;		/* セマフォ待ちタスクキュー */ 
	UINT       semcnt;	/* セマフォの資源数 */ 
	const T_KERNEL_SEMCB_ROM *semcb_rom;	/* セマフォコントロールブロックROM部へのポインタ */ 
} T_KERNEL_SEMCB_RAM; 
 
 
 
/* ---------------------------------- */ 
/*        グローバル変数宣言          */ 
/* ---------------------------------- */ 
 
/* セマフォ管理 */ 
extern       T_KERNEL_SEMCB_RAM *kernel_semcb_ram_tbl[];	/* セマフォコントロールブロックテーブル(RAM部) */ 
extern const INT kernel_semcb_cnt;							/* セマフォコントロールブロック個数 */ 
 
/* セマフォコントロールブロック変換マクロ */ 
#define KERNEL_SEMID_TO_SEMCB_RAM(semid)	(kernel_semcb_ram_tbl[(semid) - KERNEL_TMIN_SEMID]) 
															/* セマフォIDからSEMCB RAMアドレスを取得 */ 
 
 
 
/* ------------------------------------------ */ 
/*                関数宣言                    */ 
/* ------------------------------------------ */ 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
/* セマフォ */ 
void    kernel_ini_sem(void);								/* セマフォの初期化 */ 
ER      cre_sem(ID semid, const T_CSEM *pk_csem);			/* セマフォの生成 */ 
ER_ID   acre_sem(const T_CSEM *pk_csem);					/* セマフォの生成(ID番号自動割付け) */ 
ER      kernel_cre_sem(ID semid, const T_CSEM *pk_csem);	/* セマフォの生成(カーネル内部関数) */ 
ER      del_sem(ID semid);									/* セマフォの削除 */ 
ER      sig_sem(ID semid);									/* セマフォ資源の返却 */ 
#define isig_sem sig_sem									/* セマフォ資源の返却(非タスクコンテキスト用マクロ) */ 
ER      wai_sem(ID semid);									/* セマフォ資源の獲得 */ 
ER      pol_sem(ID semid);									/* セマフォ資源の獲得(ポーリング) */ 
ER      twai_sem(ID semid, TMO tmout);						/* セマフォ資源の獲得(タイムアウトあり) */ 
ER      ref_sem(ID semid, T_RSEM *pk_rsem);					/* セマフォの状態参照 */ 
 
#ifdef __cplusplus 
} 
#endif 
 
 
 
#endif	/* __HOS_V4__knl_sem_h__ */ 
 
 
/* ------------------------------------------------------------------------ */ 
/*  Copyright (C) 1998-2002 by Project HOS                                  */ 
/* ------------------------------------------------------------------------ */