OSDN Git Service

rename arm_v7m to cortex-m3
[hos/hos-v4a.git] / cfgrtr / source / definh.cpp
1 // ---------------------------------------------------------------------------
2 //  Hyper Operating System V4a  コンフィギュレーター
3 //    DEF_INH API の処理
4 //
5 //                                    Copyright (C) 1998-2011 by Project HOS
6 //                                    http://sourceforge.jp/projects/hos/
7 // ---------------------------------------------------------------------------
8
9
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include <string.h>
13 #include "defercd.h"
14 #include "definh.h"
15 #include "analyze.h"
16 #include "readcfg.h"
17
18
19 #define DEFINH_INHNO            0
20 #define DEFINH_INHATR           1
21 #define DEFINH_INTHDR           2
22
23
24 // %jp{コンストラクタ}
25 CApiDefInh::CApiDefInh()
26 {
27         // パラメーター構文設定
28         m_iParamSyntax[0] = 0;          // 単独パラメーター
29         m_iParamSyntax[1] = 2;          // 2個のパラメーターブロック
30         m_iParams         = 2;
31 }
32
33
34 // %jp{デストラクタ}
35 CApiDefInh::~CApiDefInh()
36 {
37 }
38
39
40 // %jp{APIの解析}
41 int CApiDefInh::AnalyzeApi(const char* pszApiName, const char* pszParams)
42 {
43         if ( strcmp(pszApiName, "DEF_INH") == 0 )
44         {
45                 return AddParams(pszParams);
46         }
47
48         return CFG_ERR_NOPROC;
49 }
50
51
52 // %jp{文字列を展開}
53 int CApiDefInh::AutoId(void)
54 {
55         return CFG_ERR_OK;
56 }
57
58
59 // %jp{cfgファイル定義部書き出し}
60 void  CApiDefInh::WriteCfgDef(FILE* fp)
61 {
62 #ifndef _KERNEL_PROCATR_ARM_CORTEX_M3
63         int i, j;
64
65         // コメント出力
66         fputs(
67                 "\n\n\n"
68                 "/* ------------------------------------------ */\n"
69                 "/*        define interrupt handler            */\n"
70                 "/* ------------------------------------------ */\n"
71                 , fp);
72
73         fprintf(fp,
74                 "\n\n"
75 #if !_KERNEL_SPT_DEF_INH
76                 "const "
77 #endif
78                 "_KERNEL_T_INHINF _kernel_inh_tbl[%d] =\n"
79                 "\t{\n",
80                 _KERNEL_TMAX_INH_INHNO - _KERNEL_TMIN_INH_INHNO + 1);
81
82         for ( i = _KERNEL_TMIN_INH_INHNO; i <= _KERNEL_TMAX_INH_INHNO; i++ )
83         {
84                 for ( j = 0; j < m_iObjs; j++ )
85                 {
86                         if ( atoi(m_pParamPacks[j]->GetParam(DEFINH_INHNO)) == i )
87                         {
88                                 break;
89                         }
90                 }
91                 if ( j < m_iObjs )
92                 {
93                         fprintf(fp, "\t\t{(FP)(%s)},\n", m_pParamPacks[j]->GetParam(DEFINH_INTHDR));
94                 }
95                 else
96                 {
97                         fprintf(fp, "\t\t{(FP)NULL},\n");
98                 }
99         }
100         fprintf(fp, "\t};\n\n");
101
102 #endif
103 }
104
105
106 // %jp{cfgファイル定義部書き出し}
107 void  CApiDefInh::WriteCfgStart(FILE* fp)
108 {
109 }
110
111
112 void  CApiDefInh::WriteVecter(FILE* fp, CApiIntStack *pIntStack)
113 {
114 #ifdef _KERNEL_PROCATR_ARM_CORTEX_M3
115         int i, j;
116
117         // コメント出力
118         fputs(
119                 "\n\n\n"
120                 "/* ------------------------------------------ */\n"
121                 "/*        define interrupt handler            */\n"
122                 "/* ------------------------------------------ */\n\n"
123                 , fp);
124
125         pIntStack->WriteStackMemory(fp);
126
127         fprintf(fp,
128                 "\n\n"
129 #if !_KERNEL_SPT_DEF_INH
130                 "const "
131 #endif
132                 "_KERNEL_T_INHINF _kernel_inh_tbl[%d] =\n"
133                 "\t{\n",
134                 _KERNEL_TMAX_INH_INHNO - _KERNEL_TMIN_INH_INHNO + 1);
135
136         for ( i = _KERNEL_TMIN_INH_INHNO; i <= _KERNEL_TMAX_INH_INHNO; i++ )
137         {
138                 switch ( i )
139                 {
140                 case 0:
141                         fprintf(fp, "\t\t{(FP)(_kernel_reset_handler)},\t\t/* reset handler */\n");
142                         break;
143
144                 case 1:
145                         fprintf(fp, "\t\t{(FP)(");
146                         pIntStack->WriteStackPointer(fp);
147                         fprintf(fp, ")},\t\t/* stack pointer */\n");
148                         break;
149
150                 case 2:
151                         fprintf(fp, "\t\t{(FP)(_kernel_nmi_handler)},\t\t/* non maskable intterupt handler */\n");
152                         break;
153
154                 case 3:
155                         fprintf(fp, "\t\t{(FP)(_kernel_hw_fault_handler)},\t\t/* hard fault handler */\n");
156                         break;
157
158                 default:
159                         for ( j = 0; j < m_iObjs; j++ )
160                         {
161                                 if ( atoi(m_pParamPacks[j]->GetParam(DEFINH_INHNO)) == i )
162                                 {
163                                         break;
164                                 }
165                         }
166                         if ( j < m_iObjs )
167                         {
168                                 fprintf(fp, "\t\t{(FP)(%s)},\n", m_pParamPacks[j]->GetParam(DEFINH_INTHDR));
169                         }
170                         else
171                         {
172                                 fprintf(fp, "\t\t{(FP)NULL},\n");
173                         }
174                         break;
175                 }
176         }
177         fprintf(fp, "\t};\n\n");
178
179 #endif
180 }
181
182
183
184 // ---------------------------------------------------------------------------
185 //  end of file
186 // ---------------------------------------------------------------------------