OSDN Git Service

add Cortex-M3 PendSV
[hos/hos-v4a.git] / cfgrtr / source / definh.cpp
index 4157217..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/
 // ---------------------------------------------------------------------------
 
 
 #include "readcfg.h"
 
 
-#define ATTINI_INIATR          0
-#define ATTINI_EXINF           1
-#define ATTINI_INIRTN          2
+#define DEFINH_INHNO           0
+#define DEFINH_INHATR          1
+#define DEFINH_INTHDR          2
 
 
-// コンストラクタ
+// %jp{コンストラクタ}
 CApiDefInh::CApiDefInh()
 {
        // パラメーター構文設定
@@ -31,14 +31,13 @@ CApiDefInh::CApiDefInh()
 }
 
 
-// デストラクタ
+// %jp{デストラクタ}
 CApiDefInh::~CApiDefInh()
 {
 }
 
 
-
-// APIの解析
+// %jp{APIの解析}
 int CApiDefInh::AnalyzeApi(const char* pszApiName, const char* pszParams)
 {
        if ( strcmp(pszApiName, "DEF_INH") == 0 )
@@ -50,15 +49,19 @@ int CApiDefInh::AnalyzeApi(const char* pszApiName, const char* pszParams)
 }
 
 
-// 文字列を展開
+// %jp{文字列を展開}
 int CApiDefInh::AutoId(void)
 {
        return CFG_ERR_OK;
 }
 
-// cfgファイル定義部書き出し
+
+// %jp{cfgファイル定義部書き出し}
 void  CApiDefInh::WriteCfgDef(FILE* fp)
 {
+#ifndef _KERNEL_PROCATR_ARM_CORTEX_M3
+       int i, j;
+
        // コメント出力
        fputs(
                "\n\n\n"
@@ -72,18 +75,116 @@ void  CApiDefInh::WriteCfgDef(FILE* fp)
 #if !_KERNEL_SPT_DEF_INH
                "const "
 #endif
-               "_KERNEL_T_INHINF _kernel_inh_tbl[%d];\n\n",
-               KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1);
+               "_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++ )
+       {
+               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");
+               }
+       }
+       fprintf(fp, "\t};\n\n");
 
+#endif
 }
 
 
-// cfgファイル定義部書き出し
+// %jp{cfgファイル定義部書き出し}
 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-2002 by Project HOS                                    
+//  end of file
 // ---------------------------------------------------------------------------