OSDN Git Service

add Cortex-M3 PendSV
[hos/hos-v4a.git] / cfgrtr / source / definh.cpp
index 60a67c3..5ad3377 100755 (executable)
@@ -1,9 +1,9 @@
 // ---------------------------------------------------------------------------
-//  Hyper Operating System V4  コンフィギュレーター                           
-//    DEF_INH API の処理                                                      
-//                                                                            
-//                                    Copyright (C) 1998-2002 by Project HOS  
-//                                    http://sourceforge.jp/projects/hos/     
+//  Hyper Operating System V4a  コンフィギュレーター
+//    DEF_INH API の処理
+//
+//                                    Copyright (C) 1998-2011 by Project HOS
+//                                    http://sourceforge.jp/projects/hos/
 // ---------------------------------------------------------------------------
 
 
@@ -59,6 +59,7 @@ int CApiDefInh::AutoId(void)
 // %jp{cfgファイル定義部書き出し}
 void  CApiDefInh::WriteCfgDef(FILE* fp)
 {
+#ifndef _KERNEL_PROCATR_ARM_CORTEX_M3
        int i, j;
 
        // コメント出力
@@ -75,10 +76,10 @@ void  CApiDefInh::WriteCfgDef(FILE* fp)
                "const "
 #endif
                "_KERNEL_T_INHINF _kernel_inh_tbl[%d] =\n"
-               "{\n",
-               KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1);
-       
-       for ( i = KERNEL_TMIN_INH_INHNO; i <= KERNEL_TMAX_INH_INHNO; i++ )
+               "\t{\n",
+               _KERNEL_TMAX_INH_INHNO - _KERNEL_TMIN_INH_INHNO + 1);
+
+       for ( i = _KERNEL_TMIN_INH_INHNO; i <= _KERNEL_TMAX_INH_INHNO; i++ )
        {
                for ( j = 0; j < m_iObjs; j++ )
                {
@@ -89,20 +90,16 @@ void  CApiDefInh::WriteCfgDef(FILE* fp)
                }
                if ( j < m_iObjs )
                {
-                       fprintf(fp, "\t(FP)(%s),\n", m_pParamPacks[j]->GetParam(DEFINH_INTHDR));
-               }
-#if _KERNEL_SPT_ISR
-               else if ( i >= _KERNEL_IRCATR_TMIN_INHNO && i <= _KERNEL_IRCATR_TMAX_INHNO )
-               {
-                       fprintf(fp, "\t(FP)_KERNEL_EXE_IRC,\n");
+                       fprintf(fp, "\t\t{(FP)(%s)},\n", m_pParamPacks[j]->GetParam(DEFINH_INTHDR));
                }
-#endif
                else
                {
-                       fprintf(fp, "\tNULL,\n");
+                       fprintf(fp, "\t\t{(FP)NULL},\n");
                }
        }
-       fprintf(fp, "};\n\n");
+       fprintf(fp, "\t};\n\n");
+
+#endif
 }
 
 
@@ -112,6 +109,82 @@ void  CApiDefInh::WriteCfgStart(FILE* fp)
 }
 
 
+void  CApiDefInh::WriteVecter(FILE* fp, CApiIntStack *pIntStack)
+{
+#ifdef _KERNEL_PROCATR_ARM_CORTEX_M3
+       int i, j;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*        define interrupt handler            */\n"
+               "/* ------------------------------------------ */\n\n"
+               , fp);
+
+       pIntStack->WriteStackMemory(fp);
+
+       fprintf(fp,
+               "\n\n"
+#if !_KERNEL_SPT_DEF_INH
+               "const "
+#endif
+               "_KERNEL_T_INHINF _kernel_inh_tbl[%d] =\n"
+               "\t{\n",
+               _KERNEL_TMAX_INH_INHNO - _KERNEL_TMIN_INH_INHNO + 1);
+
+       for ( i = _KERNEL_TMIN_INH_INHNO; i <= _KERNEL_TMAX_INH_INHNO; i++ )
+       {
+               switch ( i )
+               {
+               case 0:
+                       fprintf(fp, "\t\t{(FP)(");
+                       pIntStack->WriteStackPointer(fp);
+                       fprintf(fp, ")},\t\t/* stack pointer */\n");
+                       break;
+
+               case 1:
+                       fprintf(fp, "\t\t{(FP)(_kernel_reset_handler)},\t\t/* reset handler */\n");
+                       break;
+
+               case 2:
+                       fprintf(fp, "\t\t{(FP)(_kernel_nmi_handler)},\t\t/* non maskable intterupt handler */\n");
+                       break;
+
+               case 3:
+                       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++ )
+                       {
+                               if ( atoi(m_pParamPacks[j]->GetParam(DEFINH_INHNO)) == i )
+                               {
+                                       break;
+                               }
+                       }
+                       if ( j < m_iObjs )
+                       {
+                               fprintf(fp, "\t\t{(FP)(%s)},\n", m_pParamPacks[j]->GetParam(DEFINH_INTHDR));
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{(FP)NULL},\n");
+                       }
+                       break;
+               }
+       }
+       fprintf(fp, "\t};\n\n");
+
+#endif
+}
+
+
+
 // ---------------------------------------------------------------------------
-//  Copyright (C) 1998-2006 by Project HOS                                    
+//  end of file
 // ---------------------------------------------------------------------------