www.pudn.com > hos-v4_os.rar > knl_mbf.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_mbf_h__ 
#define __HOS_V4__knl_mbf_h__ 
 
 
#include "knl_hos.h" 
 
 
 
/* ------------------------------------------ */ 
/*                  定数定義                  */ 
/* ------------------------------------------ */ 
 
/* IDの範囲 */ 
#define KERNEL_TMIN_MBFID	TMIN_MBFID			/* メッセージバッファIDの最小値 */ 
#define KERNEL_TMAX_MBFID	(KERNEL_TMIN_MBFID + kernel_mbfcb_cnt - 1) 
												/* メッセージバッファIDの最大値 */ 
 
 
 
/* ------------------------------------------ */ 
/*                 型定義                     */ 
/* ------------------------------------------ */ 
 
/* メッセージバッファ生成情報 */ 
typedef struct t_cmbf 
{ 
	ATR  mbfatr;		/* メッセージバッファ属性 */ 
	UINT maxmsz;		/* メッセージの最大サイズ(バイト数) */ 
	SIZE mbfsz;			/* メッセージバッファ領域のサイズ(バイト数) */ 
    VP   mbf;			/* メッセージバッファ領域の先頭番地 */ 
} T_CMBF; 
 
/* メッセージバッファ状態情報 */ 
typedef struct t_rmbf 
{ 
	ID   stskid;		/* メッセージバッファの送信待ち行列の先頭のタスクのID番号 */ 
	ID   rtskid;		/* メッセージバッファの受信待ち行列の先頭のタスクのID番号 */ 
	UINT smsgcnt;		/* メッセージバッファに入っているメッセージの数 */ 
	SIZE fmbfsz;		/* メッセージバッファ領域の空き領域のサイズ(バイト数、最低限の管理領域を除く) */ 
} T_RMBF; 
 
 
/* メッセージバッファコントロールブロック(ROM部) */ 
typedef struct t_kernel_mbfcb_rom 
{ 
	ATR  mbfatr;		/* メッセージバッファ属性 */ 
	UINT maxmsz;		/* メッセージの最大サイズ(バイト数) */ 
	SIZE mbfsz;			/* メッセージバッファ領域のサイズ(バイト数) */ 
    VP   mbf;			/* メッセージバッファ領域の先頭番地 */ 
} T_KERNEL_MBFCB_ROM; 
 
/* メッセージバッファコントロールブロック(RAM部) */ 
typedef struct t_kernel_mbfcb_ram 
{ 
	T_MKNL_QUE sndque;	/* メッセージバッファ送信待ちタスクキュー */ 
	T_MKNL_QUE rcvque;	/* メッセージバッファ受信待ちタスクキュー */ 
	SIZE       head;	/* 先頭メッセージの位置 */ 
	SIZE       fmbfsz;	/* メッセージバッファ領域の空きサイズ */ 
	UINT       smsgcnt;	/* メッセージバッファに入っているメッセージの数 */ 
	const T_KERNEL_MBFCB_ROM *mbfcb_rom;	/* メッセージバッファコントロールブロックROM部へのポインタ */ 
} T_KERNEL_MBFCB_RAM; 
 
/* 送信メッセージデータ情報 */ 
typedef struct t_kernel_mbfdat 
{ 
	UINT msgsz;			/* メッセージサイズ */ 
	VP   msg;			/* メッセージの先頭番地 */ 
} T_KERNEL_MBFDAT; 
 
 
 
/* ---------------------------------- */ 
/*        グローバル変数宣言          */ 
/* ---------------------------------- */ 
 
/* メッセージバッファ管理 */ 
extern       T_KERNEL_MBFCB_RAM *kernel_mbfcb_ram_tbl[];	/* メッセージバッファコントロールブロックテーブル(RAM部) */ 
extern const INT kernel_mbfcb_cnt;							/* メッセージバッファコントロールブロック個数 */ 
 
/* メッセージバッファコントロールブロック変換マクロ */ 
#define KERNEL_MBFID_TO_MBFCB_RAM(mbfid)	(kernel_mbfcb_ram_tbl[(mbfid) - KERNEL_TMIN_MBFID]) 
															/* メッセージバッファIDからMBFCB RAMアドレスを取得 */ 
 
 
 
/* ------------------------------------------ */ 
/*                 マクロ定義                 */ 
/* ------------------------------------------ */ 
 
/* メモリ領域のサイズ */ 
#define TSZ_MBF(msgcnt, msgsz)		((SIZE)((UINT)(msgcnt) * ((UINT)(msgsz) + 2) + 1)) 
 
 
 
/* ------------------------------------------ */ 
/*                関数宣言                    */ 
/* ------------------------------------------ */ 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
/* メッセージバッファ */ 
void    kernel_ini_mbf(void);								/* メッセージバッファの初期化 */ 
ER      cre_mbf(ID mbfid, const T_CMBF *pk_cmbf);			/* メッセージバッファの生成 */ 
ER_ID   acre_mbf(const T_CMBF *pk_cmbf);					/* メッセージバッファの生成(ID番号自動割付け) */ 
ER      kernel_cre_mbf(ID mbfid, const T_CMBF *pk_cmbf);	/* メッセージバッファの生成(カーネル内部関数) */ 
ER      del_mbf(ID mbfid);									/* メッセージバッファの削除 */ 
ER      snd_mbf(ID mbfid, VP msg, UINT msgsz);				/* メッセージバッファへの送信 */ 
ER      psnd_mbf(ID mbfid, VP msg, UINT msgsz);				/* メッセージバッファへの送信(ポーリング) */ 
ER      tsnd_mbf(ID mbfid, VP msg, UINT msgsz, TMO tmout);	/* メッセージバッファへの送信(タイムアウトあり) */ 
ER      kernel_snd_mbf(const T_KERNEL_MBFCB_ROM *mbfcb_rom, 
			T_KERNEL_MBFCB_RAM *mbfcb_ram, VP msg, UINT msgsz);	/* メッセージバッファへの送信(カーネル内部関数) */ 
ER_UINT rcv_mbf(ID mbfid, VP msg);							/* メッセージバッファからの受信 */ 
ER_UINT prcv_mbf(ID mbfid, VP msg);							/* メッセージバッファからの受信(ポーリング) */ 
ER_UINT trcv_mbf(ID mbfid, VP msg,  TMO tmout);				/* メッセージバッファからの受信(タイムアウトあり) */ 
ER_UINT kernel_rcv_mbf(const T_KERNEL_MBFCB_ROM *mbfcb_rom, 
			T_KERNEL_MBFCB_RAM *mbfcb_ram, VP msg);			/* メッセージバッファからの受信(カーネル内部関数) */ 
ER      ref_mbf(ID mbfid, T_RMBF *pk_rmbf);					/* メッセージバッファの状態参照 */ 
 
#ifdef __cplusplus 
} 
#endif 
 
 
 
#endif	/* __HOS_V4__knl_mbf_h__ */ 
 
 
/* ------------------------------------------------------------------------ */ 
/*  Copyright (C) 1998-2002 by Project HOS                                  */ 
/* ------------------------------------------------------------------------ */