From 4bbe7aa77a1ac5d879e49eec0aa760eecc6cd5d9 Mon Sep 17 00:00:00 2001 From: ryuz Date: Thu, 17 May 2007 16:10:56 +0000 Subject: [PATCH] (none) --- aplfw/sample/arm/ez_arm7/sample.c | 10 +-- aplfw/system/shell/shell.c | 16 +++- kernel/source/object/mpf/acre_mpf.c | 10 +-- kernel/source/object/mpf/get_mpf.c | 25 ++++++ kernel/source/object/mpf/pget_mpf.c | 35 +++++++-- kernel/source/object/mpf/tget_mpf.c | 149 ++++++++++++++++++++++++++++++++++++ 6 files changed, 227 insertions(+), 18 deletions(-) create mode 100755 kernel/source/object/mpf/tget_mpf.c diff --git a/aplfw/sample/arm/ez_arm7/sample.c b/aplfw/sample/arm/ez_arm7/sample.c index 64c250a..e4eba27 100755 --- a/aplfw/sample/arm/ez_arm7/sample.c +++ b/aplfw/sample/arm/ez_arm7/sample.c @@ -22,11 +22,11 @@ #include "system/shell/shell.h" #include "driver/serial/pc16550/pc16550drv.h" #include "driver/console/vt100/vt100drv.h" -#include "apl/hello/hello.h" -#include "apl/util/memdump/memdump.h" -#include "apl/util/memwrite/memwrite.h" -#include "apl/util/memtest/memtest.h" -#include "apl/util/keytest/keytest.h" +#include "application/example/hello/hello.h" +#include "application/utility/memdump/memdump.h" +#include "application/utility/memwrite/memwrite.h" +#include "application/utility/memtest/memtest.h" +#include "application/utility/keytest/keytest.h" long g_SystemHeap[64 * 1024 / sizeof(long)]; diff --git a/aplfw/system/shell/shell.c b/aplfw/system/shell/shell.c index 95bca43..c3daf25 100755 --- a/aplfw/system/shell/shell.c +++ b/aplfw/system/shell/shell.c @@ -13,8 +13,8 @@ #include "system/command/command.h" -#define SHELL_MAX_COMMAND 256 -#define SHELL_MAX_HISTORY 4 +#define SHELL_MAX_COMMAND 128 +#define SHELL_MAX_HISTORY 8 typedef struct c_shell @@ -81,6 +81,8 @@ void Shell_Delete(C_SHELL *self) int Shell_Execute(C_SHELL *self, int argc, char *argv[]) { + int i; + for ( ; ; ) { /* コマンド入力 */ @@ -98,6 +100,16 @@ int Shell_Execute(C_SHELL *self, int argc, char *argv[]) continue; } + /* ヒストリ重複削除 */ + for ( i = 0; i < self->iHistoryNum; i++ ) + { + if ( strcmp(self->szHistory[i], self->szCommanBuf) == 0 ) + { + memmove(self->szHistory[i], self->szHistory[i+1], (SHELL_MAX_HISTORY-i-1)*(SHELL_MAX_COMMAND)); + self->iHistoryNum--; + } + } + /* ヒストリ記憶 */ memmove(self->szHistory[1], self->szHistory[0], (SHELL_MAX_HISTORY-1)*(SHELL_MAX_COMMAND)); strcpy(self->szHistory[0], self->szCommanBuf); diff --git a/kernel/source/object/mpf/acre_mpf.c b/kernel/source/object/mpf/acre_mpf.c index 4dec801..52efeb7 100755 --- a/kernel/source/object/mpf/acre_mpf.c +++ b/kernel/source/object/mpf/acre_mpf.c @@ -2,7 +2,7 @@ * Hyper Operating System V4 Advance * * @file acre_mpf.c - * @brief %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} + * @brief %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create fixed-sized memory pool(ID Number Automatic Assignment)} * * Copyright (C) 1998-2006 by Project HOS * http://sourceforge.jp/projects/hos/ @@ -17,10 +17,10 @@ #if _KERNEL_SPT_ACRE_MPF -/** %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} - * @param pk_cmpf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mpfaphore creation information} - * @retval %jp{正の値}%en{positiv-value} %jp{生成した固定長メモリプールのID番号}%en{ID number of the created mpfaphore} - * @retval E_NOID %jp{ID番号不足(割付可能な固定長メモリプールIDが無い)}%en{No ID number available(there id no mpfaphore ID assignable)} +/** %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create fixed-sized memory pool(ID Number Automatic Assignment)} + * @param pk_cmpf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the fixed-sized memory pool creation information} + * @retval %jp{正の値}%en{positiv-value} %jp{生成した固定長メモリプールのID番号}%en{ID number of the created fixed-sized memory pool} + * @retval E_NOID %jp{ID番号不足(割付可能な固定長メモリプールIDが無い)}%en{No ID number available(there id no fixed-sized memory pool ID assignable)} * @retval E_RSATR %jp{予約属性(mpfatrが不正あるいは使用できない)}%en{Reserved attribute(mpfatr is invalid or unusable)} */ ER_ID acre_mpf(const T_CMPF *pk_cmpf) diff --git a/kernel/source/object/mpf/get_mpf.c b/kernel/source/object/mpf/get_mpf.c index 2869888..d1260e7 100755 --- a/kernel/source/object/mpf/get_mpf.c +++ b/kernel/source/object/mpf/get_mpf.c @@ -21,6 +21,16 @@ #if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{tget_mpfありで、サイズ優先なら} */ +/** %jp{固定長メモリプールの獲得}%en{Acquired Fixed-Sized Memory Block} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(mpfidが不正あるいは使用できない)}%en{Invalid ID number(mpfid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象固定長メモリプールが未登録)}%en{Non-existant object(specified fixed-sized memory pool is not registerd)} + * @retval E_PAR %jp{パラメータエラー(p_blk, tmoutが不正)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に固定長メモリプールが削除)}%en{Waiting object deleted(fixed-sized memory pool is deleted waiting)} + */ ER get_mpf(ID mpfid, VP *p_blk) { /* %jp{tget_mpfで代替する} */ @@ -30,6 +40,16 @@ ER get_mpf(ID mpfid, VP *p_blk) #else +/** %jp{固定長メモリプールの獲得}%en{Acquired Fixed-Sized Memory Block} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(mpfidが不正あるいは使用できない)}%en{Invalid ID number(mpfid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象固定長メモリプールが未登録)}%en{Non-existant object(specified fixed-sized memory pool is not registerd)} + * @retval E_PAR %jp{パラメータエラー(p_blk, tmoutが不正)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に固定長メモリプールが削除)}%en{Waiting object deleted(fixed-sized memory pool is deleted waiting)} + */ ER get_mpf(ID mpfid, VP *p_blk) { _KERNEL_T_MPFCB_PTR mpfcb; @@ -114,6 +134,11 @@ ER get_mpf(ID mpfid, VP *p_blk) #if _KERNEL_SPT_GET_MPF_E_NOSPT +/** %jp{固定長メモリプールの獲得}%en{Acquired Fixed-Sized Memory Block} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ ER get_mpf(ID mpfid) { return E_NOSPT; diff --git a/kernel/source/object/mpf/pget_mpf.c b/kernel/source/object/mpf/pget_mpf.c index 15f8c41..2c948f9 100755 --- a/kernel/source/object/mpf/pget_mpf.c +++ b/kernel/source/object/mpf/pget_mpf.c @@ -2,7 +2,7 @@ * Hyper Operating System V4 Advance * * @file get_mpf.c - * @brief %jp{固定長メモリプール資源の獲得}%en{Acquire Semaphore Resource} + * @brief %jp{固定長メモリプール資源の獲得(ポーリング)}%en{Acquired Fixed-Sized Memory Block(Poling)} * * Copyright (C) 1998-2006 by Project HOS * http://sourceforge.jp/projects/hos/ @@ -20,7 +20,16 @@ #if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{tget_mpfありで、サイズ優先なら} */ - +/** %jp{固定長メモリプールの獲得(ポーリング)}%en{Acquired Fixed-Sized Memory Block(Poling)} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(mpfidが不正あるいは使用できない)}%en{Invalid ID number(mpfid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象固定長メモリプールが未登録)}%en{Non-existant object(specified fixed-sized memory pool is not registerd)} + * @retval E_PAR %jp{パラメータエラー(p_blk, tmoutが不正)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に固定長メモリプールが削除)}%en{Waiting object deleted(fixed-sized memory pool is deleted waiting)} + */ ER pget_mpf(ID mpfid, VP *p_blk) { /* %jp{tget_mpfで代替する} */ @@ -30,6 +39,16 @@ ER pget_mpf(ID mpfid, VP *p_blk) #else +/** %jp{固定長メモリプールの獲得(ポーリング)}%en{Acquired Fixed-Sized Memory Block(Poling)} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(mpfidが不正あるいは使用できない)}%en{Invalid ID number(mpfid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象固定長メモリプールが未登録)}%en{Non-existant object(specified fixed-sized memory pool is not registerd)} + * @retval E_PAR %jp{パラメータエラー(p_blk, tmoutが不正)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に固定長メモリプールが削除)}%en{Waiting object deleted(fixed-sized memory pool is deleted waiting)} + */ ER pget_mpf(ID mpfid, VP *p_blk) { _KERNEL_T_MPFCB_PTR mpfcb; @@ -85,12 +104,16 @@ ER pget_mpf(ID mpfid, VP *p_blk) #endif -#else /* _KERNEL_SPT_GET_MPF */ +#else /* _KERNEL_SPT_PGET_MPF */ -#if _KERNEL_SPT_GET_MPF_E_NOSPT - +#if _KERNEL_SPT_PGET_MPF_E_NOSPT +/** %jp{固定長メモリプールの獲得(ポーリング)}%en{Acquired Fixed-Sized Memory Block(Poling)} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ ER pget_mpf(ID mpfid) { return E_NOSPT; @@ -99,7 +122,7 @@ ER pget_mpf(ID mpfid) #endif -#endif /* _KERNEL_SPT_GET_MPF */ +#endif /* _KERNEL_SPT_PGET_MPF */ diff --git a/kernel/source/object/mpf/tget_mpf.c b/kernel/source/object/mpf/tget_mpf.c new file mode 100755 index 0000000..ae113a6 --- /dev/null +++ b/kernel/source/object/mpf/tget_mpf.c @@ -0,0 +1,149 @@ +/** + * Hyper Operating System V4 Advance + * + * @file tget_mpf.c + * @brief %jp{固定長メモリプール資源の獲得(タイムアウトあり)}%en{Acquired Fixed-Sized Memory Block(with Timeout)} + * + * Copyright (C) 1998-2007 by Project HOS + * http://sourceforge.jp/projects/hos/ + */ + + + +#include "core/core.h" +#include "object/mpfobj.h" + + + +#if _KERNEL_SPT_TGET_MPF + + +#if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED) /* %jp{tget_mpfありで、サイズ優先なら} */ + +/** %jp{固定長メモリプールの獲得(タイムアウトあり)}%en{Acquired Fixed-Sized Memory Block(with Timeout)} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_OK %jp{正常終了}%en{Normal completion} + * @retval E_ID %jp{不正ID番号(mpfidが不正あるいは使用できない)}%en{Invalid ID number(mpfid is invalid or unusable)} + * @retval E_NOEXS %jp{オブジェクト未生成(対象固定長メモリプールが未登録)}%en{Non-existant object(specified fixed-sized memory pool is not registerd)} + * @retval E_PAR %jp{パラメータエラー(p_blk, tmoutが不正)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_RLWAI %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)} + * @retval E_DLT %jp{待ちオブジェクトの削除(待ち状態の間に固定長メモリプールが削除)}%en{Waiting object deleted(fixed-sized memory pool is deleted waiting)} + */ +ER tget_tmpf(ID mpfid, VP *p_blk, TMO tmout) +{ + _KERNEL_T_MPFCB_PTR mpfcb; + _KERNEL_T_TSKHDL tskhdl; + _KERNEL_T_TCB *tcb; + _KERNEL_MPF_T_BLKHDL blkhdl; + VP blkptr; + ER ercd; + + /* %jp{コンテキストチェック} */ +#if _KERNEL_SPT_GET_MPF_E_CTX + if ( _KERNEL_SYS_SNS_DPN() ) + { + return E_CTX; /* %jp{コンテキストエラー}%en{Context error} */ + } +#endif + + /* %jp{ID のチェック} */ +#if _KERNEL_SPT_GET_MPF_E_ID + if ( !_KERNEL_MPF_CHECK_MPFID(mpfid) ) + { + return E_ID; /* %jp{不正ID番号}%en{Invalid ID number} */ + } +#endif + + _KERNEL_ENTER_SVC(); /* %jp{サービスコールに入る}%en{enter service-call} */ + + /* %jp{オブジェクト存在チェック} */ +#if _KERNEL_SPT_GET_MPF_E_NOEXS + if ( !_KERNEL_MPF_CHECK_EXS(mpfid) ) + { + _KERNEL_LEAVE_SVC(); /* %jp{サービスコールから出る}%en{leave service-call} */ + return E_NOEXS; /* %jp{オブジェクト未生成}%en{Non-existant object} */ + } +#endif + + /* %jp{コントロールブロック取得} */ + mpfcb = _KERNEL_MPF_ID2MPFCB(mpfid); + + /* %jp{固定長メモリプールカウンタ取得} */ + blkhdl = _KERNEL_MPF_GET_FREBLK(mpfcb); + + if ( blkhdl != _KERNEL_MPF_BLKHDL_NULL ) + { + /* %jp{固定長メモリプール資源が獲得できれば成功} */ + blkptr = _KERNEL_MPF_BLKHDL2PTR(mpfcb, blkhdl); + *p_blk = blkptr; + _KERNEL_MPF_SET_FREBLK(mpfcb, *(_KERNEL_MPF_T_BLKHDL *)blkptr); + _KERNEL_MPF_SET_FBLKCNT(mpfcb, _KERNEL_MPF_GET_FBLKCNT(mpfhdl) - 1); + ercd = E_OK; + } + else + { +#if _KERNEL_SPT_TGET_MPF || _KERNEL_SPT_PGET_MPF + if ( tmout == TMO_POL ) + { + ercd = E_TMOUT; /* %jp{タイムアウト}%en{Timeout} */ + } + else +#endif + { + /* %jp{タスクを待ち状態にする} */ + tskhdl = _KERNEL_SYS_GET_RUNTSK(); + tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl); /* %jp{TCB取得} */ + _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_MPF); + _KERNEL_TSK_SET_WOBJID(tcb, mpfid); + _KERNEL_TSK_SET_DATA(tcb, (VP_INT)p_blk); + _KERNEL_DSP_WAI_TSK(tskhdl); + _KERNEL_MPF_ADD_QUE(mpfcb, _KERNEL_MPF_GET_MPFCB_RO(mpfid, mpfcb), tskhdl); /* %jp{待ち行列に追加} */ + +#if _KERNEL_SPT_TGET_MPF + if ( tmout != TMO_FEVR ) + { + _KERNEL_SEM_ADD_TOQ(tskhdl, tmout); /* %jp{タイムアウトキューに追加} */ + } +#endif + + /* %jp{タスクディスパッチの実行} */ + _KERNEL_DSP_TSK(); + + /* %jp{エラーコードの取得} */ + ercd = _KERNEL_TSK_GET_ERCD(tcb); + } + } + + _KERNEL_LEAVE_SVC(); /* %jp{オブジェクト未生成}%en{Non-existant object} */ + + return ercd; +} + + +#endif + + +#else /* _KERNEL_SPT_PGET_MPF */ + + +#if _KERNEL_SPT_PGET_MPF_E_NOSPT + +/** %jp{固定長メモリプールの獲得(タイムアウトあり)}%en{Acquired Fixed-Sized Memory Block(with Timeout)} + * @param mpfid %jp{メモリブロック獲得対象の固定長メモリプールのID番号}%en{ID number of the fixed-sized memory pool from which resource is acquired} + * @param p_blkf %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Start address of the acquired memory block} + * @retval E_NOSPT %jp{未サポート機能}%en{Unsupported function} + */ +ER tget_mpf(ID mpfid) +{ + return E_NOSPT; +} + +#endif + + +#endif /* _KERNEL_SPT_PGET_MPF */ + + + +/* end of file */ -- 2.11.0