www.pudn.com > hos-v4_os.rar > knl_mbx.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_mbx_h__ 
#define __HOS_V4__knl_mbx_h__ 
 
 
#include "knl_hos.h" 
 
 
 
/* ------------------------------------------ */ 
/*                  定数定義                  */ 
/* ------------------------------------------ */ 
 
/* IDの範囲 */ 
#define KERNEL_TMIN_MBXID	TMIN_MBXID			/* メールボックスIDの最小値 */ 
#define KERNEL_TMAX_MBXID	(KERNEL_TMIN_MBXID + kernel_mbxcb_cnt - 1) 
												/* メールボックスIDの最大値 */ 
 
 
/* 優先度の範囲 */ 
#define TMIN_MPRI			1					/* メッセージ優先度の最小値 */ 
#define TMAX_MPRI			32767				/* メッセージ優先度の最大値 */ 
 
/* 必要なメモリ領域のサイズ */ 
#define TSZ_MPRIHD(maxmpri)	(sizeof(T_MSG *) * ((maxmpri) - TMIN_MPRI + 1)) 
												/* 優先度別キューヘッダのメモリ領域のサイズ */ 
 
 
 
/* ------------------------------------------ */ 
/*                 型定義                     */ 
/* ------------------------------------------ */ 
 
/* メールボックスのメッセージヘッダ */ 
typedef struct t_msg 
{ 
	struct t_msg *next;		/* 次のメッセージへのポインタ */ 
} T_MSG; 
 
/* メールボックスの優先度付きメッセージヘッダ */ 
typedef struct t_msg_pri 
{ 
	T_MSG msg;				/* メッセージヘッダ */ 
	PRI   msgpri;			/* メッセージ優先度 */ 
} T_MSG_PRI; 
 
 
/* メールボックス生成情報 */ 
typedef struct t_cmbx 
{ 
	ATR   mbxatr;		/* メールボックス属性 */ 
	PRI   maxmpri;		/* 送信されるメッセージの優先度の最大値 */ 
	VP    mprihd;		/* 優先度別のメッセージキューヘッダ領域の先頭番地 */ 
} T_CMBX; 
 
/* メールボックス状態 */ 
typedef struct t_rmbx 
{ 
	ID    wtskid;		/* メールボックスの待ち行列の先頭のタスクのID番号 */ 
	T_MSG *pk_msg;		/* メッセージキューの先頭のメッセージパケットの先頭番地 */ 
} T_RMBX; 
 
 
/* メールボックスコントロールブロック(ROM部) */ 
typedef struct t_kernel_mbxcb_rom 
{ 
	ATR   mbxatr;		/* メールボックス属性 */ 
	PRI   maxmpri;		/* 送信されるメッセージの優先度の最大値 */ 
	T_MSG **mprihd;		/* 優先度別のメッセージキューヘッダ領域の先頭番地 */ 
} T_KERNEL_MBXCB_ROM; 
 
/* メールボックスコントロールブロック(RAM部) */ 
typedef struct t_kernel_mbxcb_ram 
{ 
	T_MKNL_QUE que;							/* メールボックス待ちタスクキュー */ 
	const T_KERNEL_MBXCB_ROM *mbxcb_rom;	/* メールボックスコントロールブロックROM部へのポインタ */ 
} T_KERNEL_MBXCB_RAM; 
 
 
 
/* ---------------------------------- */ 
/*        グローバル変数宣言          */ 
/* ---------------------------------- */ 
 
/* メールボックス管理 */ 
extern       T_KERNEL_MBXCB_RAM *kernel_mbxcb_ram_tbl[];	/* メールボックスコントロールブロックテーブル(RAM部) */ 
extern const INT kernel_mbxcb_cnt;							/* メールボックスコントロールブロック個数 */ 
 
#define KERNEL_MBXID_TO_MBXCB_RAM(mbxid)	(kernel_mbxcb_ram_tbl[(mbxid) - KERNEL_TMIN_MBXID]) 
															/* メールボックスIDからMBXCB RAMアドレスを取得 */ 
 
 
 
/* ------------------------------------------ */ 
/*                関数宣言                    */ 
/* ------------------------------------------ */ 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
/* メールボックス */ 
#define kernel_ini_mbx()									/* メールボックスの初期化 */ 
ER      cre_mbx(ID semid, const T_CMBX *pk_cmbx);			/* セマフォの生成 */ 
ER_ID   acre_mbx(const T_CMBX *pk_cmbx);					/* セマフォの生成(ID番号自動割付け) */ 
ER      kernel_cre_mbx(ID mbxid, const T_CMBX *pk_cmbx);	/* セマフォの生成(カーネル内部関数) */ 
ER      del_mbx(ID semid);									/* セマフォの削除 */ 
ER      snd_mbx(ID mbxid, T_MSG *pk_msg);					/* メールボックスへの送信 */ 
ER      rcv_mbx(ID mbxid, T_MSG **ppk_msg);					/* メールボックスからの受信 */ 
ER      prcv_mbx(ID mbxid, T_MSG **ppk_msg);				/* メールボックスからの受信(ポーリング) */ 
ER      trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout);		/* メールボックスからの受信(タイムアウトあり) */ 
ER      ref_mbx(ID mbxid, T_RMBX *pk_rmbx);					/* メールボックスの状態参照 */ 
 
#ifdef __cplusplus 
} 
#endif 
 
 
 
#endif	/*__HOS_V4__knl_mbx_h__ */ 
 
 
/* ------------------------------------------------------------------------ */ 
/*  Copyright (C) 1998-2002 by Project HOS                                  */ 
/* ------------------------------------------------------------------------ */