OSDN Git Service

(none)
authorryuz <ryuz>
Thu, 17 May 2007 16:10:56 +0000 (16:10 +0000)
committerryuz <ryuz>
Thu, 17 May 2007 16:10:56 +0000 (16:10 +0000)
aplfw/sample/arm/ez_arm7/sample.c
aplfw/system/shell/shell.c
kernel/source/object/mpf/acre_mpf.c
kernel/source/object/mpf/get_mpf.c
kernel/source/object/mpf/pget_mpf.c
kernel/source/object/mpf/tget_mpf.c [new file with mode: 0755]

index 64c250a..e4eba27 100755 (executable)
 #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)];
index 95bca43..c3daf25 100755 (executable)
@@ -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);
index 4dec801..52efeb7 100755 (executable)
@@ -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/
 
 #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)
index 2869888..d1260e7 100755 (executable)
 #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;
index 15f8c41..2c948f9 100755 (executable)
@@ -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/
 
 #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 (executable)
index 0000000..ae113a6
--- /dev/null
@@ -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 */