www.pudn.com > hos-v4_os.rar > knl_dtq.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_dtq_h__
#define __HOS_V4__knl_dtq_h__
#include "knl_hos.h"
/* ------------------------------------------ */
/* 定数定義 */
/* ------------------------------------------ */
/* IDの範囲 */
#define KERNEL_TMIN_DTQID TMIN_DTQID /* データキューIDの最小値 */
#define KERNEL_TMAX_DTQID (KERNEL_TMIN_DTQID + kernel_dtqcb_cnt - 1)
/* データキューIDの最大値 */
/* ------------------------------------------ */
/* マクロ定義 */
/* ------------------------------------------ */
/* メモリ領域のサイズ */
#define TSZ_DTQ(dtqcnt) ((SIZE)((UINT)(dtqcnt) * sizeof(VP_INT)))
/* ------------------------------------------ */
/* 型定義 */
/* ------------------------------------------ */
/* データキュー生成情報 */
typedef struct t_cdtq
{
ATR dtqatr; /* データキュー属性 */
UINT dtqcnt; /* データキュー領域の容量(データの個数) */
VP dtq; /* データキュー領域の先頭番地 */
} T_CDTQ;
/* データキュー状態 */
typedef struct t_rdtq
{
ID stskid; /* データキューの送信待ち行列の先頭のタスクのID番号 */
ID rtskid; /* データキューの受信待ち行列の先頭のタスクのID番号 */
UINT sdtqcnt; /* データキューに入っているデータの数 */
} T_RDTQ;
/* データキューコントロールブロック(ROM部) */
typedef struct t_kernel_dtqcb_rom
{
ATR dtqatr; /* データキュー属性 */
UINT dtqcnt; /* データキュー領域の容量(データの個数) */
VP_INT *dtq; /* データキュー領域の先頭番地 */
} T_KERNEL_DTQCB_ROM;
/* データキューコントロールブロック(RAM部) */
typedef struct t_kernel_dtqcb_ram
{
T_MKNL_QUE sndque; /* データキュー送信待ちタスクキュー */
T_MKNL_QUE rcvque; /* データキュー送信待ちタスクキュー */
UINT head; /* データの先頭 */
UINT datacnt; /* データの個数 */
const T_KERNEL_DTQCB_ROM *dtqcb_rom; /* データキューコントロールブロックROM部へのポインタ */
} T_KERNEL_DTQCB_RAM;
/* ---------------------------------- */
/* グローバル変数宣言 */
/* ---------------------------------- */
/* データキュー管理 */
extern T_KERNEL_DTQCB_RAM *kernel_dtqcb_ram_tbl[]; /* データキューコントロールブロックテーブル(RAM部) */
extern const INT kernel_dtqcb_cnt; /* データキューコントロールブロック個数 */
/* データキューコントロールブロック変換マクロ */
#define KERNEL_DTQID_TO_DTQCB_RAM(dtqid) (kernel_dtqcb_ram_tbl[(dtqid) - KERNEL_TMIN_DTQID])
/* データキューIDからDTQCB RAMアドレスを取得 */
/* ------------------------------------------ */
/* 関数宣言 */
/* ------------------------------------------ */
#ifdef __cplusplus
extern "C" {
#endif
/* データキュー */
#define kernel_ini_dtq() /* データキューの初期化 */
ER cre_dtq(ID dtqid, const T_CDTQ *pk_cdtq); /* データキューの生成 */
ER_ID acre_dtq(const T_CDTQ *pk_cdtq); /* データキューの生成(ID番号自動割付け) */
ER kernel_cre_dtq(ID dtqid, const T_CDTQ *pk_cdtq); /* データキューの生成(カーネル内部関数) */
ER del_dtq(ID dtqid); /* データキューの削除 */
ER snd_dtq(ID dtqid, VP_INT data); /* データキューへの送信 */
ER psnd_dtq(ID dtqid, VP_INT data); /* データキューへの送信(ポーリング) */
#define ipsnd_dtq psnd_dtq /* データキューへの送信(ポーリング 非タスクコンテキスト用マクロ) */
ER tsnd_dtq(ID dtqid, VP_INT data, TMO tmout); /* データキューへの送信(タイムアウトあり) */
ER fsnd_dtq(ID dtqid, VP_INT data); /* データキューへの強制送信 */
#define ifsnd_dtq fsnd_dtq /* データキューへの強制送信(非タスクコンテキスト用マクロ) */
ER rcv_dtq(ID dtqid, VP_INT *p_data); /* データキューからの受信 */
ER prcv_dtq(ID dtqid, VP_INT *p_data); /* データキューからの受信(ポーリング) */
ER trcv_dtq(ID dtqid, VP_INT *p_data, TMO tmout); /* データキューからの受信(タイムアウトあり) */
ER ref_dtq(ID dtqid, T_RDTQ *pk_rdtq); /* データキューの状態参照 */
#ifdef __cplusplus
}
#endif
#endif /* __HOS_V4__knl_dtq_h__ */
/* ------------------------------------------------------------------------ */
/* Copyright (C) 1998-2002 by Project HOS */
/* ------------------------------------------------------------------------ */