www.pudn.com > hos-v4_os.rar > knl_mpf.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_mpf_h__ 
#define __HOS_V4__knl_mpf_h__ 
 
 
#include "knl_hos.h" 
 
 
 
/* ------------------------------------------ */ 
/*                  定数定義                  */ 
/* ------------------------------------------ */ 
 
/* IDの範囲 */ 
#define KERNEL_TMIN_MPFID	TMIN_MPFID			/* 固定長メモリプールIDの最小値 */ 
#define KERNEL_TMAX_MPFID	(KERNEL_TMIN_MPFID + kernel_mpfcb_cnt - 1) 
												/* 固定長メモリプールIDの最大値 */ 
 
 
 
/* ------------------------------------------ */ 
/*                 型定義                     */ 
/* ------------------------------------------ */ 
 
/* 固定長メモリプール生成情報 */ 
typedef struct t_cmpf 
{ 
	ATR  mpfatr;		/* 固定長メモリプール属性 */ 
	UINT blkcnt;		/* 獲得できるメモリブロック数(個数) */ 
	UINT blksz;			/* メモリブロックのサイズ(バイト数) */ 
	VP   mpf;			/* 固定長メモリプール領域の先頭番地 */ 
} T_CMPF; 
 
/* 固定長メモリプール状態 */ 
typedef struct t_rmpf 
{ 
	ID   wtskid;		/* 固定長メモリプールの待ち行列の先頭のタスクのID番号 */ 
	UINT fblkcnt;		/* 固定長メモリプールの空きメモリブロック数(個数) */ 
} T_RMPF; 
 
 
/* 固定長メモリプールコントロールブロック(ROM部) */ 
typedef struct t_kernel_mpfcb_rom 
{ 
	ATR  mpfatr;		/* 固定長メモリプール属性 */ 
	UINT blkcnt;		/* 獲得できるメモリブロック数(個数) */ 
	UINT blksz;			/* メモリブロックのサイズ(バイト数) */ 
	VP   mpf;			/* 固定長メモリプール領域の先頭番地 */ 
} T_KERNEL_MPFCB_ROM; 
 
 
/* 固定長メモリプールコントロールブロック(RAM部) */ 
typedef struct t_kernel_mpfcb_ram 
{ 
	T_MKNL_QUE que;		/* 固定長メモリプール待ちタスクキュー */ 
	VP         free;	/* 空きブロックへのポインタ */ 
	const T_KERNEL_MPFCB_ROM *mpfcb_rom;	/* 固定長メモリプールコントロールブロックROM部へのポインタ */ 
} T_KERNEL_MPFCB_RAM; 
 
 
 
/* ---------------------------------- */ 
/*        グローバル変数宣言          */ 
/* ---------------------------------- */ 
 
/* 固定長メモリプール管理 */ 
extern       T_KERNEL_MPFCB_RAM *kernel_mpfcb_ram_tbl[];	/* 固定長メモリプールコントロールブロックテーブル(RAM部) */ 
extern const INT kernel_mpfcb_cnt;							/* 固定長メモリプールコントロールブロック個数 */ 
 
/* 固定長メモリプールコントロールブロック変換マクロ */ 
#define KERNEL_MPFID_TO_MPFCB_RAM(mpfid)	(kernel_mpfcb_ram_tbl[(mpfid) - KERNEL_TMIN_MPFID]) 
															/* 固定長メモリプールIDからMPFCB RAMアドレスを取得 */ 
 
 
 
/* ------------------------------------------ */ 
/*                関数宣言                    */ 
/* ------------------------------------------ */ 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
/* 固定長メモリプール */ 
void    kernel_ini_mpf(void);								/* 固定長メモリプールの初期化 */ 
ER      cre_mpf(ID mpfid, const T_CMPF *pk_cmpf);			/* 固定長メモリプールの生成 */ 
ER_ID   acre_mpf(const T_CMPF *pk_cmpf);					/* 固定長メモリプールの生成(ID番号自動割付け) */ 
ER      kernel_cre_mpf(ID mpfid, const T_CMPF *pk_cmpf);	/* 固定長メモリプールの生成(カーネル内部関数) */ 
ER      del_mpf(ID mpfid);									/* 固定長メモリプールの削除 */ 
ER      get_mpf(ID mpfid, VP *p_blk);						/* 固定長メモリブロックの獲得 */ 
ER      pget_mpf(ID mpfid, VP *p_blk);						/* 固定長メモリブロックの獲得(ポーリング) */ 
ER      tget_mpf(ID mpfid, VP *p_blk, TMO tmout);			/* 固定長メモリブロックの獲得(タイムアウトあり) */ 
ER      rel_mpf(ID mpfid, VP blk);							/* 固定長メモリブロックの返却 */ 
ER      ref_mpf(ID mpfid, T_RMPF *pk_rmpf);					/* 固定長メモリブロックの状態参照 */ 
 
#ifdef __cplusplus 
} 
#endif 
 
 
 
#endif	/* __HOS_V4__knl_mpf_h__ */ 
 
 
/* ------------------------------------------------------------------------ */ 
/*  Copyright (C) 1998-2002 by Project HOS                                  */ 
/* ------------------------------------------------------------------------ */