OSDN Git Service

add Cortex-M3 PendSV
authorryuz <ryuz@users.sourceforge.jp>
Sun, 27 Mar 2011 03:11:49 +0000 (12:11 +0900)
committerryuz <ryuz@users.sourceforge.jp>
Sun, 27 Mar 2011 03:11:49 +0000 (12:11 +0900)
36 files changed:
cfgrtr/source/definh.cpp
cfgrtr/source/h4acfg.cpp
cfgrtr/source/intstk.cpp
kernel/build/arm/cortex_m3/gcc/Makefile
kernel/include/arch/proc/8080/z80/procatr.h
kernel/include/arch/proc/arm/arm_v4t/procatr.h
kernel/include/arch/proc/arm/arm_v6/procatr.h
kernel/include/arch/proc/arm/arm_v7m/proc.h
kernel/include/arch/proc/arm/arm_v7m/procatr.h
kernel/include/arch/proc/h8/h8300h/procatr.h
kernel/include/arch/proc/h8/h8300ha/procatr.h
kernel/include/arch/proc/h8/h8300hn/procatr.h
kernel/include/arch/proc/h8/h8s2600a/procatr.h
kernel/include/arch/proc/ia32/i386/procatr.h
kernel/include/arch/proc/mb/mb_v8/procatr.h
kernel/include/arch/proc/mips/mips1/procatr.h
kernel/include/arch/proc/mn103/mn1030/procatr.h
kernel/include/arch/proc/sh/sh2/procatr.h
kernel/include/arch/proc/sh/sh2a-fpu/procatr.h
kernel/include/arch/proc/v850/v850e/procatr.h
kernel/include/arch/proc/win/win32/procatr.h
kernel/include/core/sys.h
kernel/source/arch/proc/arm/arm_v7m/dis_int.c [new file with mode: 0644]
kernel/source/arch/proc/arm/arm_v7m/ena_int.c [new file with mode: 0644]
kernel/source/arch/proc/arm/arm_v7m/gcc/kpnd_hdr.S [new file with mode: 0644]
kernel/source/arch/proc/arm/arm_v7m/gcc/kref_ctl.S [new file with mode: 0644]
kernel/source/arch/proc/arm/arm_v7m/gcc/kswi_ctx.S
kernel/source/arch/proc/arm/arm_v7m/gcc/kwai_int.S
kernel/source/arch/proc/arm/arm_v7m/vclr_int.c [new file with mode: 0644]
kernel/source/object/cyc/del_cyc.c
sample/arm/stm32f103/gcc/kernel_vct.c
sample/arm/stm32f103/gcc/vectors.S [deleted file]
sample/arm/stm32f103/ostimer.c
sample/arm/stm32f103/ostimer.h
sample/arm/stm32f103/sample.c
sample/arm/stm32f103/system.cfg

index d09ca62..5ad3377 100755 (executable)
@@ -155,6 +155,10 @@ void  CApiDefInh::WriteVecter(FILE* fp, CApiIntStack *pIntStack)
                        fprintf(fp, "\t\t{(FP)(_kernel_hw_fault_handler)},\t\t/* hard fault handler */\n");
                        break;
 
+               case 14:
+                       fprintf(fp, "\t\t{(FP)(_kernel_pendsv_handler)},\t\t/* hard fault handler */\n");
+                       break;
+
                default:
                        for ( j = 0; j < m_iObjs; j++ )
                        {
index 17d4e5b..9b9dcb9 100755 (executable)
@@ -117,7 +117,6 @@ int main(int argc, char *argv[])
 {
        FILE* fpInput;
        FILE* fpCfg;
-       FILE* fpVct;
        FILE* fpId;
        int  iErr;
        int  i;
@@ -237,6 +236,7 @@ int main(int argc, char *argv[])
 
 #ifdef _KERNEL_PROCATR_ARM_CORTEX_M3
        // ベクタファイルオープン
+       FILE* fpVct;
        if ( (fpVct = fopen(s_szVctFile, "w")) == NULL )
        {
                fprintf(stderr, "could not open file \"%s\"\n", s_szVctFile);
index da5ac23..7332136 100755 (executable)
@@ -193,7 +193,7 @@ void CApiIntStack::WriteStackPointer(FILE* fp)
 
        if ( strcmp(pszStack, "NULL") == 0 )
        {
-               fprintf(fp, "&_kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)]", pszSize, pszSize);
+               fprintf(fp, "&_kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)]", pszSize);
        }
        else
        {
index ebc1fa6..0791e6e 100644 (file)
@@ -83,24 +83,19 @@ include $(KERNEL_MAKINC_DIR)/maklib_d.inc
 ASRCS += $(SRC_PROC_CC_DIR)/krst_hdr.S
 ASRCS += $(SRC_PROC_CC_DIR)/knmi_hdr.S
 ASRCS += $(SRC_PROC_CC_DIR)/khwf_hdr.S
+ASRCS += $(SRC_PROC_CC_DIR)/kpnd_hdr.S
 ASRCS += $(SRC_PROC_CC_DIR)/kdis_int.S
 ASRCS += $(SRC_PROC_CC_DIR)/kena_int.S
 ASRCS += $(SRC_PROC_CC_DIR)/kcre_ctx.S
 ASRCS += $(SRC_PROC_CC_DIR)/krst_ctx.S
 ASRCS += $(SRC_PROC_CC_DIR)/kswi_ctx.S
 ASRCS += $(SRC_PROC_CC_DIR)/kwai_int.S
-
-
-
+ASRCS += $(SRC_PROC_CC_DIR)/kref_ctl.S
 
 # %jp{C言語ファイルの追加}%en{C sources}
-#CSRCS += $(SRC_PROC_DIR)/val_int.c
-#CSRCS += $(SRC_IRC_DIR)/kini_irc.c
-#CSRCS += $(SRC_IRC_DIR)/kexe_irc.c
-#CSRCS += $(SRC_IRC_DIR)/ena_int.c
-#CSRCS += $(SRC_IRC_DIR)/dis_int.c
-#CSRCS += $(SRC_IRC_DIR)/vclr_int.c
-
+CSRCS += $(SRC_PROC_DIR)/ena_int.c
+CSRCS += $(SRC_PROC_DIR)/dis_int.c
+CSRCS += $(SRC_PROC_DIR)/vclr_int.c
 
 # %jp{カーネル共通ソースの追加}%en{kernel common sources}
 include $(KERNEL_MAKINC_DIR)/knlsrc.inc
index ce6905a..877b231 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      1                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
 
 
 #endif /* _KERNEL__arch__proc__8080__z80__procatr_h__ */
index 9a24085..0e2deb2 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 /* %jp{ARM固有の定数} */
 #define _KERNEL_ARM_INHNO_IRQ                          0                       /**< %jp{IRQ割込みの割込みハンドラ番号} */
@@ -57,8 +63,6 @@
 
 
 
-
-
 #endif /* _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ */
 
 
index 16910b6..632dd50 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 /* %jp{ARM固有の定数} */
 #define _KERNEL_ARM_INHNO_IRQ                          0                       /**< %jp{IRQ割込みの割込みハンドラ番号} */
index f420197..0781be5 100644 (file)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Hyper Operating System V4 Advance
  *
  * @file  proc.h
 #ifndef _KERNEL__arch__proc__arm__arm_v7m__proc_h__
 #define _KERNEL__arch__proc__arm__arm_v7m__proc_h__
 
+#define _KERNEL_REG_INT_CONTROL                        ((volatile UW *)0xE000ED04)             /**< %jp{割り込み制御状態レジスタ}%en{Interrupt Control State Register} */
 
-
-#define _KERNEL_IMSK_F         0x40            /**< %jp{FIQ割込みマスクビット} */
-#define _KERNEL_IMSK_I         0x80            /**< %jp{IRQ割込みマスクビット} */
-
-#define _KERNEL_IMSK_LV0       0xc0            /**< %jp{割込みマスクレベル0(すべてマスク)} */
-#define _KERNEL_IMSK_LV1       0x80            /**< %jp{割込みマスクレベル1(FIQのみ許可)} */
-#define _KERNEL_IMSK_LV2       0x00            /**< %jp{割込みマスクレベル2(すべて許可)} */
+#define _KERNEL_REG_INT_SETENA_BASE            ((volatile UW *)0xE000E100)             /**< %jp{割り込みイネーブルセットレジスタ} */
+#define _KERNEL_REG_INT_CLRENA_BASE            ((volatile UW *)0xE000E180)             /**< %jp{割り込みイネーブルクリアレジスタ} */
+#define _KERNEL_REG_INT_SETPEND_BASE   ((volatile UW *)0xE000E200)             /**< %jp{割り込み保留セットレジスタ} */
+#define _KERNEL_REG_INT_CLRPEND_BASE   ((volatile UW *)0xE000E280)             /**< %jp{割り込み保留クリアレジスタ} */
 
 
 /** %jp{コンテキスト制御ブロック} */
@@ -28,18 +26,6 @@ typedef struct _kernel_t_ctxcb
        VP      sp;
 } _KERNEL_T_CTXCB;
 
-#if 0
-/** %jp{割込みコンテキスト制御ブロック} */
-typedef struct _kernel_t_ictxcb
-{
-       UB  imsk;
-       UB      intcnt;
-       VP      isp;
-} _KERNEL_T_ICTXCB;
-
-
-extern _KERNEL_T_ICTXCB _kernel_ictxcb;                /**< %jp{割込みコンテキスト制御ブロック} */
-#endif
 
 
 #ifdef __cplusplus
@@ -47,8 +33,12 @@ extern "C" {
 #endif
 
 void    _kernel_reset_handler(void);
-void    _kernel_nmi_handler();
-void    _kernel_hw_fault_handler();
+void    _kernel_nmi_handler(void);
+void    _kernel_hw_fault_handler(void);
+void    _kernel_pendsv_handler(void);
+
+int     _kernel_ref_cpu_control(void);                                                                                                                         /**< %jp{CONTROLレジスタの取得} */
+
 
 void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割込み許可} */
 void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割込み禁止} */
@@ -73,7 +63,7 @@ void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxc
 #define _KERNEL_WAI_INT()                      _kernel_wai_int()                                                                                               /**< %jp{割込み待ち(アイドル時の処理)} */
 
 #define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
-                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) /**< %jp{実行コンテキストの作成} */  
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2)) /**< %jp{実行コンテキストの作成} */
 #define _KERNEL_DEL_CTX(pk_ctxcb)      do {} while (0)                                                                                                 /**< %jp{実行コンテキストの削除} */
 #define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
                                                                        _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))                             /**< %jp{実行コンテキストのリスタート} */
@@ -82,6 +72,15 @@ void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxc
                                                                        _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))                                /**< %jp{実行コンテキストの切替} */
 
 
+#define        _KERNEL_PROC_SET_CTX()          do { } while (0)
+#define        _KERNEL_PROC_CLR_CTX()          do { } while (0)
+#define        _KERNEL_PROC_SNS_CTX()          ((_kernel_ref_cpu_control() & 0x00000002) != 0)
+
+#define        _KERNEL_PROC_SET_DLY()          do { *_KERNEL_REG_INT_CONTROL |= 0x10000000; } while (0)
+#define        _KERNEL_PROC_CLR_DLY()          do { *_KERNEL_REG_INT_CONTROL |= 0x08000000; } while (0)
+#define        _KERNEL_PROC_SNS_DLY()          ((*_KERNEL_REG_INT_CONTROL & 0x10000000) != 0)
+
+
 #endif /* _KERNEL__arch__proc__arm__arm_v7m__proc_h__ */
 
 
index fd6eadd..84f1d98 100644 (file)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Hyper Operating System V4 Advance
  *
  * @file  procatr.h
 #define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割込みに対応しているか?} */
 
 #define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
-#define _KERNEL_PROCATR_TMAX_INHNO                     64                      /**< %jp{割込みハンドラ番号の最大値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     255                     /**< %jp{割込みハンドラ番号の最大値} */
 
 #define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
-#define _KERNEL_PROCATR_TMAX_EXCNO                                           /**< %jp{CPU例外ハンドラ番号の最大値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     15                      /**< %jp{CPU例外ハンドラ番号の最大値} */
 
-#define _KERNEL_PROCATR_SYSSTK_NUM                     2                       /**< %jp{システムスタックは何本必要か?} */
+#define _KERNEL_PROCATR_SYSSTK_NUM                     1                       /**< %jp{システムスタックは何本必要か?} */
 
 #define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
 #define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
 #define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタのビット数} */
-#define _KERNEL_PROCATR_MEM_ALIGN                      32                      /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_MEM_ALIGN                                            /**< %jp{適切なメモリのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                TRUE            /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                TRUE            /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 
 #endif /* _KERNEL__arch__proc__arm__arm_v7m__procatr_h__ */
index 50b16f6..6f83925 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 
 #endif /* _KERNEL__arch__proc__h8__h8300h__procatr_h__ */
index 507478c..857f10b 100755 (executable)
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{データのアンアラインアクセスは可能か?} */
 #define _KERNEL_PROCATR_ALLOW_INST_UNALIGN     TRUE            /**< %jp{命令のアンアライン配置は可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
+
 
 #endif /* _KERNEL__arch__proc__h8__h8300ha__procatr_h__ */
 
index 0a9c333..1072cff 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 
 #endif /* _KERNEL__arch__proc__h8__h8300h__procatr_h__ */
index cffdb7e..a712711 100755 (executable)
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{データのアンアラインアクセスは可能か?} */
 #define _KERNEL_PROCATR_ALLOW_INST_UNALIGN     TRUE            /**< %jp{命令のアンアライン配置は可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 #endif /* _KERNEL__arch__proc__h8__h8s2600a__procatr_h__ */
 
index 1c1ad05..24848b8 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 
 #endif /* _KERNEL__arch__proc__ia32__i386__procatr_h__ */
index 64070d5..940fd53 100644 (file)
 #define _KERNEL_PROCATR_STK_ALIGN                      4                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 #endif /* _KERNEL__arch__proc__mb__mb_v8__procatr_h__ */
 
index 4073cdf..833b748 100755 (executable)
 #define _KERNEL_ARM_EXCNO_PRE                          3                       /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */
 #define _KERNEL_ARM_EXCNO_ABT                          4                       /**< %jp{データアボートのCPU例外ハンドラ番号} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 
 #endif /* _KERNEL__arch__proc__mips__mips1__procatr_h__ */
index da87e45..b06d82a 100755 (executable)
 #define _KERNEL_ARM_EXCNO_PRE                          3                       /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */
 #define _KERNEL_ARM_EXCNO_ABT                          4                       /**< %jp{データアボートのCPU例外ハンドラ番号} */
 
-
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
 
 
 
index 750a275..fa709ff 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      4                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 #endif /* _KERNEL__arch__proc__sh__sh2__procatr_h__ */
 
index 06c93c1..79c7fc2 100644 (file)
 #define _KERNEL_PROCATR_STK_ALIGN                      4                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 #endif /* _KERNEL__arch__proc__sh__sh2a_fpu__procatr_h__ */
 
index e73e942..9623882 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      4                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 #endif /* _KERNEL__arch__proc__v850__v850e__procatr_h__ */
 
index 04d1611..ed43b5b 100755 (executable)
 #define _KERNEL_PROCATR_STK_ALIGN                      1                       /**< %jp{適切なスタックのアライメント(byte単位)} */
 #define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{アンアラインアクセスは可能か?} */
 
+#define _KERNEL_PROCATR_SYS_CTX                                FALSE           /**< %jp{コンテキスト状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_LOC                                FALSE           /**< %jp{CPUロック状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DSP                                FALSE           /**< %jp{ディスパッチ禁止状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_SYS                                FALSE           /**< %jp{システム状態管理をプロセッサで実施するか?} */
+#define _KERNEL_PROCATR_SYS_DLY                                FALSE           /**< %jp{遅延ディスパッチ保留状態管理をプロセッサで実施するか?} */
+
 
 #endif /* _KERNEL__arch__proc__win__win32__procatr_h__ */
 
index da689ae..af5ad7a 100755 (executable)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Hyper Operating System V4 Advance
  *
  * @file  sys.h
@@ -53,7 +53,7 @@ typedef struct _kernel_t_syscb
 {
        _KERNEL_T_RDQCB         rdqcb;                          /**< %jp{レディーキュー}%en{ready-queue} */
 
-       _KERNEL_T_TIMCB         timcb;                          
+       _KERNEL_T_TIMCB         timcb;
 
 #if _KERNEL_SPT_TOQ
        _KERNEL_T_TOQCB         toqcb;                          /**< %jp{タイムアウトキュー}%en{timeout-queue} */
@@ -107,14 +107,14 @@ extern const _KERNEL_T_SYSCB_RO           _kernel_syscb_ro;
 #define        _KERNEL_SYS_INI_TIM()                           _KERNEL_INI_TIM(_KERNEL_SYS_GET_TIMCB(), _KERNEL_SYS_GET_TIMCB_RO())
 #define        _KERNEL_SYS_SIG_TIM()                           _KERNEL_SIG_TIM(_KERNEL_SYS_GET_TIMCB(), _KERNEL_SYS_GET_TIMCB_RO())
 #define        _KERNEL_SYS_GET_TIC()                           _KERNEL_GET_TIC(_KERNEL_SYS_GET_TIMCB(), _KERNEL_SYS_GET_TIMCB_RO())
-#define        _KERNEL_SYS_SET_TIM(p_tim)                      _KERNEL_SET_TIM(_KERNEL_SYS_GET_TIMCB(), (p_tim))       
-#define        _KERNEL_SYS_GET_TIM()                           _KERNEL_GET_TIM(_KERNEL_SYS_GET_TIMCB())                        
+#define        _KERNEL_SYS_SET_TIM(p_tim)                      _KERNEL_SET_TIM(_KERNEL_SYS_GET_TIMCB(), (p_tim))
+#define        _KERNEL_SYS_GET_TIM()                           _KERNEL_GET_TIM(_KERNEL_SYS_GET_TIMCB())
 
 /* timeout queue */
 #define _KERNEL_SYS_GET_TOQCB()                                (&_kernel_syscb.toqcb)                                                                                          /**< %jp{タイムアウトキューの取得} */
-#define _KERNEL_SYS_ADD_TOQ(tskhdl, tmout)     _KERNEL_ADD_TOQ(_KERNEL_SYS_GET_TOQCB(), (tskhdl), (tmout))     
-#define _KERNEL_SYS_RMV_TOQ(tskhd)                     _KERNEL_RMV_TOQ(_KERNEL_SYS_GET_TOQCB(), (tskhd))                               
-#define _KERNEL_SYS_SIG_TOQ(tictim)                    _KERNEL_SIG_TOQ(_KERNEL_SYS_GET_TOQCB(), (tictim))                                      
+#define _KERNEL_SYS_ADD_TOQ(tskhdl, tmout)     _KERNEL_ADD_TOQ(_KERNEL_SYS_GET_TOQCB(), (tskhdl), (tmout))
+#define _KERNEL_SYS_RMV_TOQ(tskhd)                     _KERNEL_RMV_TOQ(_KERNEL_SYS_GET_TOQCB(), (tskhd))
+#define _KERNEL_SYS_SIG_TOQ(tictim)                    _KERNEL_SIG_TOQ(_KERNEL_SYS_GET_TOQCB(), (tictim))
 
 /* timer queue */
 #define _KERNEL_SYS_GET_TMQ()                          (&_kernel_syscb.tmqcb)                                                                                          /**< %jp{タイマキューの取得} */
@@ -159,28 +159,61 @@ extern const _KERNEL_T_SYSCB_RO           _kernel_syscb_ro;
 #define _KERNEL_SYS_GET_SYSISP()                       ((VP)((UB *)_KERNEL_SYS_GET_SYSSTK() + _KERNEL_SYS_GET_SYSSTKSZ()))     /**< %jp{カレントプロセッサのシステムコンテキストの初期スタックポインタ取得} */
 
 
+#if _KERNEL_PROCATR_SYS_CTX
+#define _KERNEL_SYS_SET_CTX()                          _KERNEL_PROC_SET_CTX()                                                                                          /**< %jp{非タスクコンテキストに設定} */
+#define _KERNEL_SYS_CLR_CTX()                          _KERNEL_PROC_CLR_CTX()                                                                                          /**< %jp{非タスクコンテキストを解除} */
+#define _KERNEL_SYS_SNS_CTX()                          _KERNEL_PROC_SNS_CTX()                                                                                          /**< %jp{コンテキスト状態を参照} */
+#else
 #define _KERNEL_SYS_SET_CTX()                          do { _KERNEL_SYS_GET_PRCCB()->stat |= _KERNEL_TSS_CTX; } while (0)      /**< %jp{非タスクコンテキストに設定} */
 #define _KERNEL_SYS_CLR_CTX()                          do { _KERNEL_SYS_GET_PRCCB()->stat &= ~_KERNEL_TSS_CTX; } while (0)     /**< %jp{非タスクコンテキストを解除} */
 #define _KERNEL_SYS_SNS_CTX()                          ((_KERNEL_SYS_GET_PRCCB()->stat & _KERNEL_TSS_CTX) ? TRUE : FALSE)      /**< %jp{コンテキスト状態を参照} */
+#endif
 
+#if _KERNEL_PROCATR_SYS_LOC
+#define _KERNEL_SYS_SET_LOC()                          _KERNEL_PROC_SET_CTX()                                                                                          /**< %jp{ロック状態を設定} */
+#define _KERNEL_SYS_CLR_LOC()                          _KERNEL_PROC_CLR_CTX()                                                                                          /**< %jp{ロック状態を解除} */
+#define _KERNEL_SYS_SNS_LOC()                          _KERNEL_PROC_SNS_CTX()                                                                                          /**< %jp{ロック状態を参照} */
+#else
 #define _KERNEL_SYS_SET_LOC()                          do { _KERNEL_SYS_GET_PRCCB()->stat |= _KERNEL_TSS_LOC; } while (0)      /**< %jp{ロック状態を設定} */
 #define _KERNEL_SYS_CLR_LOC()                          do { _KERNEL_SYS_GET_PRCCB()->stat &= ~_KERNEL_TSS_LOC; } while (0)     /**< %jp{ロック状態を解除} */
 #define _KERNEL_SYS_SNS_LOC()                          ((_KERNEL_SYS_GET_STST() & _KERNEL_TSS_LOC) ? TRUE : FALSE)                     /**< %jp{ロック状態を参照} */
+#endif
 
+#if _KERNEL_PROCATR_SYS_DSP
+#define _KERNEL_SYS_SET_DSP()                          _KERNEL_PROC_SET_DSP()                                                                                          /**< %jp{ディスパッチ禁止状態を設定} */
+#define _KERNEL_SYS_CLR_DSP()                          _KERNEL_PROC_CLR_DSP()                                                                                          /**< %jp{ディスパッチ禁止状態を解除} */
+#define _KERNEL_SYS_SNS_DSP()                          _KERNEL_PROC_SNS_DSP()                                                                                          /**< %jp{ディスパッチ禁止状態を参照} */
+#else
 #define _KERNEL_SYS_SET_DSP()                          do { _KERNEL_SYS_GET_PRCCB()->stat |= _KERNEL_TSS_DSP; } while (0)      /**< %jp{ディスパッチ禁止状態を設定} */
 #define _KERNEL_SYS_CLR_DSP()                          do { _KERNEL_SYS_GET_PRCCB()->stat &= ~_KERNEL_TSS_DSP; } while (0)     /**< %jp{ディスパッチ禁止状態を解除} */
 #define _KERNEL_SYS_SNS_DSP()                          ((_KERNEL_SYS_GET_PRCCB()->stat & _KERNEL_TSS_DSP) ? TRUE : FALSE)      /**< %jp{ディスパッチ禁止状態を参照} */
+#endif
 
+#if _KERNEL_PROCATR_SYS_SYS
+#define _KERNEL_SYS_SET_SYS()                          _KERNEL_PROC_SET_SYS()                                                                                          /**< %jp{ディスパッチ禁止状態を設定} */
+#define _KERNEL_SYS_CLR_SYS()                          _KERNEL_PROC_CLR_SYS()                                                                                          /**< %jp{ディスパッチ禁止状態を解除} */
+#define _KERNEL_SYS_SNS_SYS()                          _KERNEL_PROC_SNS_SYS()                                                                                          /**< %jp{ディスパッチ禁止状態を参照} */
+#else
 #define _KERNEL_SYS_SET_SYS()                          do { _KERNEL_SYS_GET_PRCCB()->stat |= _KERNEL_TSS_SYS; } while (0)      /**< %jp{システム状態を設定} */
 #define _KERNEL_SYS_CLR_SYS()                          do { _KERNEL_SYS_GET_PRCCB()->stat &= ~_KERNEL_TSS_SYS; } while (0)     /**< %jp{システム状態を解除} */
 #define _KERNEL_SYS_SNS_SYS()                          ((_KERNEL_SYS_GET_PRCCB()->stat & _KERNEL_TSS_SYS) ? TRUE : FALSE)      /**< %jp{システム状態を参照} */
+#endif
 
+#if _KERNEL_PROCATR_SYS_DLY
+#define _KERNEL_SYS_SET_DLY()                          _KERNEL_PROC_SET_DLY()                                                                                          /**< %jp{ディスパッチ禁止状態を設定} */
+#define _KERNEL_SYS_CLR_DLY()                          _KERNEL_PROC_CLR_DLY()                                                                                          /**< %jp{ディスパッチ禁止状態を解除} */
+#define _KERNEL_SYS_SNS_DLY()                          _KERNEL_PROC_SNS_DLY()                                                                                          /**< %jp{ディスパッチ禁止状態を参照} */
+#else
 #define _KERNEL_SYS_SET_DLY()                          do { _KERNEL_SYS_GET_PRCCB()->dlydsp = TRUE;} while (0)                         /**< %jp{ディスパッチ遅延中を設定} */
 #define _KERNEL_SYS_CLR_DLY()                          do { _KERNEL_SYS_GET_PRCCB()->dlydsp = FALSE;} while (0)                        /**< %jp{ディスパッチ遅延中を解除} */
 #define _KERNEL_SYS_SNS_DLY()                          (_KERNEL_SYS_GET_PRCCB()->dlydsp)                                                                       /**< %jp{ディスパッチ遅延中を参照} */
+#endif
 
+#if !_KERNEL_PROCATR_SYS_CTX && !_KERNEL_PROCATR_SYS_LOC && !_KERNEL_PROCATR_SYS_DSP &&  !_KERNEL_PROCATR_SYS_SYS &&  !_KERNEL_PROCATR_SYS_DLY
 #define _KERNEL_SYS_SNS_DPN()                          ((_KERNEL_SYS_GET_PRCCB()->stat != _KERNEL_TSS_TSK) ? TRUE : FALSE)     /**< %jp{ディスパッチ不能を参照} */
-
+#else
+#define _KERNEL_SYS_SNS_DPN()                          (_KERNEL_SYS_SNS_CTX() || _KERNEL_SYS_SNS_LOC() || _KERNEL_SYS_SNS_DSP() || _KERNEL_SYS_SNS_SYS())
+#endif
 
 
 #if _KERNEL_SPT_DPC            /* %jp{遅延プロシージャコールの場合} */
diff --git a/kernel/source/arch/proc/arm/arm_v7m/dis_int.c b/kernel/source/arch/proc/arm/arm_v7m/dis_int.c
new file mode 100644 (file)
index 0000000..a247195
--- /dev/null
@@ -0,0 +1,31 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dis_int.c
+ * @brief %jp{ARMv7-M}%en{ARMv7-M}
+ *
+ * Copyright (C) 1998-2011 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+/* 割込みの禁止 */
+ER dis_int(INTNO intno)
+{
+       if ( intno < _KERNEL_PROCATR_TMIN_INHNO || intno > _KERNEL_PROCATR_TMAX_INHNO )
+       {
+               return E_PAR;
+       }
+       
+       *(_KERNEL_REG_INT_CLRENA_BASE + (intno >> 2)) = (1 << (intno & 3));
+       
+       return E_OK;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/arm/arm_v7m/ena_int.c b/kernel/source/arch/proc/arm/arm_v7m/ena_int.c
new file mode 100644 (file)
index 0000000..306c7ea
--- /dev/null
@@ -0,0 +1,31 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dis_int.c
+ * @brief %jp{ARMv7-M}%en{ARMv7-M}
+ *
+ * Copyright (C) 1998-2011 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+/* 割込みの許可 */
+ER ena_int(INTNO intno)
+{
+       if ( intno < _KERNEL_PROCATR_TMIN_INHNO || intno > _KERNEL_PROCATR_TMAX_INHNO )
+       {
+               return E_PAR;
+       }
+       
+       *(_KERNEL_REG_INT_SETENA_BASE + (intno >> 2)) = (1 << (intno & 3));
+       
+       return E_OK;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/arm/arm_v7m/gcc/kpnd_hdr.S b/kernel/source/arch/proc/arm/arm_v7m/gcc/kpnd_hdr.S
new file mode 100644 (file)
index 0000000..6bb4af9
--- /dev/null
@@ -0,0 +1,57 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * Copyright (C) 1998-2011 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+                               .syntax unified
+
+                               .text
+                               .align  2
+
+                               .global _kernel_dsp_tsk
+
+/************************************************
+  PendSV ハンドラ
+ ************************************************/
+                               .global _kernel_pendsv_handler
+                               .thumb
+                               .thumb_func
+                               .type   _kernel_pendsv_handler, %function
+_kernel_pendsv_handler:
+                               /* 割り込み禁止 */
+                               cpsid   i
+
+                               /* スレッドモードへ */
+                               mrs             r0, control
+                               bic             r0, r0, #1
+                               msr             control, r0
+                               isb
+
+                               /* 遅延ディスパッチ */
+                               blx             _kernel_dsp_tsk
+
+                               /* ハンドラモードへ */
+                               mrs             r0, control
+                               orr             r0, r0, #1
+                               msr             control, r0
+                               isb
+
+                               /* 割り込み許可 */
+                               cpsie   i
+
+                               /* スレッドモードへの復帰 */
+                               movw    lr, #0xfffd
+                               movt    lr, #0xffff
+                               bx              lr
+
+                               .size   _kernel_pendsv_handler, .-_kernel_pendsv_handler
+
+
+                               .end
+
+
+; end of file
+
diff --git a/kernel/source/arch/proc/arm/arm_v7m/gcc/kref_ctl.S b/kernel/source/arch/proc/arm/arm_v7m/gcc/kref_ctl.S
new file mode 100644 (file)
index 0000000..75a7a49
--- /dev/null
@@ -0,0 +1,29 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * Copyright (C) 1998-2011 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+                               .text
+                               .align  2
+
+
+/************************************************
+  CONTROLレジスタの取得
+  int _kernel_ref_cpu_control(void)
+ ************************************************/
+                               .global _kernel_ref_cpu_control
+                               .thumb
+                               .thumb_func
+                               .type   _kernel_ref_cpu_control, %function
+_kernel_ref_cpu_control:
+                               mrs             r0, CONTROL
+                               bx              lr
+                               .size   _kernel_ref_cpu_control, .-_kernel_ref_cpu_control
+
+                               .end
+
+
+/* end of file */
index 21923ba..9ef7a0e 100644 (file)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Hyper Operating System V4 Advance
  *
  * Copyright (C) 1998-2011 by Project HOS
@@ -13,8 +13,8 @@
 /************************************************
   実行コンテキストの切替
   void _kernel_swi_ctx(
-                       _KERNEL_T_CTXCB *pk_ctxinf_nxt, r0 : ç\8f¾å\9c¨ã\81®ã\82³ã\83³ã\83\86ã\82­ã\82¹ã\83\88ã\81®ä¿\9då­\98å\85\88
-                       _KERNEL_T_CTXCB *pk_ctxinf_now) r1 : å\88\87ã\82\8aæ\9b¿ã\81\88ã\82\8bã\82³ã\83³ã\83\86ã\82­ã\82¹ã\83\88
+                       _KERNEL_T_CTXCB *pk_ctxinf_nxt, r0 : å\88\87ã\82\8aæ\9b¿ã\81\88ã\82\8bã\82³ã\83³ã\83\86ã\82­ã\82¹ã\83\88
+                       _KERNEL_T_CTXCB *pk_ctxinf_now) r1 : ç\8f¾å\9c¨ã\81®ã\82³ã\83³ã\83\86ã\82­ã\82¹ã\83\88ã\81®ä¿\9då­\98å\85\88
  ************************************************/
                                .global _kernel_swi_ctx
                                .thumb
index 4fcbf39..52f84cc 100644 (file)
@@ -19,7 +19,7 @@
                                .thumb_func
                                .type   _kernel_wai_int, %function
 _kernel_wai_int:
-               /*              mcr             p15, 0, r0, c7, c0, 4   */      /* WaitForInterrupt */
+                                                                                       /* WaitForInterrupt */
                                b               _kernel_wai_int
                                .size   _kernel_wai_int, .-_kernel_wai_int
 
diff --git a/kernel/source/arch/proc/arm/arm_v7m/vclr_int.c b/kernel/source/arch/proc/arm/arm_v7m/vclr_int.c
new file mode 100644 (file)
index 0000000..75af700
--- /dev/null
@@ -0,0 +1,31 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dis_int.c
+ * @brief %jp{ARMv7-M}%en{ARMv7-M}
+ *
+ * Copyright (C) 1998-2011 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+/* 割込みのクリア */
+ER vclr_int(INTNO intno)
+{
+       if ( intno < _KERNEL_PROCATR_TMIN_INHNO || intno > _KERNEL_PROCATR_TMAX_INHNO )
+       {
+               return E_PAR;
+       }
+
+       *(_KERNEL_REG_INT_CLRPEND_BASE + (intno >> 2)) = (1 << (intno & 3));
+
+       return E_OK;
+}
+
+
+
+/* end of file */
index d925a2d..9e05ad5 100755 (executable)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Hyper Operating System V4 Advance
  *
  * @file  del_cyc.c
 ER del_cyc(ID cycid)
 {
        _KERNEL_T_CYCCB  *cyccb;
-       _KERNEL_T_TCB    *tcb;
 
        /* %jp{IDチェック}%en{check ID} */
 #if _KERNEL_SPT_DEL_CYC_E_ID
        if ( !_KERNEL_CYC_CHECK_CYCID(cycid) )
        {
                return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
-       }       
+       }
 #endif
-       
+
        _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
-       
+
        /* %jp{存在チェック}%en{check object} */
 #if _KERNEL_SPT_DEL_CYC_E_NOEXS
        if ( !_KERNEL_CYC_CHECK_EXS(cycid) )
@@ -46,10 +45,10 @@ ER del_cyc(ID cycid)
                return E_NOEXS;
        }
 #endif
-       
+
        /* %jp{周期ハンドラコントロールブロック取得} */
        cyccb = _KERNEL_CYC_ID2CYCCB(cycid);
-       
+
        /* %jp{オブジェクト削除} */
 #if _KERNEL_CYCCB_ALGORITHM == _KERNEL_CYCCB_ALG_PTRARRAY
        _KERNEL_SYS_FRE_HEP(cyccb);                                             /* %jp{メモリ開放} */
@@ -59,7 +58,7 @@ ER del_cyc(ID cycid)
 #endif
 
        _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
-       
+
        return E_OK;
 }
 
index 3a8ad49..950f3d8 100644 (file)
@@ -37,7 +37,7 @@
 extern VP       _kernel_int_stkblk[((512) + sizeof(VP) - 1) / sizeof(VP)];
 
 
-_KERNEL_T_INHINF _kernel_inh_tbl[65] =
+_KERNEL_T_INHINF _kernel_inh_tbl[256] =
        {
                {(FP)(&_kernel_int_stkblk[((512) + sizeof(VP) - 1) / sizeof(VP)])},             /* stack pointer */
                {(FP)(_kernel_reset_handler)},          /* reset handler */
@@ -53,6 +53,197 @@ _KERNEL_T_INHINF _kernel_inh_tbl[65] =
                {(FP)NULL},
                {(FP)NULL},
                {(FP)NULL},
+               {(FP)(_kernel_pendsv_handler)},         /* hard fault handler */
+               {(FP)(OsTimer_Isr)},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
+               {(FP)NULL},
                {(FP)NULL},
                {(FP)NULL},
                {(FP)NULL},
diff --git a/sample/arm/stm32f103/gcc/vectors.S b/sample/arm/stm32f103/gcc/vectors.S
deleted file mode 100644 (file)
index c0f5a86..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* ------------------------------------------------------------------------ */
-/*  Hyper Operating System V4  サンプルプログラム                           */
-/*    ベクタテーブル                                                        */
-/*                                                                          */
-/*                                  Copyright (C) 1998-2007 by Project HOS  */
-/*                                  http://sourceforge.jp/projects/hos/     */
-/* ------------------------------------------------------------------------ */
-
-
-               /* --- 外部定数宣言 */
-                               .global _reset_handler
-                               .global _kernel_und_hdr
-                               .global _kernel_swi_hdr
-                               .global _kernel_pre_hdr
-                               .global _kernel_abt_hdr
-                               .global _kernel_irq_hdr
-                               .global _kernel_fiq_hdr
-
-
-                               .text
-                               .align  2
-
-/* --------------------------------------- */
-/*            ベクタ定義                   */
-/* --------------------------------------- */
-                               ldr             pc, adr_rst_hdr
-                               ldr             pc, adr_und_hdr
-                               ldr             pc, adr_swi_hdr
-                               ldr             pc, adr_pre_hdr
-                               ldr             pc, adr_abt_hdr
-                               nop
-                               ldr             pc, adr_irq_hdr
-                               ldr             pc, adr_fiq_hdr
-
-
-adr_rst_hdr:   
-                               .long   _reset_handler
-adr_und_hdr:           
-                               .long   _kernel_und_hdr
-adr_swi_hdr:   
-                               .long   _kernel_swi_hdr
-adr_pre_hdr:           
-                               .long   _kernel_pre_hdr
-adr_abt_hdr:
-                               .long   _kernel_abt_hdr
-adr_irq_hdr:
-                               .long   _kernel_irq_hdr
-adr_fiq_hdr:
-                               .long   _kernel_fiq_hdr
-
-
-                               .end
-
-
-/* end of file */
index 31264c7..c31e4aa 100644 (file)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Sample program for Hyper Operating System V4 Advance
  *
  * @file  ostimer.c
 #include "ostimer.h"
 
 
-#define INTNO_TIMER0   4
-
-
-static void OsTimer_Isr(VP_INT exinf); /**< %jp{タイマ割込みサービスルーチン} */
+#define REG_SCSR               ((volatile UW *)0xE000E010)             /* SysTick Control and Status Register */
+#define REG_SRVR               ((volatile UW *)0xE000E014)             /* SysTick Reload Value Register */
+#define REG_SCUVR              ((volatile UW *)0xE000E018)             /* SysTick Current Value Register */
+#define REG_SCAVR              ((volatile UW *)0xE000E01c)             /* SysTick Calibration Value Register */
 
 
 /** %jp{OS用タイマ初期化ルーチン} */
 void OsTimer_Initialize(VP_INT exinf)
 {
-       T_CISR cisr;
-       
-       /* %jp{割込みサービスルーチン生成} */
-/*
-       cisr.isratr = TA_HLNG;
-       cisr.exinf  = 0;
-       cisr.intno  = INTNO_TIMER0;
-       cisr.isr    = (FP)OsTimer_Isr;
-       acre_isr(&cisr);
-*/
-
-/*     ena_int(INTNO_TIMER0);  */
-
        /* %jp{タイマ動作開始} */
+       *REG_SRVR  = 1000000;
+       *REG_SCUVR = 0;
+       *REG_SCSR  = 0x00000007;
+
+       ena_int(15);
 }
 
 
 /** %jp{タイマ割込みハンドラ} */
-void OsTimer_Isr(VP_INT exinf)
+void OsTimer_Isr(void)
 {
        /* %jp{割込み要因クリア} */
-       
+       vclr_int(15);
+
        /* %jp{タイムティック供給} */
        isig_tim();
 }
index e741bb1..baeb71c 100644 (file)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Sample program for Hyper Operating System V4 Advance
  *
  * @file  ostimer.c
@@ -19,6 +19,7 @@ extern "C" {
 
 /** %jp{OS用タイマ初期化ルーチン} */
 void OsTimer_Initialize(VP_INT exinf);
+void OsTimer_Isr(void);
 
 #ifdef __cplusplus
 }
index dc177ce..428a668 100644 (file)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Sample program for Hyper Operating System V4 Advance
  *
  * @file  sample.c
 #define RIGHT(num)     ((num) >= 5 ? 1 : (num) + 1)
 
 
-ID mbxid;
-ID mpfid;
-
-
-/** %jp{メッセージ構造体} */
-typedef struct t_print_msg
-{
-       T_MSG msg;
-       char  text[32];
-} T_PRINT_MSG;
-
-
 /** %jp{初期化ハンドラ} */
 void Sample_Initialize(VP_INT exinf)
 {
-       T_CMPF cmpf;
-       T_CMBX cmbx;
-       
        /* %jp{UART初期化} */
        Uart_Initialize();
-       
-       /* %jp{固定長メモリプール生成} */
-       cmpf.mpfatr = TA_TFIFO;                                 
-       cmpf.blkcnt = 3;                                                
-       cmpf.blksz  = sizeof(T_PRINT_MSG);              
-       cmpf.mpf    = NULL;                                             
-       mpfid = acre_mpf(&cmpf);
-
-       /* %jp{メールボックス生成} */
-       cmbx.mbxatr  = TA_TFIFO | TA_TFIFO;             
-       cmbx.maxmpri = 1;                                               
-       cmbx.mprihd  = NULL;                                    
-       mbxid = acre_mbx(&cmbx);
-
-       /* %jp{タスク起動} */
-       act_tsk(TSKID_PRINT);
-       act_tsk(TSKID_SAMPLE1);
-       act_tsk(TSKID_SAMPLE2);
-       act_tsk(TSKID_SAMPLE3);
-       act_tsk(TSKID_SAMPLE4);
-       act_tsk(TSKID_SAMPLE5);
 }
 
 
@@ -69,7 +33,7 @@ void rand_wait(void)
        int r;
 
        wai_sem(SEMID_RAND);
-       r = rand();
+       r = 500; /*rand();*/
        sig_sem(SEMID_RAND);
 
        dly_tsk((r % 100) + 10);
@@ -79,23 +43,16 @@ void rand_wait(void)
 /** %jp{状態表示} */
 void print_state(int num, char *text)
 {
-       T_PRINT_MSG *msg;
-       VP  mem;
-       
-       /* %jp{メモリ取得} */
-       get_mpf(mpfid, &mem);
-       msg = (T_PRINT_MSG *)mem;
+       wai_sem(SEMID_UART);
 
        /* %jp{文字列生成} */
-       msg->text[0] = '0' + num;
-       msg->text[1] = ' ';
-       msg->text[2] = ':';
-       msg->text[3] = ' ';
-       strcpy(&msg->text[4], text);
-       strcat(msg->text, "\n");
-       
-       /* %jp{表示タスクに送信} */
-       snd_mbx(mbxid, (T_MSG *)msg);
+       Uart_PutChar('0' + num);
+       Uart_PutChar(' ');
+       Uart_PutChar(':');
+       Uart_PutChar(' ');
+       Uart_PutString(text);
+
+       sig_sem(SEMID_UART);
 }
 
 
@@ -103,16 +60,16 @@ void print_state(int num, char *text)
 void Sample_Task(VP_INT exinf)
 {
        int num;
-       
+
        num = (int)exinf;
-       
+
        /* %jp{いわゆる哲学者の食事の問題} */
        for ( ; ; )
        {
                /* %jp{適当な時間考える} */
                print_state(num, "thinking");
                rand_wait();
-               
+
                /* %jp{左右のフォークを取るまでループ} */
                for ( ; ; )
                {
@@ -123,7 +80,7 @@ void Sample_Task(VP_INT exinf)
                                break;  /* %jp{両方取れた} */
                        }
                        sig_sem(LEFT(num));     /* %jp{取れなければ離す} */
-                       
+
                        /* %jp{適当な時間待つ} */
                        print_state(num, "hungry");
                        rand_wait();
@@ -140,11 +97,11 @@ void Sample_Task(VP_INT exinf)
                        print_state(num, "hungry");
                        rand_wait();
                }
-               
+
                /* %jp{適当な時間、食べる} */
                print_state(num, "eating");
                rand_wait();
-               
+
                /* %jp{フォークを置く} */
                sig_sem(LEFT(num));
                sig_sem(RIGHT(num));
@@ -152,19 +109,5 @@ void Sample_Task(VP_INT exinf)
 }
 
 
-/** %jp{表示タスク} */
-void Sample_Print(VP_INT exinf)
-{
-       T_PRINT_MSG *msg;
-       
-       for ( ; ; )
-       {
-               rcv_mbx(mbxid, (T_MSG **)&msg);
-               Uart_PutString(msg->text);
-               rel_mpf(mpfid, msg);
-       }
-}
-
-
 
 /* end of file */
index d0d5cca..10fe2f0 100644 (file)
@@ -1,4 +1,4 @@
-/** 
+/**
  *  Sample program for Hyper Operating System V4 Advance
  *
  * @file  system.cfg
@@ -14,32 +14,33 @@ KERNEL_HEP_MEM(256, NULL);
 KERNEL_SYS_STK(256, NULL);
 KERNEL_INT_STK(512, NULL);
 KERNEL_MAX_TSKID(5);
-KERNEL_MAX_SEMID(6);
-KERNEL_MAX_FLGID(2);
-KERNEL_MAX_MBXID(2);
-KERNEL_MAX_MPFID(2);
-KERNEL_MAX_ISRID(4);
+KERNEL_MAX_SEMID(7);
+KERNEL_MAX_FLGID(0);
+KERNEL_MAX_MBXID(0);
+KERNEL_MAX_MPFID(0);
+KERNEL_MAX_MTXID(0);
 
 
 /* %jp{OSタイマの設定}%en{OS timer} */
 INCLUDE("\"ostimer.h\"");
 ATT_INI({TA_HLNG, 0, OsTimer_Initialize});
+DEF_INH(15, {TA_HLNG, OsTimer_Isr});                                   /* 15:SysTick */
 
 /* %jp{サンプル}%en{Sample program} */
 INCLUDE("\"sample.h\"");
 ATT_INI({TA_HLNG, 0, Sample_Initialize});
-CRE_TSK(TSKID_PRINT,   {TA_HLNG, 1, Sample_Print, 1, 512, NULL});
-CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 512, NULL});
-CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 512, NULL});
-CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 512, NULL});
-CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 512, NULL});
-CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE1, {TA_HLNG | TA_ACT, 1, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE2, {TA_HLNG | TA_ACT, 2, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE3, {TA_HLNG | TA_ACT, 3, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE4, {TA_HLNG | TA_ACT, 4, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE5, {TA_HLNG | TA_ACT, 5, Sample_Task, 2, 512, NULL});
 CRE_SEM(1, {TA_TFIFO, 1, 1});
 CRE_SEM(2, {TA_TFIFO, 1, 1});
 CRE_SEM(3, {TA_TFIFO, 1, 1});
 CRE_SEM(4, {TA_TFIFO, 1, 1});
 CRE_SEM(5, {TA_TFIFO, 1, 1});
 CRE_SEM(SEMID_RAND, {TA_TFIFO, 1, 1});
+CRE_SEM(SEMID_UART, {TA_TFIFO, 1, 1});
 
 
 /* end of file */