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 */
/* ------------------------------------------------------------------------ */