From cb364d94b8eea9672661cc16db6f3d7e8416bc0f Mon Sep 17 00:00:00 2001 From: ryuz Date: Sun, 17 Sep 2006 08:29:27 +0000 Subject: [PATCH] (none) --- document/arch.txt | 81 ++++++++++++++++++++++++++++++++++ kernel/build/win/win32/vc60/hosv4a.dsp | 16 +++++++ kernel/include/core/adtq.h | 69 +++++++++++++++++++++++++++++ kernel/source/core/adtq/rcv_adtq.c | 34 ++++++++++++++ kernel/source/core/adtq/ref_fadq.c | 24 ++++++++++ kernel/source/core/adtq/ref_sadq.c | 22 +++++++++ kernel/source/core/adtq/snd_adtq.c | 37 ++++++++++++++++ 7 files changed, 283 insertions(+) create mode 100755 document/arch.txt create mode 100755 kernel/include/core/adtq.h create mode 100755 kernel/source/core/adtq/rcv_adtq.c create mode 100755 kernel/source/core/adtq/ref_fadq.c create mode 100755 kernel/source/core/adtq/ref_sadq.c create mode 100755 kernel/source/core/adtq/snd_adtq.c diff --git a/document/arch.txt b/document/arch.txt new file mode 100755 index 0000000..17ca48b --- /dev/null +++ b/document/arch.txt @@ -0,0 +1,81 @@ +<分類案> + 近いプロセッサでも微妙に、退避復帰のレジスタやOSに便利な命令が +増えてたりするのでなるべく細かく切っておく。 + +sh + sh1 + sh2 + sh2e + sh2a + sh2afpu + sh2dsp + sh3 + sh3dsp + sh4 + sh4a + sh4aldsp + +h8 + h8300 + h8300hn + h8300ha + h8s2000n + h8s2000a + h8s2600n + h8s2600a + h8sxx + h8sxa + h8sxm + h8sxmn + +arm (VFPの扱いどうしよう?) + arm_v4 + arm_v4t + arm_v5t + arm_v5te + arm_v5tej + arm_v6 + arm_v6k + arm_v6t2 + arm_v6kz + arm_v7 + +x86 (IA-32の一部というべき? コプロの扱いどないしょ?) + 8086 + 80186 + 80286 + +ia32 (MMXとかいろいろあるので486以降はよーわからん... orz) + 80386 + 80486 + +ia64 + (いよいよわからん...) + +z80 + z80 + +mn103 + mn1030 + mn103s + mn103e + + +nios (ソフト開発だけならロハ?) + nios1_16 + nios1_32 + nios2 + +mc68000 実は68k触ったこと無いのでよく知らなかったり (^^;;; + +mips mipsも触ったこと無いなぁ... + mips1 + mips2 + mips3 + mips4 + mips32 + mips64 + + + + diff --git a/kernel/build/win/win32/vc60/hosv4a.dsp b/kernel/build/win/win32/vc60/hosv4a.dsp index a84f023..ed57ae8 100755 --- a/kernel/build/win/win32/vc60/hosv4a.dsp +++ b/kernel/build/win/win32/vc60/hosv4a.dsp @@ -132,10 +132,18 @@ SOURCE=..\..\..\..\include\object\tskobj.h # PROP Default_Filter "" # Begin Source File +SOURCE=..\..\..\..\include\core\adtq.h +# End Source File +# Begin Source File + SOURCE=..\..\..\..\include\core\basetyp.h # End Source File # Begin Source File +SOURCE=..\..\..\..\include\core\chkptr.h +# End Source File +# Begin Source File + SOURCE=..\..\..\..\include\core\cmpl.h # End Source File # Begin Source File @@ -398,6 +406,14 @@ SOURCE=..\..\..\..\source\core\tmq\rmv_tmq.c SOURCE=..\..\..\..\source\core\tmq\sig_tmq.c # End Source File # End Group +# Begin Group "adtq" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=..\..\..\..\source\core\adtq\snd_adtq.c +# End Source File +# End Group # End Group # Begin Group "object" diff --git a/kernel/include/core/adtq.h b/kernel/include/core/adtq.h new file mode 100755 index 0000000..6c898aa --- /dev/null +++ b/kernel/include/core/adtq.h @@ -0,0 +1,69 @@ +/** + * Hyper Operating System V4 Advance + * + * @file adtq.h + * @brief %jp{非同期データキューヘッダファイル}%en{Asynchronous Data Queue header file} + * + * @version $Id: adtq.h,v 1.1 2006-09-17 08:29:27 ryuz Exp $ + * + * %jp{送信側、及び、受信側でロック(割り込み禁止など)を利用しなくても成立するキュー} + * %jp{データ領域が1つ無駄になるのでメモリ効率で若干不利} + * %jp{DPC向けだが、将来DTQとの共用も可能なように切り出しておく} + * + * Copyright (C) 1998-2006 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + +#ifndef _KERNEL__core__adtq_h__ +#define _KERNEL__core__adtq_h__ + + +typedef UINT _KERNEL_ADTQ_T_POSITION; +typedef volatile UINT _KERNEL_ADTQCB_T_POSITION; +#define _KERNEL_DTQCB_TBITDEF_POSITION + +typedef UINT _KERNEL_ADTQ_T_ADTQCNT; +typedef volatile UINT _KERNEL_ADTQCB_T_ADTQCNT; +#define _KERNEL_DTQCB_TBITDEF_DTQCNT + + + +typedef struct _kernel_t_adtqcb +{ + _KERNEL_ADTQCB_T_POSITION head _KERNEL_DTQCB_TBITDEF_POSITION; /**< %jp{データキューの先頭位置} */ + _KERNEL_ADTQCB_T_POSITION tail _KERNEL_DTQCB_TBITDEF_POSITION; /**< %jp{データキューの末尾位置} */ + _KERNEL_ADTQCB_T_ADTQCNT adtqcnt _KERNEL_DTQCB_TBITDEF_DTQCNT; /**< %jp{データキュー領域のサイズ(VP_INT単位) */ + VP_INT *adtq; /**< %jp{データキュー領域の先頭アドレス} */ +} _KERNEL_T_ADTQCB; + + +#define _KERNEL_ADTQ_SET_HEAD(adtqcb, x) do { (adtqcb)->head = (x); } while (0) +#define _KERNEL_ADTQ_GET_HEAD(adtqcb) ((adtqcb)->head) +#define _KERNEL_ADTQ_SET_TAIL(adtqcb, x) do { (adtqcb)->tail = (x); } while (0) +#define _KERNEL_ADTQ_GET_TAIL(adtqcb) ((adtqcb)->tail) +#define _KERNEL_ADTQ_SET_ADTQCNT(adtqcb, x) do { (adtqcb)->adtqcnt = (x); } while (0) +#define _KERNEL_ADTQ_GET_ADTQCNT(adtqcb) ((adtqcb)->adtqcnt) +#define _KERNEL_ADTQ_SET_ADTQ(adtqcb, x) do { (adtqcb)->adtq = (x); } while (0) +#define _KERNEL_ADTQ_GET_ADTQ(adtqcb) ((adtqcb)->adtq) + + + +#ifdef __cplusplus +extern "C" { +#endif + +BOOL _kernel_adtq_snd_dat(_KERNEL_T_ADTQCB *adtqcb, VP_INT data); +BOOL _kernel_adtq_rcv_dat(_KERNEL_T_ADTQCB *adtqcb, VP_INT *p_data); +_KERNEL_ADTQ_T_ADTQCNT _kernel_adtq_ref_fdtqnt(_KERNEL_T_ADTQCB *adtqcb); +_KERNEL_ADTQ_T_ADTQCNT _kernel_adtq_ref_sdtqnt(_KERNEL_T_ADTQCB *adtqcb); + +#ifdef __cplusplus +} +#endif + + +#endif /* _KERNEL__core__adtq_h__ */ + + +/* end of file */ diff --git a/kernel/source/core/adtq/rcv_adtq.c b/kernel/source/core/adtq/rcv_adtq.c new file mode 100755 index 0000000..0c9ed93 --- /dev/null +++ b/kernel/source/core/adtq/rcv_adtq.c @@ -0,0 +1,34 @@ +#include "core/core.h" +#include "core/adtq.h" + + + +BOOL _kernel_adtq_rcv_dat(_KERNEL_T_ADTQCB *adtqcb, VP_INT *p_data) +{ + _KERNEL_ADTQ_T_POSITION head; + VP_INT *adtq; + + /* %jp{先頭位置取得} */ + head = _KERNEL_ADTQ_GET_HEAD(adtqcb); + + /* %jp{データチェック} */ + if ( head == _KERNEL_ADTQ_GET_TAIL(adtqcb) ) + { + return FALSE; /* %jp{データ無し} */ + } + + /* %jp{データ取り出し} */ + adtq = _KERNEL_ADTQ_GET_ADTQ(adtqcb); + *p_data = adtq[tail]; + + /* %jp{次の末尾位置計算} */ + head++; + if ( head >= _KERNEL_ADTQ_GET_ADTQCNT(adtqcb) ) + { + head = 0; + } + + /* %jp{先頭位置更新} */ + _KERNEL_ADTQ_SET_HEAD(adtqcb, head); +} + diff --git a/kernel/source/core/adtq/ref_fadq.c b/kernel/source/core/adtq/ref_fadq.c new file mode 100755 index 0000000..42dd03c --- /dev/null +++ b/kernel/source/core/adtq/ref_fadq.c @@ -0,0 +1,24 @@ +#include "core/core.h" +#include "core/adtq.h" + + + +_KERNEL_ADTQ_T_ADTQCNT _kernel_adtq_ref_fdtqnt(_KERNEL_T_ADTQCB *adtqcb) +{ + _KERNEL_ADTQ_T_POSITION head; + _KERNEL_ADTQ_T_POSITION tail; + + head = _KERNEL_ADTQ_GET_HEAD(adtqcb); + tail = _KERNEL_ADTQ_GET_TAIL(adtqcb); + + if ( tail < head ) + { + return head - tail - 1; + } + else + { + return _KERNEL_ADTQ_GET_ADTQCNT(adtqcb) + head - tail - 1; + } +} + + diff --git a/kernel/source/core/adtq/ref_sadq.c b/kernel/source/core/adtq/ref_sadq.c new file mode 100755 index 0000000..6ee8ecc --- /dev/null +++ b/kernel/source/core/adtq/ref_sadq.c @@ -0,0 +1,22 @@ +#include "core/core.h" +#include "core/adtq.h" + + +_KERNEL_ADTQ_T_ADTQCNT _kernel_adtq_ref_sdtqnt(_KERNEL_T_ADTQCB *adtqcb) +{ + _KERNEL_ADTQ_T_POSITION head; + _KERNEL_ADTQ_T_POSITION tail; + + head = _KERNEL_ADTQ_GET_HEAD(adtqcb); + tail = _KERNEL_ADTQ_GET_TAIL(adtqcb); + + if ( tail >= head ) + { + return tail - head; + } + else + { + return _KERNEL_ADTQ_GET_ADTQCNT(adtqcb) + tail - head; + } +} + diff --git a/kernel/source/core/adtq/snd_adtq.c b/kernel/source/core/adtq/snd_adtq.c new file mode 100755 index 0000000..7508593 --- /dev/null +++ b/kernel/source/core/adtq/snd_adtq.c @@ -0,0 +1,37 @@ +#include "core/core.h" +#include "core/adtq.h" + + +BOOL _kernel_adtq_snd_dat(_KERNEL_T_ADTQCB *adtqcb, VP_INT data) +{ + _KERNEL_ADTQ_T_POSITION tail; + _KERNEL_ADTQ_T_POSITION tail_next; + VP_INT *adtq; + + /* %jp{末尾位置取得} */ + tail = _KERNEL_ADTQ_GET_TAIL(adtqcb); + + /* %jp{次の末尾位置計算} */ + tail_next = tail + 1; + if ( tail_next >= _KERNEL_ADTQ_GET_ADTQCNT(adtqcb) ) + { + tail_next = 0; + } + + /* %jp{空き容量} */ + if ( tail == _KERNEL_ADTQ_GET_HEAD(adtqcb) ) + { + return FALSE; + } + + /* %jp{データ格納} */ + adtq = _KERNEL_ADTQ_GET_ADTQ(adtqcb); + adtq[tail] = data; + + /* %jp{末尾位置更新} */ + _KERNEL_ADTQ_SET_TAIL(adtqcb, tail_next); + + return TRUE; +} + + -- 2.11.0