source: extension/dcre/kernel/kernel.tf @ 7

このファイルの 7 以降における最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 44.9 KB
Rev 
[7]1$ ======================================================================
2$
3$   TOPPERS/ASP Kernel
4$       Toyohashi Open Platform for Embedded Real-Time Systems/
5$       Advanced Standard Profile Kernel
6$
7$   Copyright (C) 2007 by TAKAGI Nobuhisa
8$   Copyright (C) 2007-2015 by Embedded and Real-Time Systems Laboratory
9$               Graduate School of Information Science, Nagoya Univ., JAPAN
10
11$   Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
12$   ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
13$   ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
14$   (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
15$       ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
16$       ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
17$   (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
18$       Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
19$       ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
20$       €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
21$   (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
22$       Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
23$       €È¡¥
24$     (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
25$         ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
26$     (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
27$         Êó¹ð€¹€ë€³€È¡¥
28$   (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
29$       ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
30$       €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
31$       Í³€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
32$       ÌÈÀÕ€¹€ë€³€È¡¥
33
34$   ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
35$   €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
36$   €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
37$   ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
38$   €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
39$
40$   $Id$
41
42$ =====================================================================
43
44$ =====================================================================
45$ AID_YYY€ÎœèÍý
46$ =====================================================================
47
48$num_atskid = 0$
49$FOREACH i ATSK.ORDER_LIST$
50$       // notsk€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
51        $IF ATSK.NOTSK[i] < 0$
52                $ERROR ATSK.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "notsk", ATSK.NOTSK[i], "AID_TSK")$$END$
53        $END$
54        $num_atskid = num_atskid + ATSK.NOTSK[i]$
55$END$
56$num_tskid = LENGTH(TSK.ID_LIST) + num_atskid$
57
58$num_asemid = 0$
59$FOREACH i ASEM.ORDER_LIST$
60$       // nosem€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
61        $IF ASEM.NOSEM[i] < 0$
62                $ERROR ASEM.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nosem", ASEM.NOSEM[i], "AID_SEM")$$END$
63        $END$
64        $num_asemid = num_asemid + ASEM.NOSEM[i]$
65$END$
66$num_semid = LENGTH(SEM.ID_LIST) + num_asemid$
67
68$num_aflgid = 0$
69$FOREACH i AFLG.ORDER_LIST$
70$       // noflg€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
71        $IF AFLG.NOFLG[i] < 0$
72                $ERROR AFLG.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noflg", AFLG.NOFLG[i], "AID_FLG")$$END$
73        $END$
74        $num_aflgid = num_aflgid + AFLG.NOFLG[i]$
75$END$
76$num_flgid = LENGTH(FLG.ID_LIST) + num_aflgid$
77
78$num_adtqid = 0$
79$FOREACH i ADTQ.ORDER_LIST$
80$       // nodtq€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
81        $IF ADTQ.NODTQ[i] < 0$
82                $ERROR ADTQ.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nodtq", ADTQ.NODTQ[i], "AID_DTQ")$$END$
83        $END$
84        $num_adtqid = num_adtqid + ADTQ.NODTQ[i]$
85$END$
86$num_dtqid = LENGTH(DTQ.ID_LIST) + num_adtqid$
87
88$num_apdqid = 0$
89$FOREACH i APDQ.ORDER_LIST$
90$       // nopdq€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
91        $IF APDQ.NOPDQ[i] < 0$
92                $ERROR APDQ.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nopdq", APDQ.NOPDQ[i], "AID_PDQ")$$END$
93        $END$
94        $num_apdqid = num_apdqid + APDQ.NOPDQ[i]$
95$END$
96$num_pdqid = LENGTH(PDQ.ID_LIST) + num_apdqid$
97
98$num_ambxid = 0$
99$FOREACH i AMBX.ORDER_LIST$
100$       // nombx€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
101        $IF AMBX.NOMBX[i] < 0$
102                $ERROR AMBX.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nombx", AMBX.NOMBX[i], "AID_MBX")$$END$
103        $END$
104        $num_ambxid = num_ambxid + AMBX.NOMBX[i]$
105$END$
106$num_mbxid = LENGTH(MBX.ID_LIST) + num_ambxid$
107
108$num_ampfid = 0$
109$FOREACH i AMPF.ORDER_LIST$
110$       // nompf€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
111        $IF AMPF.NOMPF[i] < 0$
112                $ERROR AMPF.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nompf", AMPF.NOMPF[i], "AID_MPF")$$END$
113        $END$
114        $num_ampfid = num_ampfid + AMPF.NOMPF[i]$
115$END$
116$num_mpfid = LENGTH(MPF.ID_LIST) + num_ampfid$
117
118$num_acycid = 0$
119$FOREACH i ACYC.ORDER_LIST$
120$       // nocyc€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
121        $IF ACYC.NOCYC[i] < 0$
122                $ERROR ACYC.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nocyc", ACYC.NOCYC[i], "AID_CYC")$$END$
123        $END$
124        $num_acycid = num_acycid + ACYC.NOCYC[i]$
125$END$
126$num_cycid = LENGTH(CYC.ID_LIST) + num_acycid$
127
128$num_aalmid = 0$
129$FOREACH i AALM.ORDER_LIST$
130$       // noalm€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
131        $IF AALM.NOALM[i] < 0$
132                $ERROR AALM.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noalm", AALM.NOALM[i], "AID_ALM")$$END$
133        $END$
134        $num_aalmid = num_aalmid + AALM.NOALM[i]$
135$END$
136$num_almid = LENGTH(ALM.ID_LIST) + num_aalmid$
137
138$num_aisrid = 0$
139$FOREACH i AISR.ORDER_LIST$
140$       // noisr€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
141        $IF AISR.NOISR[i] < 0$
142                $ERROR AISR.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noisr", AISR.NOISR[i], "AID_ISR")$$END$
143        $END$
144        $num_aisrid = num_aisrid + AISR.NOISR[i]$
145$END$
146$num_isrid = num_aisrid$
147$num_isr = LENGTH(ISR.ORDER_LIST) + num_aisrid$
148
149$ =====================================================================
150$ kernel_cfg.h€ÎÀžÀ®
151$ =====================================================================
152
153$FILE "kernel_cfg.h"$
154/* kernel_cfg.h */$NL$
155#ifndef TOPPERS_KERNEL_CFG_H$NL$
156#define TOPPERS_KERNEL_CFG_H$NL$
157$NL$
158#define TNUM_TSKID      $num_tskid$$NL$
159#define TNUM_SEMID      $num_semid$$NL$
160#define TNUM_FLGID      $num_flgid$$NL$
161#define TNUM_DTQID      $num_dtqid$$NL$
162#define TNUM_PDQID      $num_pdqid$$NL$
163#define TNUM_MBXID      $num_mbxid$$NL$
164#define TNUM_MPFID      $num_mpfid$$NL$
165#define TNUM_CYCID      $num_cycid$$NL$
166#define TNUM_ALMID      $num_almid$$NL$
167#define TNUM_ISRID      $num_isrid$$NL$
168$NL$
169$FOREACH id TSK.ID_LIST$
170        #define $id$    $+id$$NL$
171$END$
172$FOREACH id SEM.ID_LIST$
173        #define $id$    $+id$$NL$
174$END$
175$FOREACH id FLG.ID_LIST$
176        #define $id$    $+id$$NL$
177$END$
178$FOREACH id DTQ.ID_LIST$
179        #define $id$    $+id$$NL$
180$END$
181$FOREACH id PDQ.ID_LIST$
182        #define $id$    $+id$$NL$
183$END$
184$FOREACH id MBX.ID_LIST$
185        #define $id$    $+id$$NL$
186$END$
187$FOREACH id MPF.ID_LIST$
188        #define $id$    $+id$$NL$
189$END$
190$FOREACH id CYC.ID_LIST$
191        #define $id$    $+id$$NL$
192$END$
193$FOREACH id ALM.ID_LIST$
194        #define $id$    $+id$$NL$
195$END$
196$NL$
197#endif /* TOPPERS_KERNEL_CFG_H */$NL$
198
199$ =====================================================================
200$ kernel_cfg.c€ÎÀžÀ®
201$ =====================================================================
202
203$FILE "kernel_cfg.c"$
204/* kernel_cfg.c */$NL$
205#include "kernel/kernel_int.h"$NL$
206#include "kernel_cfg.h"$NL$
207$NL$
208#if TKERNEL_PRID != 0x07u$NL$
209#error The kernel does not match this configuration file.$NL$
210#endif$NL$
211$NL$
212
213$
214$  ¥€¥ó¥¯¥ë¡Œ¥É¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¡Ê#include¡Ë
215$
216/*$NL$
217$SPC$*  Include Directives (#include)$NL$
218$SPC$*/$NL$
219$NL$
220$INCLUDES$
221$NL$
222
223$
224$  ¥ª¥Ö¥ž¥§¥¯¥È€ÎIDÈÖ¹æ€òÊÝ»ý€¹€ëÊÑ¿ô
225$
226$IF USE_EXTERNAL_ID$
227        /*$NL$
228        $SPC$*  Variables for Object ID$NL$
229        $SPC$*/$NL$
230        $NL$
231        $FOREACH id TSK.ID_LIST$
232                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
233        $END$
234        $FOREACH id SEM.ID_LIST$
235                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
236        $END$
237        $FOREACH id FLG.ID_LIST$
238                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
239        $END$
240        $FOREACH id DTQ.ID_LIST$
241                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
242        $END$
243        $FOREACH id PDQ.ID_LIST$
244                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
245        $END$
246        $FOREACH id MBX.ID_LIST$
247                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
248        $END$
249        $FOREACH id MPF.ID_LIST$
250                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
251        $END$
252        $FOREACH id CYC.ID_LIST$
253                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
254        $END$
255        $FOREACH id ALM.ID_LIST$
256                const ID $id$_id$SPC$=$SPC$$+id$;$NL$
257        $END$
258$END$
259
260$
261$  ¥¹¥¿¥Ã¥¯Îΰè€Î³ÎÊÝŽØ¿ô
262$
263$IF !ISFUNCTION("ALLOC_STACK")$
264$FUNCTION ALLOC_STACK$
265$       // Â瀭€€Êý€ËŽÝ€á€¿¥µ¥€¥º€Ç³ÎÊÝ€¹€ë
266        static STK_T $ARGV[1]$[COUNT_STK_T($ARGV[2]$)];$NL$
267        $RESULT = FORMAT("ROUND_STK_T(%1%)", ARGV[2])$
268$END$
269$END$
270
271$
272$  ¥¿¥¹¥¯
273$
274/*$NL$
275$SPC$*  Task Management Functions$NL$
276$SPC$*/$NL$
277$NL$
278
279$ ÀÅŪ€ËÀžÀ®€µ€ì€¿¥¿¥¹¥¯€¬1žÄ°ÊŸåžºß€¹€ë€³€È€Î¥Á¥§¥Ã¥¯
280$IF !LENGTH(TSK.ID_LIST)$
281        $ERROR$$FORMAT(_("no task is registered"))$$END$
282$END$
283
284$ ÀÅŪ€ËÀžÀ®€µ€ì€¿¥¿¥¹¥¯€Î¿ô
285#define TNUM_STSKID     $LENGTH(TSK.ID_LIST)$$NL$
286$NL$
287
288$ ¥¿¥¹¥¯IDÈÖ¹æ€ÎºÇÂçÃÍ
289const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);$NL$
290const ID _kernel_tmax_stskid = (TMIN_TSKID + TNUM_STSKID - 1);$NL$
291$NL$
292
293$ ¥š¥é¡Œ¥Á¥§¥Ã¥¯
294$FOREACH tskid TSK.ID_LIST$
295$       // tskatr€¬¡Ê¡ÎTA_ACT¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
296        $IF (TSK.TSKATR[tskid] & ~(TA_ACT|TARGET_TSKATR)) != 0$
297                $ERROR TSK.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "tskatr", TSK.TSKATR[tskid], tskid, "CRE_TSK")$$END$
298        $END$
299
300$       // (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
301        $IF !(TMIN_TPRI <= TSK.ITSKPRI[tskid] && TSK.ITSKPRI[tskid] <= TMAX_TPRI)$
302                $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "itskpri", TSK.ITSKPRI[tskid], tskid, "CRE_TSK")$$END$
303        $END$
304
305$       // texatr€¬¡ÊTA_NULL¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
306        $IF LENGTH(TSK.TEXATR[tskid]) && TSK.TEXATR[tskid] != 0$
307                $ERROR DEF_TEX.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "texatr", TSK.TEXATR[tskid], tskid, "DEF_TEX")$$END$
308        $END$
309$END$
310
311$ ¥¹¥¿¥Ã¥¯Îΰè€ÎÀžÀ®€È€œ€ì€ËŽØ€¹€ë¥š¥é¡Œ¥Á¥§¥Ã¥¯
312$FOREACH tskid TSK.ID_LIST$
313$       // stksz€¬0°Ê²Œ€«¡€¥¿¡Œ¥²¥Ã¥ÈÄêµÁ€ÎºÇŸ®ÃÍ¡ÊTARGET_MIN_STKSZ¡Ë€è€ê€â
314$       // Ÿ®€µ€€Ÿì¹ç¡ÊE_PAR¡Ë
315        $IF TSK.STKSZ[tskid] <= 0 || (TARGET_MIN_STKSZ
316                                                                        && TSK.STKSZ[tskid] < TARGET_MIN_STKSZ)$
317                $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("too small %1% `%2%\' of `%3%\' in %4%"), "stksz", TSK.STKSZ[tskid], tskid, "CRE_TSK")$$END$
318        $END$
319
320$       // stksz€¬¥¹¥¿¥Ã¥¯Îΰè€Î¥µ¥€¥º€È€·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
321        $IF !EQ(TSK.STK[tskid], "NULL") && CHECK_STKSZ_ALIGN
322                                                        && (TSK.STKSZ[tskid] & (CHECK_STKSZ_ALIGN - 1))$
323                $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"), "stksz", TSK.STKSZ[tskid], tskid, "CRE_TSK")$$END$
324        $END$
325
326        $IF EQ(TSK.STK[tskid],"NULL")$
327                $TSK.TINIB_STKSZ[tskid] = ALLOC_STACK(CONCAT("_kernel_stack_",
328                                                                                                tskid), TSK.STKSZ[tskid])$
329                $TSK.TINIB_STK[tskid] = CONCAT("_kernel_stack_", tskid)$
330        $ELSE$
331                $TSK.TINIB_STKSZ[tskid] = FORMAT("(%1%)", TSK.STKSZ[tskid])$
332                $TSK.TINIB_STK[tskid] = FORMAT("(void *)(%1%)", TSK.STK[tskid])$
333        $END$
334$END$
335$NL$
336
337$ ¥¿¥¹¥¯œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®¡Ê¥¿¥¹¥¯€Ï1žÄ°ÊŸåžºß€¹€ë¡Ë
338const TINIB _kernel_tinib_table[TNUM_STSKID] = {$NL$
339$JOINEACH tskid TSK.ID_LIST ",\n"$
340$       // ¥¿¥¹¥¯Â°À­¡€³ÈÄ¥ŸðÊó¡€µ¯Æ°ÈÖÃÏ¡€µ¯Æ°»þÍ¥ÀèÅÙ
341        $TAB${
342        $SPC$($TSK.TSKATR[tskid]$), (intptr_t)($TSK.EXINF[tskid]$),
343        $SPC$((TASK)($TSK.TASK[tskid]$)), INT_PRIORITY($TSK.ITSKPRI[tskid]$),
344
345$       // ¥¿¥¹¥¯œéŽü²œ¥³¥ó¥Æ¥­¥¹¥È¥Ö¥í¥Ã¥¯¡€¥¹¥¿¥Ã¥¯Îΰè
346        $IF USE_TSKINICTXB$
347                $GENERATE_TSKINICTXB(tskid)$
348        $ELSE$
349                $SPC$$TSK.TINIB_STKSZ[tskid]$, $TSK.TINIB_STK[tskid]$,
350        $END$
351
352$       // ¥¿¥¹¥¯Îã³°œèÍý¥ë¡Œ¥Á¥ó€Î°À­€Èµ¯Æ°ÈÖÃÏ
353        $SPC$($ALT(TSK.TEXATR[tskid],"TA_NULL")$), ($ALT(TSK.TEXRTN[tskid],"NULL")$) }
354$END$$NL$
355};$NL$
356$NL$
357
358$ ưŪÀžÀ®¥¿¥¹¥¯ÍрΥ¿¥¹¥¯œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
359$IF num_atskid > 0$
360        TINIB _kernel_atinib_table[$num_atskid$];$NL$
361$ELSE$
362        TOPPERS_EMPTY_LABEL(TINIB, _kernel_atinib_table);$NL$
363$END$$NL$
364
365$ ¥¿¥¹¥¯ŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
366TCB _kernel_tcb_table[TNUM_TSKID];$NL$
367$NL$
368
369$ ¥¿¥¹¥¯ÀžÀ®œçœø¥Æ¡Œ¥Ö¥ë€ÎÀžÀ®
370const ID _kernel_torder_table[TNUM_STSKID] = {$NL$
371$TAB$$JOINEACH tskid TSK.ORDER_LIST ", "$$tskid$$END$$NL$
372};$NL$
373$NL$
374
375$
376$  ¥»¥Þ¥Õ¥©
377$
378/*$NL$
379$SPC$*  Semaphore Functions$NL$
380$SPC$*/$NL$
381$NL$
382
383$ ÀÅŪ€ËÀžÀ®€µ€ì€¿¥»¥Þ¥Õ¥©€Î¿ô
384#define TNUM_SSEMID     $LENGTH(SEM.ID_LIST)$$NL$
385$NL$
386
387$ ¥»¥Þ¥Õ¥©IDÈÖ¹æ€ÎºÇÂçÃÍ
388const ID _kernel_tmax_semid = (TMIN_SEMID + TNUM_SEMID - 1);$NL$
389const ID _kernel_tmax_ssemid = (TMIN_SEMID + TNUM_SSEMID - 1);$NL$
390$NL$
391
392$ ¥»¥Þ¥Õ¥©œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
393$IF LENGTH(SEM.ID_LIST)$
394        const SEMINIB _kernel_seminib_table[TNUM_SSEMID] = {$NL$
395        $JOINEACH semid SEM.ID_LIST ",\n"$
396$               // sematr€¬¡Ê¡ÎTA_TPRI¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
397                $IF (SEM.SEMATR[semid] & ~TA_TPRI) != 0$
398                        $ERROR SEM.TEXT_LINE[semid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "sematr", SEM.SEMATR[semid], semid, "CRE_SEM")$$END$
399                $END$
400
401$               // (0 <= isemcnt && isemcnt <= maxsem)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
402                $IF !(0 <= SEM.ISEMCNT[semid] && SEM.ISEMCNT[semid] <= SEM.MAXSEM[semid])$
403                        $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("too large %1% `%2%\' of `%3%\' in %4%"), "isemcnt", SEM.ISEMCNT[semid], semid, "CRE_SEM")$$END$
404                $END$
405
406$               // (1 <= maxsem && maxsem <= TMAX_MAXSEM)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
407                $IF !(1 <= SEM.MAXSEM[semid] && SEM.MAXSEM[semid] <= TMAX_MAXSEM)$
408                        $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxsem", SEM.MAXSEM[semid], semid, "CRE_SEM")$$END$
409                $END$
410
411$               // ¥»¥Þ¥Õ¥©œéŽü²œ¥Ö¥í¥Ã¥¯
412                $TAB${ ($SEM.SEMATR[semid]$), ($SEM.ISEMCNT[semid]$), ($SEM.MAXSEM[semid]$) }
413        $END$$NL$
414        };$NL$
415$ELSE$
416        TOPPERS_EMPTY_LABEL(const SEMINIB, _kernel_seminib_table);$NL$
417$END$$NL$
418
419$ ưŪÀžÀ®¥»¥Þ¥Õ¥©ÍрΥ»¥Þ¥Õ¥©œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
420$IF num_asemid > 0$
421        SEMINIB _kernel_aseminib_table[$num_asemid$];$NL$
422$ELSE$
423        TOPPERS_EMPTY_LABEL(SEMINIB, _kernel_aseminib_table);$NL$
424$END$$NL$
425
426$ ¥»¥Þ¥Õ¥©ŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
427$IF num_semid > 0$
428        SEMCB _kernel_semcb_table[TNUM_SEMID];$NL$
429$ELSE$
430        TOPPERS_EMPTY_LABEL(SEMCB, _kernel_semcb_table);$NL$
431$END$$NL$
432
433$
434$  ¥€¥Ù¥ó¥È¥Õ¥é¥°
435$
436/*$NL$
437$SPC$*  Eventflag Functions$NL$
438$SPC$*/$NL$
439$NL$
440
441$ ÀÅŪ€ËÀžÀ®€µ€ì€¿¥€¥Ù¥ó¥È¥Õ¥é¥°€Î¿ô
442#define TNUM_SFLGID     $LENGTH(FLG.ID_LIST)$$NL$
443$NL$
444
445$ ¥€¥Ù¥ó¥È¥Õ¥é¥°IDÈÖ¹æ€ÎºÇÂçÃÍ
446const ID _kernel_tmax_flgid = (TMIN_FLGID + TNUM_FLGID - 1);$NL$
447const ID _kernel_tmax_sflgid = (TMIN_FLGID + TNUM_SFLGID - 1);$NL$
448$NL$
449
450$ ¥€¥Ù¥ó¥È¥Õ¥é¥°œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
451$IF LENGTH(FLG.ID_LIST)$
452        const FLGINIB _kernel_flginib_table[TNUM_SFLGID] = {$NL$
453        $JOINEACH flgid FLG.ID_LIST ",\n"$
454$               // flgatr€¬¡Ê¡ÎTA_TPRI¡Ï¡Ã¡ÎTA_WMUL¡Ï¡Ã¡ÎTA_CLR¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
455                $IF (FLG.FLGATR[flgid] & ~(TA_TPRI|TA_WMUL|TA_CLR)) != 0$
456                        $ERROR FLG.TEXT_LINE[flgid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "flgatr", FLG.FLGATR[flgid], flgid, "CRE_FLG")$$END$
457                $END$
458
459$               // iflgptn€¬FLGPTN€Ë³ÊÇŒ€Ç€­€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
460                $IF (FLG.IFLGPTN[flgid] & ~((1 << TBIT_FLGPTN) - 1)) != 0$
461                        $ERROR FLG.TEXT_LINE[flgid]$E_PAR: $FORMAT(_("too large %1% `%2%\' of `%3%\' in %4%"), "iflgptn", FLG.IFLGPTN[flgid], flgid, "CRE_FLG")$$END$
462                $END$
463
464$               // ¥€¥Ù¥ó¥È¥Õ¥é¥°œéŽü²œ¥Ö¥í¥Ã¥¯
465                $TAB${ ($FLG.FLGATR[flgid]$), ($FLG.IFLGPTN[flgid]$) }
466        $END$$NL$
467        };$NL$
468$ELSE$
469        TOPPERS_EMPTY_LABEL(const FLGINIB, _kernel_flginib_table);$NL$
470$END$$NL$
471
472$ ưŪÀžÀ®¥€¥Ù¥ó¥È¥Õ¥é¥°ÍрΥ€¥Ù¥ó¥È¥Õ¥é¥°œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
473$IF num_aflgid > 0$
474        FLGINIB _kernel_aflginib_table[$num_aflgid$];$NL$
475$ELSE$
476        TOPPERS_EMPTY_LABEL(FLGINIB, _kernel_aflginib_table);$NL$
477$END$$NL$
478
479$ ¥€¥Ù¥ó¥È¥Õ¥é¥°ŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
480$IF num_flgid > 0$
481        FLGCB _kernel_flgcb_table[TNUM_FLGID];$NL$
482$ELSE$
483        TOPPERS_EMPTY_LABEL(FLGCB, _kernel_flgcb_table);$NL$
484$END$$NL$
485
486$
487$  ¥Ç¡Œ¥¿¥­¥å¡Œ
488$
489/*$NL$
490$SPC$*  Dataqueue Functions$NL$
491$SPC$*/$NL$
492$NL$
493
494$ ÀÅŪ€ËÀžÀ®€µ€ì€¿¥Ç¡Œ¥¿¥­¥å¡Œ€Î¿ô
495#define TNUM_SDTQID     $LENGTH(DTQ.ID_LIST)$$NL$
496$NL$
497
498$ ¥Ç¡Œ¥¿¥­¥å¡ŒIDÈÖ¹æ€ÎºÇÂçÃÍ
499const ID _kernel_tmax_dtqid = (TMIN_DTQID + TNUM_DTQID - 1);$NL$
500const ID _kernel_tmax_sdtqid = (TMIN_DTQID + TNUM_SDTQID - 1);$NL$
501$NL$
502
503$IF LENGTH(DTQ.ID_LIST)$
504        $FOREACH dtqid DTQ.ID_LIST$
505$               // dtqatr€¬¡Ê¡ÎTA_TPRI¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
506                $IF (DTQ.DTQATR[dtqid] & ~TA_TPRI) != 0$
507                        $ERROR DTQ.TEXT_LINE[dtqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqatr", DTQ.DTQATR[dtqid], dtqid, "CRE_DTQ")$$END$
508                $END$
509
510$               // dtqcnt€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
511                $IF DTQ.DTQCNT[dtqid] < 0$
512                        $ERROR DTQ.TEXT_LINE[dtqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqcnt", DTQ.DTQCNT[dtqid], dtqid, "CRE_DTQ")$$END$
513                $END$
514
515$               // dtqmb€¬NULL€Ç€Ê€€Ÿì¹ç¡ÊE_NOSPT¡Ë
516                $IF !EQ(DTQ.DTQMB[dtqid], "NULL")$
517                        $ERROR DTQ.TEXT_LINE[dtqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQMB[dtqid], dtqid, "CRE_DTQ")$$END$
518                $END$
519
520$               // ¥Ç¡Œ¥¿¥­¥å¡ŒŽÉÍýÎΰè
521                $IF DTQ.DTQCNT[dtqid]$
522                        static DTQMB _kernel_dtqmb_$dtqid$[$DTQ.DTQCNT[dtqid]$];$NL$
523                $END$
524        $END$
525
526$       // ¥Ç¡Œ¥¿¥­¥å¡ŒœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
527        const DTQINIB _kernel_dtqinib_table[TNUM_SDTQID] = {$NL$
528        $JOINEACH dtqid DTQ.ID_LIST ",\n"$
529                $TAB${ ($DTQ.DTQATR[dtqid]$), ($DTQ.DTQCNT[dtqid]$), $IF DTQ.DTQCNT[dtqid]$(_kernel_dtqmb_$dtqid$)$ELSE$NULL$END$ }
530        $END$$NL$
531        };$NL$
532$ELSE$
533        TOPPERS_EMPTY_LABEL(const DTQINIB, _kernel_dtqinib_table);$NL$
534$END$$NL$
535
536$ ưŪÀžÀ®¥Ç¡Œ¥¿¥­¥å¡ŒÍрΥǡŒ¥¿¥­¥å¡ŒœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
537$IF num_adtqid > 0$
538        DTQINIB _kernel_adtqinib_table[$num_adtqid$];$NL$
539$ELSE$
540        TOPPERS_EMPTY_LABEL(DTQINIB, _kernel_adtqinib_table);$NL$
541$END$$NL$
542
543$ ¥Ç¡Œ¥¿¥­¥å¡ŒŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
544$IF num_dtqid > 0$
545        DTQCB _kernel_dtqcb_table[TNUM_DTQID];$NL$
546$ELSE$
547        TOPPERS_EMPTY_LABEL(DTQCB, _kernel_dtqcb_table);$NL$
548$END$$NL$
549
550$
551$  Í¥ÀèÅ٥ǡŒ¥¿¥­¥å¡Œ
552$
553/*$NL$
554$SPC$*  Priority Dataqueue Functions$NL$
555$SPC$*/$NL$
556$NL$
557
558$ ÀÅŪ€ËÀžÀ®€µ€ì€¿Í¥ÀèÅ٥ǡŒ¥¿¥­¥å¡Œ€Î¿ô
559#define TNUM_SPDQID     $LENGTH(PDQ.ID_LIST)$$NL$
560$NL$
561
562$ Í¥ÀèÅ٥ǡŒ¥¿¥­¥å¡ŒIDÈÖ¹æ€ÎºÇÂçÃÍ
563const ID _kernel_tmax_pdqid = (TMIN_PDQID + TNUM_PDQID - 1);$NL$
564const ID _kernel_tmax_spdqid = (TMIN_PDQID + TNUM_SPDQID - 1);$NL$
565$NL$
566
567$IF LENGTH(PDQ.ID_LIST)$
568        $FOREACH pdqid PDQ.ID_LIST$
569$               // pdqatr€¬¡Ê¡ÎTA_TPRI¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
570                $IF (PDQ.PDQATR[pdqid] & ~TA_TPRI) != 0$
571                        $ERROR PDQ.TEXT_LINE[pdqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqatr", PDQ.PDQATR[pdqid], pdqid, "CRE_PDQ")$$END$
572                $END$
573
574$               // pdqcnt€¬Éé€ÎŸì¹ç¡ÊE_PAR¡Ë
575                $IF PDQ.PDQCNT[pdqid] < 0$
576                        $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqcnt", PDQ.PDQCNT[pdqid], pdqid, "CRE_PDQ")$$END$
577                $END$
578
579$               // (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
580                $IF !(TMIN_DPRI <= PDQ.MAXDPRI[pdqid] && PDQ.MAXDPRI[pdqid] <= TMAX_DPRI)$
581                        $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxdpri", PDQ.MAXDPRI[pdqid], pdqid, "CRE_PDQ")$$END$
582                $END$
583
584$               // pdqmb€¬NULL€Ç€Ê€€Ÿì¹ç¡ÊE_NOSPT¡Ë
585                $IF !EQ(PDQ.PDQMB[pdqid], "NULL")$
586                        $ERROR PDQ.TEXT_LINE[pdqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqmb", PDQ.PDQMB[pdqid], pdqid, "CRE_PDQ")$$END$
587                $END$
588
589$               // Í¥ÀèÅ٥ǡŒ¥¿¥­¥å¡ŒŽÉÍýÎΰè
590                $IF PDQ.PDQCNT[pdqid]$
591                        static PDQMB _kernel_pdqmb_$pdqid$[$PDQ.PDQCNT[pdqid]$];$NL$
592                $END$
593        $END$
594
595$       // Í¥ÀèÅ٥ǡŒ¥¿¥­¥å¡ŒœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
596        const PDQINIB _kernel_pdqinib_table[TNUM_SPDQID] = {$NL$
597        $JOINEACH pdqid PDQ.ID_LIST ",\n"$
598                $TAB${ ($PDQ.PDQATR[pdqid]$), ($PDQ.PDQCNT[pdqid]$), ($PDQ.MAXDPRI[pdqid]$), $IF PDQ.PDQCNT[pdqid]$(_kernel_pdqmb_$pdqid$)$ELSE$NULL$END$ }
599        $END$$NL$
600        };$NL$
601$ELSE$
602        TOPPERS_EMPTY_LABEL(const PDQINIB, _kernel_pdqinib_table);$NL$
603$END$$NL$
604
605$ ưŪÀžÀ®Í¥ÀèÅ٥ǡŒ¥¿¥­¥å¡ŒÍÑ€ÎÍ¥ÀèÅ٥ǡŒ¥¿¥­¥å¡ŒœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
606$IF num_apdqid > 0$
607        PDQINIB _kernel_apdqinib_table[$num_apdqid$];$NL$
608$ELSE$
609        TOPPERS_EMPTY_LABEL(PDQINIB, _kernel_apdqinib_table);$NL$
610$END$$NL$
611
612$ Í¥ÀèÅ٥ǡŒ¥¿¥­¥å¡ŒŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
613$IF num_pdqid > 0$
614        PDQCB _kernel_pdqcb_table[TNUM_PDQID];$NL$
615$ELSE$
616        TOPPERS_EMPTY_LABEL(PDQCB, _kernel_pdqcb_table);$NL$
617$END$$NL$
618
619$
620$  ¥á¡Œ¥ë¥Ü¥Ã¥¯¥¹
621$
622/*$NL$
623$SPC$*  Mailbox Functions$NL$
624$SPC$*/$NL$
625$NL$
626
627$ ÀÅŪ€ËÀžÀ®€µ€ì€¿¥á¡Œ¥ë¥Ü¥Ã¥¯¥¹€Î¿ô
628#define TNUM_SMBXID     $LENGTH(MBX.ID_LIST)$$NL$
629$NL$
630
631$ ¥á¡Œ¥ë¥Ü¥Ã¥¯¥¹IDÈÖ¹æ€ÎºÇÂçÃÍ
632const ID _kernel_tmax_mbxid = (TMIN_MBXID + TNUM_MBXID - 1);$NL$
633const ID _kernel_tmax_smbxid = (TMIN_MBXID + TNUM_SMBXID - 1);$NL$
634$NL$
635
636$ ¥á¡Œ¥ë¥Ü¥Ã¥¯¥¹œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
637$IF LENGTH(MBX.ID_LIST)$
638        const MBXINIB _kernel_mbxinib_table[TNUM_SMBXID] = {$NL$
639        $JOINEACH mbxid MBX.ID_LIST ",\n"$
640$               // mbxatr€¬¡Ê¡ÎTA_TPRI¡Ï¡Ã¡ÎTA_MPRI¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
641                $IF (MBX.MBXATR[mbxid] & ~(TA_TPRI|TA_MPRI)) != 0$
642                        $ERROR MBX.TEXT_LINE[mbxid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mbxatr", MBX.MBXATR[mbxid], mbxid, "CRE_MBX")$$END$
643                $END$
644
645$               // (TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
646                $IF !(TMIN_MPRI <= MBX.MAXMPRI[mbxid] && MBX.MAXMPRI[mbxid] <= TMAX_MPRI)$
647                        $ERROR MBX.TEXT_LINE[mbxid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxmpri", MBX.MAXMPRI[mbxid], mbxid, "CRE_MBX")$$END$
648                $END$
649
650$               // mprihd€¬NULL€Ç€Ê€€Ÿì¹ç¡ÊE_NOSPT¡Ë
651                $IF !EQ(MBX.MPRIHD[mbxid], "NULL")$
652                        $ERROR MBX.TEXT_LINE[mbxid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mprihd", MBX.MPRIHD[mbxid], mbxid, "CRE_MBX")$$END$
653                $END$
654
655$               // ¥á¡Œ¥ë¥Ü¥Ã¥¯¥¹œéŽü²œ¥Ö¥í¥Ã¥¯
656                $TAB${ ($MBX.MBXATR[mbxid]$), ($MBX.MAXMPRI[mbxid]$) }
657        $END$$NL$
658        };$NL$
659$ELSE$
660        TOPPERS_EMPTY_LABEL(const MBXINIB, _kernel_mbxinib_table);$NL$
661$END$$NL$
662
663$ ưŪÀžÀ®¥á¡Œ¥ë¥Ü¥Ã¥¯¥¹ÍрΥᡌ¥ë¥Ü¥Ã¥¯¥¹œéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
664$IF num_ambxid > 0$
665        MBXINIB _kernel_ambxinib_table[$num_ambxid$];$NL$
666$ELSE$
667        TOPPERS_EMPTY_LABEL(MBXINIB, _kernel_ambxinib_table);$NL$
668$END$$NL$
669
670$ ¥á¡Œ¥ë¥Ü¥Ã¥¯¥¹ŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
671$IF num_mbxid > 0$
672        MBXCB _kernel_mbxcb_table[TNUM_MBXID];$NL$
673$ELSE$
674        TOPPERS_EMPTY_LABEL(MBXCB, _kernel_mbxcb_table);$NL$
675$END$$NL$
676
677$
678$  žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ë
679$
680/*$NL$
681$SPC$*  Fixed-sized Memorypool Functions$NL$
682$SPC$*/$NL$
683$NL$
684
685$ ÀÅŪ€ËÀžÀ®€µ€ì€¿žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ë€Î¿ô
686#define TNUM_SMPFID     $LENGTH(MPF.ID_LIST)$$NL$
687$NL$
688
689$ žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëIDÈÖ¹æ€ÎºÇÂçÃÍ
690const ID _kernel_tmax_mpfid = (TMIN_MPFID + TNUM_MPFID - 1);$NL$
691const ID _kernel_tmax_smpfid = (TMIN_MPFID + TNUM_SMPFID - 1);$NL$
692$NL$
693
694$IF LENGTH(MPF.ID_LIST)$
695        $FOREACH mpfid MPF.ID_LIST$
696$               // mpfatr€¬¡Ê¡ÎTA_TPRI¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
697                $IF (MPF.MPFATR[mpfid] & ~TA_TPRI) != 0$
698                        $ERROR MPF.TEXT_LINE[mpfid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfatr", MPF.MPFATR[mpfid], mpfid, "CRE_MPF")$$END$
699                $END$
700
701$               // blkcnt€¬0°Ê²Œ€ÎŸì¹ç¡ÊE_PAR¡Ë
702                $IF MPF.BLKCNT[mpfid] <= 0$
703                        $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blkcnt", MPF.BLKCNT[mpfid], mpfid, "CRE_MPF")$$END$
704                $END$
705
706$               // blksz€¬0°Ê²Œ€ÎŸì¹ç¡ÊE_PAR¡Ë
707                $IF MPF.BLKSZ[mpfid] <= 0$
708                        $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blksz", MPF.BLKSZ[mpfid], mpfid, "CRE_MPF")$$END$
709                $END$
710
711$               // žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëÎΰè
712                $IF EQ(MPF.MPF[mpfid], "NULL")$
713                        static MPF_T _kernel_mpf_$mpfid$[($MPF.BLKCNT[mpfid]$) * COUNT_MPF_T($MPF.BLKSZ[mpfid]$)];$NL$
714                $END$
715
716$               // mpfmb€¬NULL€Ç€Ê€€Ÿì¹ç¡ÊE_NOSPT¡Ë
717                $IF !EQ(MPF.MPFMB[mpfid], "NULL")$
718                        $ERROR MPF.TEXT_LINE[mpfid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfmb", MPF.MPFMB[mpfid], mpfid, "CRE_MPF")$$END$
719                $END$
720
721$               // žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëŽÉÍýÎΰè
722                static MPFMB _kernel_mpfmb_$mpfid$[$MPF.BLKCNT[mpfid]$];$NL$
723        $END$
724
725$       // žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
726        const MPFINIB _kernel_mpfinib_table[TNUM_SMPFID] = {$NL$
727        $JOINEACH mpfid MPF.ID_LIST ",\n"$
728                $TAB${ ($MPF.MPFATR[mpfid]$), ($MPF.BLKCNT[mpfid]$), ROUND_MPF_T($MPF.BLKSZ[mpfid]$), $IF EQ(MPF.MPF[mpfid],"NULL")$(_kernel_mpf_$mpfid$)$ELSE$(void *)($MPF.MPF[mpfid]$)$END$, (_kernel_mpfmb_$mpfid$) }
729        $END$$NL$
730        };$NL$
731$ELSE$
732        TOPPERS_EMPTY_LABEL(const MPFINIB, _kernel_mpfinib_table);$NL$
733$END$$NL$
734
735$ ưŪÀžÀ®žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëÍрΞÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
736$IF num_ampfid > 0$
737        MPFINIB _kernel_ampfinib_table[$num_ampfid$];$NL$
738$ELSE$
739        TOPPERS_EMPTY_LABEL(MPFINIB, _kernel_ampfinib_table);$NL$
740$END$$NL$
741
742$ žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
743$IF num_mpfid > 0$
744        MPFCB _kernel_mpfcb_table[TNUM_MPFID];$NL$
745$ELSE$
746        TOPPERS_EMPTY_LABEL(MPFCB, _kernel_mpfcb_table);$NL$
747$END$$NL$
748
749$
750$  ŒþŽü¥Ï¥ó¥É¥é
751$
752/*$NL$
753$SPC$*  Cyclic Handler Functions$NL$
754$SPC$*/$NL$
755$NL$
756
757$ ÀÅŪ€ËÀžÀ®€µ€ì€¿ŒþŽü¥Ï¥ó¥É¥é€Î¿ô
758#define TNUM_SCYCID     $LENGTH(CYC.ID_LIST)$$NL$
759$NL$
760
761$ ŒþŽü¥Ï¥ó¥É¥éIDÈÖ¹æ€ÎºÇÂçÃÍ
762const ID _kernel_tmax_cycid = (TMIN_CYCID + TNUM_CYCID - 1);$NL$
763const ID _kernel_tmax_scycid = (TMIN_CYCID + TNUM_SCYCID - 1);$NL$
764$NL$
765
766$ ŒþŽü¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
767$IF LENGTH(CYC.ID_LIST)$
768        const CYCINIB _kernel_cycinib_table[TNUM_SCYCID] = {$NL$
769        $JOINEACH cycid CYC.ID_LIST ",\n"$
770$               // cycatr€¬¡Ê¡ÎTA_STA¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
771                $IF (CYC.CYCATR[cycid] & ~TA_STA) != 0$
772                        $ERROR CYC.TEXT_LINE[cycid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycatr", CYC.CYCATR[cycid], cycid, "CRE_CYC")$$END$
773                $END$
774
775$               // (0 < cyctim && cyctim <= TMAX_RELTIM)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
776                $IF !(0 < CYC.CYCTIM[cycid] && CYC.CYCTIM[cycid] <= TMAX_RELTIM)$
777                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cyctim", CYC.CYCTIM[cycid], cycid, "CRE_CYC")$$END$
778                $END$
779
780$               // (0 <= cycphs && cycphs <= TMAX_RELTIM)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
781                $IF !(0 <= CYC.CYCPHS[cycid] && CYC.CYCPHS[cycid] <= TMAX_RELTIM)$
782                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycphs", CYC.CYCPHS[cycid], cycid, "CRE_CYC")$$END$
783                $END$
784
785$               // ·Ù¹ð¡§cycatr€ËTA_STA€¬ÀßÄꀵ€ì€Æ€€€Æ¡€(cycphs == 0)€ÎŸì¹ç
786                $IF (CYC.CYCATR[cycid] & TA_STA) != 0 && CYC.CYCPHS[cycid] == 0$
787                        $WARNING CYC.TEXT_LINE[cycid]$$FORMAT(_("%1% is not recommended when %2% is set to %3% in %4%"), "cycphs==0", "TA_STA", "cycatr", "CRE_CYC")$$END$
788                $END$
789
790$               // ŒþŽü¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯
791                $TAB${ ($CYC.CYCATR[cycid]$), (intptr_t)($CYC.EXINF[cycid]$), ($CYC.CYCHDR[cycid]$), ($CYC.CYCTIM[cycid]$), ($CYC.CYCPHS[cycid]$) }
792        $END$$NL$
793        };$NL$
794$ELSE$
795        TOPPERS_EMPTY_LABEL(const CYCINIB, _kernel_cycinib_table);$NL$
796$END$$NL$
797
798$ ưŪÀžÀ®ŒþŽü¥Ï¥ó¥É¥éÍрΌþŽü¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
799$IF num_acycid > 0$
800        CYCINIB _kernel_acycinib_table[$num_acycid$];$NL$
801$ELSE$
802        TOPPERS_EMPTY_LABEL(CYCINIB, _kernel_acycinib_table);$NL$
803$END$$NL$
804
805$ ŒþŽü¥Ï¥ó¥É¥éŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
806$IF num_cycid > 0$
807        CYCCB _kernel_cyccb_table[TNUM_CYCID];$NL$
808$ELSE$
809        TOPPERS_EMPTY_LABEL(CYCCB, _kernel_cyccb_table);$NL$
810$END$$NL$
811
812$
813$  ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥é
814$
815/*$NL$
816$SPC$*  Alarm Handler Functions$NL$
817$SPC$*/$NL$
818$NL$
819
820$ ÀÅŪ€ËÀžÀ®€µ€ì€¿¥¢¥é¡Œ¥à¥Ï¥ó¥É¥é€Î¿ô
821#define TNUM_SALMID     $LENGTH(ALM.ID_LIST)$$NL$
822$NL$
823
824$ ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥éIDÈÖ¹æ€ÎºÇÂçÃÍ
825const ID _kernel_tmax_almid = (TMIN_ALMID + TNUM_ALMID - 1);$NL$
826const ID _kernel_tmax_salmid = (TMIN_ALMID + TNUM_SALMID - 1);$NL$
827$NL$
828
829$ ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
830$IF LENGTH(ALM.ID_LIST)$
831        const ALMINIB _kernel_alminib_table[TNUM_SALMID] = {$NL$
832        $JOINEACH almid ALM.ID_LIST ",\n"$
833$               // almatr€¬¡ÊTA_NULL¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
834                $IF ALM.ALMATR[almid] != 0$
835                        $ERROR ALM.TEXT_LINE[almid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "almatr", ALM.ALMATR[almid], almid, "CRE_ALM")$$END$
836                $END$
837
838$               // ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯
839                $TAB${ ($ALM.ALMATR[almid]$), (intptr_t)($ALM.EXINF[almid]$), ($ALM.ALMHDR[almid]$) }
840        $END$$NL$
841        };$NL$
842$ELSE$
843        TOPPERS_EMPTY_LABEL(const ALMINIB, _kernel_alminib_table);$NL$
844$END$$NL$
845
846$ ưŪÀžÀ®¥¢¥é¡Œ¥à¥Ï¥ó¥É¥éÍрΥ¢¥é¡Œ¥à¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
847$IF num_aalmid > 0$
848        ALMINIB _kernel_aalminib_table[$num_aalmid$];$NL$
849$ELSE$
850        TOPPERS_EMPTY_LABEL(ALMINIB, _kernel_aalminib_table);$NL$
851$END$$NL$
852
853$ ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥éŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
854$IF num_almid > 0$
855        ALMCB _kernel_almcb_table[TNUM_ALMID];$NL$
856$ELSE$
857        TOPPERS_EMPTY_LABEL(ALMCB, _kernel_almcb_table);$NL$
858$END$$NL$
859
860$
861$  ³ä¹þ€ßŽÉÍýµ¡Çœ
862$
863/*$NL$
864$SPC$*  Interrupt Management Functions$NL$
865$SPC$*/$NL$
866$NL$
867
868$ ³ä¹þ€ßÈÖ¹æ€È³ä¹þ€ß¥Ï¥ó¥É¥éÈÖ¹æ€ÎÊÑŽ¹¥Æ¡Œ¥Ö¥ë€ÎºîÀ®
869$IF LENGTH(INTNO_ATTISR_VALID) != LENGTH(INHNO_ATTISR_VALID)$
870        $ERROR$length of `INTNO_ATTISR_VALID' is different from length of `INHNO_ATTISR_VALID'$END$
871$END$
872$i = 0$
873$FOREACH intno INTNO_ATTISR_VALID$
874        $inhno = AT(INHNO_ATTISR_VALID, i)$
875        $INHNO[intno] = inhno$
876        $INTNO[inhno] = intno$
877        $i = i + 1$
878$END$
879
880$ ³ä¹þ€ßÍ×µá¥é¥€¥ó€ËŽØ€¹€ë¥š¥é¡Œ¥Á¥§¥Ã¥¯
881$i = 0$
882$FOREACH intno INT.ORDER_LIST$
883$       // intno€¬CFG_INT€ËÂЀ¹€ë³ä¹þ€ßÈÖ¹æ€È€·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
884        $IF !LENGTH(FIND(INTNO_CFGINT_VALID, INT.INTNO[intno]))$
885                $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
886        $END$
887
888$       // intno€¬CFG_INT€Ë€è€Ã€ÆÀßÄêºÑ€ß€ÎŸì¹ç¡ÊE_OBJ¡Ë
889        $j = 0$
890        $FOREACH intno2 INT.ORDER_LIST$
891                $IF j < i && INT.INTNO[intno] == INT.INTNO[intno2]$
892                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
893                $END$
894                $j = j + 1$
895        $END$
896
897$       // intatr€¬¡Ê¡ÎTA_ENAINT¡Ï¡Ã¡ÎTA_EDGE¡Ï¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
898        $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|TARGET_INTATR)) != 0$
899                $ERROR INT.TEXT_LINE[intno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "intatr", INT.INTATR[intno], "intno", INT.INTNO[intno], "CFG_INT")$$END$
900        $END$
901
902$       // intpri€¬CFG_INT€ËÂЀ¹€ë³ä¹þ€ßÍ¥ÀèÅـȀ·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
903        $IF !LENGTH(FIND(INTPRI_CFGINT_VALID, INT.INTPRI[intno]))$
904                $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intpri", INT.INTPRI[intno], "CFG_INT")$$END$
905        $END$
906
907$       // ¥«¡Œ¥Í¥ëŽÉÍý€ËžÇÄꀵ€ì€Æ€€€ëintno€ËÂЀ·€Æ¡€intpri€ËTMIN_INTPRI
908$       // €è€ê€âŸ®€µ€€ÃÍ€¬»ØÄꀵ€ì€¿Ÿì¹ç¡ÊE_OBJ¡Ë
909        $IF LENGTH(FIND(INTNO_FIX_KERNEL, intno))$
910                $IF INT.INTPRI[intno] < TMIN_INTPRI$
911                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' must not have higher priority than %3%"), "intno", INT.INTNO[intno], "TMIN_INTPRI")$$END$
912                $END$
913        $END$
914
915$       // ¥«¡Œ¥Í¥ëŽÉÍý³°€ËžÇÄꀵ€ì€Æ€€€ëintno€ËÂЀ·€Æ¡€intpri€ËTMIN_INTPRI
916$       // €è€ê€âŸ®€µ€€ÃÍ€¬»ØÄꀵ€ì€Ê€«€Ã€¿Ÿì¹ç¡ÊE_OBJ¡Ë
917        $IF LENGTH(FIND(INTNO_FIX_NONKERNEL, intno))$
918                $IF INT.INTPRI[intno] >= TMIN_INTPRI$
919                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' must have higher priority than %3%"), "intno", INT.INTNO[intno], "TMIN_INTPRI")$$END$
920                $END$
921        $END$
922        $i = i + 1$
923$END$
924
925$ ³ä¹þ€ß¥Ï¥ó¥É¥é€ËŽØ€¹€ë¥š¥é¡Œ¥Á¥§¥Ã¥¯
926$i = 0$
927$FOREACH inhno INH.ORDER_LIST$
928$       // inhno€¬DEF_INH€ËÂЀ¹€ë³ä¹þ€ß¥Ï¥ó¥É¥éÈÖ¹æ€È€·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
929        $IF !LENGTH(FIND(INHNO_DEFINH_VALID, INH.INHNO[inhno]))$
930                $ERROR INH.TEXT_LINE[inhno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
931        $END$
932
933$       // inhno€¬DEF_INH€Ë€è€Ã€ÆÀßÄêºÑ€ß€ÎŸì¹ç¡ÊE_OBJ¡Ë
934        $j = 0$
935        $FOREACH inhno2 INH.ORDER_LIST$
936                $IF j < i && INH.INHNO[inhno] == INH.INHNO[inhno2]$
937                        $ERROR INH.TEXT_LINE[inhno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
938                $END$
939                $j = j + 1$
940        $END$
941
942$       // inhatr€¬¡ÊTA_NULL¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
943        $IF (INH.INHATR[inhno] & ~TARGET_INHATR) != 0$
944                $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "inhatr", INH.INHATR[inhno], "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
945        $END$
946
947$       // ¥«¡Œ¥Í¥ëŽÉÍý€ËžÇÄꀵ€ì€Æ€€€ëinhno€ËÂЀ·€Æ¡€inhatr€ËTA_NONKERNEL
948$       //¡¡€¬»ØÄꀵ€ì€Æ€€€ëŸì¹ç¡ÊE_RSATR¡Ë
949        $IF LENGTH(FIND(INHNO_FIX_KERNEL, inhno))$
950                $IF (INH.INHATR[inhno] & TA_NONKERNEL) != 0$
951                        $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("%1% `%2%\' must not be non-kernel interrupt"), "inhno", INH.INHNO[inhno])$$END$
952                $END$
953        $END$
954
955$       // ¥«¡Œ¥Í¥ëŽÉÍý³°€ËžÇÄꀵ€ì€Æ€€€ëinhno€ËÂЀ·€Æ¡€inhatr€ËTA_NONKERNEL
956$       // €¬»ØÄꀵ€ì€Æ€€€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
957        $IF LENGTH(FIND(INHNO_FIX_NONKERNEL, inhno))$
958                $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
959                        $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("%1% `%2%\' must be non-kernel interrupt"), "inhno", INH.INHNO[inhno])$$END$
960                $END$
961        $END$
962
963        $IF LENGTH(INTNO[INH.INHNO[inhno]])$
964                $intno = INTNO[INH.INHNO[inhno]]$
965$               // inhno€ËÂбþ€¹€ëintno€ËÂЀ¹€ëCFG_INT€¬€Ê€€Ÿì¹ç¡ÊE_OBJ¡Ë
966                $IF !LENGTH(INT.INTNO[intno])$
967                        $ERROR INH.TEXT_LINE[inhno]$E_OBJ: $FORMAT(_("%1% `%2%\' corresponding to %3% `%4%\' is not configured with %5%"), "intno", intno, "inhno", INH.INHNO[inhno], "CFG_INT")$$END$
968                $ELSE$
969                        $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
970$                               // inhatr€ËTA_NONKERNEL€¬»ØÄꀵ€ì€Æ€ª€é€º¡€inhno€ËÂбþ
971$                               // €¹€ëintno€ËÂЀ·€ÆCFG_INT€ÇÀßÄꀵ€ì€¿³ä¹þ€ßÍ¥ÀèÅÙ€¬
972$                               // TMIN_INTPRI€è€ê€âŸ®€µ€€Ÿì¹ç¡ÊE_OBJ¡Ë
973                                $IF INT.INTPRI[intno] < TMIN_INTPRI$
974                                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$
975                                $END$
976                        $ELSE$
977$                               // inhatr€ËTA_NONKERNEL€¬»ØÄꀵ€ì€Æ€ª€ê¡€inhno€ËÂбþ
978$                               // €¹€ëintno€ËÂЀ·€ÆCFG_INT€ÇÀßÄꀵ€ì€¿³ä¹þ€ßÍ¥ÀèÅÙ€¬
979$                               // TMIN_INTPRI°ÊŸå€Ç€¢€ëŸì¹ç¡ÊE_OBJ¡Ë
980                                $IF INT.INTPRI[intno] >= TMIN_INTPRI$
981                                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is lower than or equal to %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$
982                                $END$
983                        $END$
984                $END$
985        $END$
986        $i = i + 1$
987$END$
988
989$ ³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥ó¡ÊISR¡Ë€ËŽØ€¹€ë¥š¥é¡Œ¥Á¥§¥Ã¥¯
990$FOREACH order ISR.ORDER_LIST$
991$       // isratr€¬¡ÊTA_NULL¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
992        $IF (ISR.ISRATR[order] & ~TARGET_ISRATR) != 0$
993                $ERROR ISR.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isratr", ISR.ISRATR[order], "ATT_ISR")$$END$
994        $END$
995
996$       // intno€¬ATT_ISR€ËÂЀ¹€ë³ä¹þ€ßÈÖ¹æ€È€·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
997        $IF !LENGTH(FIND(INTNO_ATTISR_VALID, ISR.INTNO[order]))$
998                $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", ISR.INTNO[order], "ATT_ISR")$$END$
999        $END$
1000
1001$       // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)€Ç€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
1002        $IF !(TMIN_ISRPRI <= ISR.ISRPRI[order] && ISR.ISRPRI[order] <= TMAX_ISRPRI)$
1003                $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isrpri", ISR.ISRPRI[order], "ATT_ISR")$$END$
1004        $END$
1005$END$
1006
1007$FOREACH intno INTNO_ATTISR_VALID$
1008        $inhno = INHNO[intno]$
1009
1010$       // ³ä¹þ€ßÈÖ¹æintno€ËÂЀ·€ÆÅÐÏ¿€µ€ì€¿ISR€Î¥ê¥¹¥È€ÎºîÀ®
1011        $isr_order_list = {}$
1012        $FOREACH order ISR.ORDER_LIST$
1013                $IF ISR.INTNO[order] == intno$
1014                        $isr_order_list = APPEND(isr_order_list, order)$
1015                        $order_for_error = order$
1016                $END$
1017        $END$
1018
1019$       // ³ä¹þ€ßÈÖ¹æintno€ËÂЀ·€ÆÅÐÏ¿€µ€ì€¿ISR€¬Âžºß€¹€ëŸì¹ç
1020        $IF LENGTH(isr_order_list) > 0$
1021$               // intno€ËÂбþ€¹€ëinhno€ËÂЀ·€ÆDEF_INH€¬€¢€ëŸì¹ç¡ÊE_OBJ¡Ë
1022                $IF LENGTH(INH.INHNO[inhno])$
1023                        $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated with %4% `%5%\'"), "intno", ISR.INTNO[order_for_error], "ATT_ISR", "inhno", INH.INHNO[inhno])$$END$
1024                $END$
1025
1026$               // intno€ËÂЀ¹€ëCFG_INT€¬€Ê€€Ÿì¹ç¡ÊE_OBJ¡Ë
1027                $IF !LENGTH(INT.INTNO[intno])$
1028                        $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' is not configured with %3%"), "intno", ISR.INTNO[order_for_error], "CFG_INT")$$END$
1029                $ELSE$
1030$                       // intno€ËÂЀ·€ÆCFG_INT€ÇÀßÄꀵ€ì€¿³ä¹þ€ßÍ¥ÀèÅÙ€¬TMIN_INTPRI
1031$                       // €è€ê€âŸ®€µ€€Ÿì¹ç¡ÊE_OBJ¡Ë
1032                        $IF INT.INTPRI[intno] < TMIN_INTPRI$
1033                                $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "intno", ISR.INTNO[order_for_error], "TMIN_INTPRI")$$END$
1034                        $END$
1035                $END$
1036        $END$
1037$END$
1038
1039$ ³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥ó¡ÊISR¡ËŽÉÍý€Î¥Ç¡Œ¥¿¹œÂ€
1040$intno_isr_list = {}$
1041$FOREACH intno INTNO_ATTISR_VALID$
1042        $inhno = INHNO[intno]$
1043        $IF LENGTH(INT.INTNO[intno]) && !LENGTH(INH.INHNO[inhno])$
1044                $intno_isr_list = APPEND(intno_isr_list, intno)$
1045        $END$
1046$END$
1047
1048$INTNO_ISR = {}$
1049$i = 0$
1050$FOREACH intno SORT(intno_isr_list, "INT.INTNO")$
1051        $INTNO_ISR = APPEND(INTNO_ISR, intno)$
1052        $ISR_QUEUE_HEADER[intno] = FORMAT("&(_kernel_isr_queue_table[%d])", i)$
1053        $i = i + 1$
1054$END$
1055
1056const uint_t _kernel_tnum_isr_queue = $LENGTH(INTNO_ISR)$;$NL$
1057$NL$
1058
1059$IF LENGTH(INTNO_ISR)$
1060        const ISR_ENTRY _kernel_isr_queue_list[$LENGTH(INTNO_ISR)$] = {$NL$
1061        $JOINEACH intno INTNO_ISR ",\n"$
1062                $TAB${ $intno$, $ISR_QUEUE_HEADER[intno]$ }
1063        $END$$NL$
1064        };$NL$
1065$ELSE$
1066        TOPPERS_EMPTY_LABEL(QUEUE, _kernel_isr_queue_table);$NL$
1067$END$$NL$
1068
1069$IF LENGTH(INTNO_ISR)$
1070        QUEUE _kernel_isr_queue_table[$LENGTH(INTNO_ISR)$];$NL$
1071$ELSE$
1072        TOPPERS_EMPTY_LABEL(QUEUE, _kernel_isr_queue_table);$NL$
1073$END$$NL$
1074
1075$ ³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥ó¡ÊISR¡ËžÆœÐ€·€Î€¿€á€Î³ä¹þ€ß¥Ï¥ó¥É¥é€ÎÀžÀ®
1076$FOREACH intno INTNO_ISR$
1077        $inhno = INHNO[intno]$
1078
1079$       // DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> } );
1080        $INH.INHNO[inhno] = inhno$
1081        $INH.INHATR[inhno] = VALUE("TA_NULL", 0)$
1082        $INH.INTHDR[inhno] = CONCAT("_kernel_inthdr_", intno)$
1083        $INH.ORDER_LIST = APPEND(INH.ORDER_LIST, inhno)$
1084
1085$       // ISRÍрγä¹þ€ß¥Ï¥ó¥É¥é
1086        void$NL$
1087        _kernel_inthdr_$intno$(void)$NL$
1088        {$NL$
1089        $TAB$i_begin_int($intno$);$NL$
1090        $TAB$_kernel_call_isr($ISR_QUEUE_HEADER[intno]$);$NL$
1091        $TAB$i_end_int($intno$);$NL$
1092        }$NL$
1093        $NL$
1094$END$
1095
1096$ ³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥ó€Î¿ô
1097#define TNUM_SISR       $LENGTH(ISR.ORDER_LIST)$$NL$
1098#define TNUM_ISR        $LENGTH(ISR.ORDER_LIST) + num_aisrid$$NL$
1099$NL$
1100
1101$ ³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥óIDÈÖ¹æ€ÎºÇÂçÃÍ
1102const ID _kernel_tmax_isrid = (TMIN_ISRID + TNUM_ISRID - 1);$NL$
1103const uint_t _kernel_tnum_sisr = TNUM_SISR;$NL$
1104$NL$
1105
1106$ ³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥óœéŽü²œ¥Ö¥í¥Ã¥¯€ÎÀžÀ®
1107$IF LENGTH(ISR.ORDER_LIST)$
1108        const ISRINIB _kernel_sisrinib_table[TNUM_SISR] = {$NL$
1109        $JOINEACH order ISR.ORDER_LIST ",\n"$
1110                $TAB${ ($ISR.ISRATR[order]$), ($ISR.EXINF[order]$), ($ISR.INTNO[order]$), ($ISR_QUEUE_HEADER[ISR.INTNO[order]]$), ($ISR.ISR[order]$), ($ISR.ISRPRI[order]$) }
1111        $END$$NL$
1112        };$NL$
1113$ELSE$
1114        TOPPERS_EMPTY_LABEL(const ISRINIB, _kernel_sisrinib_table);$NL$
1115$END$
1116$NL$
1117
1118$ ưŪÀžÀ®³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥óÍрγä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥óœéŽü²œ¥Ö¥í¥Ã
1119$ ¥¯€ÎÀžÀ®
1120$IF num_aisrid > 0$
1121        ISRINIB _kernel_aisrinib_table[$num_aisrid$];$NL$
1122$ELSE$
1123        TOPPERS_EMPTY_LABEL(ISRINIB, _kernel_aisrinib_table);$NL$
1124$END$
1125$NL$
1126
1127$ ³ä¹þ€ß¥µ¡Œ¥Ó¥¹¥ë¡Œ¥Á¥óŽÉÍý¥Ö¥í¥Ã¥¯€ÎÀžÀ®
1128$IF num_isr > 0$
1129        ISRCB _kernel_isrcb_table[TNUM_ISR];$NL$
1130$ELSE$
1131        TOPPERS_EMPTY_LABEL(ISRCB, _kernel_isrcb_table);$NL$
1132$END$
1133$NL$
1134
1135$
1136$  ³ä¹þ€ßŽÉÍýµ¡Çœ€Î€¿€á€ÎÉžœàŪ€ÊœéŽü²œŸðÊó€ÎÀžÀ®
1137$
1138$ ³ä¹þ€ß¥Ï¥ó¥É¥é€ÎœéŽü²œ€ËɬÍ׀ʟðÊó
1139$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINIB_TABLE,0)$
1140
1141$ ³ä¹þ€ß¥Ï¥ó¥É¥é¿ô
1142#define TNUM_INHNO      $LENGTH(INH.ORDER_LIST)$$NL$
1143const uint_t _kernel_tnum_inhno = TNUM_INHNO;$NL$
1144$NL$
1145$FOREACH inhno INH.ORDER_LIST$
1146        $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
1147                INTHDR_ENTRY($INH.INHNO[inhno]$, $+INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)$NL$
1148        $END$
1149$END$
1150$NL$
1151
1152$ ³ä¹þ€ß¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯
1153$IF LENGTH(INH.ORDER_LIST)$
1154        const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {$NL$
1155        $JOINEACH inhno INH.ORDER_LIST ",\n"$
1156                $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
1157                        $TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)(INT_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)) }
1158                $ELSE$
1159                        $TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)($INH.INTHDR[inhno]$) }
1160                $END$
1161        $END$$NL$
1162        };$NL$
1163$ELSE$
1164        TOPPERS_EMPTY_LABEL(const INHINIB, _kernel_inhinib_table);$NL$
1165$END$$NL$
1166$END$
1167
1168$ ³ä¹þ€ßÍ×µá¥é¥€¥ó€ÎœéŽü²œ€ËɬÍ׀ʟðÊó
1169$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INTINIB_TABLE,0)$
1170
1171$ ³ä¹þ€ßÍ×µá¥é¥€¥ó¿ô
1172#define TNUM_INTNO      $LENGTH(INT.ORDER_LIST)$$NL$
1173const uint_t _kernel_tnum_intno = TNUM_INTNO;$NL$
1174$NL$
1175
1176$ ³ä¹þ€ßÍ×µá¥é¥€¥óœéŽü²œ¥Ö¥í¥Ã¥¯
1177$IF LENGTH(INT.ORDER_LIST)$
1178        const INTINIB _kernel_intinib_table[TNUM_INTNO] = {$NL$
1179        $JOINEACH intno INT.ORDER_LIST ",\n"$
1180                $TAB${ ($INT.INTNO[intno]$), ($INT.INTATR[intno]$), ($INT.INTPRI[intno]$) }
1181        $END$$NL$
1182        };$NL$
1183$ELSE$
1184        TOPPERS_EMPTY_LABEL(const INTINIB, _kernel_intinib_table);$NL$
1185$END$$NL$
1186$END$
1187
1188$
1189$  CPUÎã³°ŽÉÍýµ¡Çœ
1190$
1191/*$NL$
1192$SPC$*  CPU Exception Management Functions$NL$
1193$SPC$*/$NL$
1194$NL$
1195
1196$ CPUÎã³°¥Ï¥ó¥É¥é€ËŽØ€¹€ë¥š¥é¡Œ¥Á¥§¥Ã¥¯
1197$i = 0$
1198$FOREACH excno EXC.ORDER_LIST$
1199$       // excno€¬DEF_EXC€ËÂЀ¹€ëCPUÎã³°¥Ï¥ó¥É¥éÈÖ¹æ€È€·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
1200        $IF !LENGTH(FIND(EXCNO_DEFEXC_VALID, EXC.EXCNO[excno]))$
1201                $ERROR EXC.TEXT_LINE[excno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
1202        $END$
1203
1204$       // excno€¬DEF_EXC€Ë€è€Ã€ÆÀßÄêºÑ€ß€ÎŸì¹ç¡ÊE_OBJ¡Ë
1205        $j = 0$
1206        $FOREACH excno2 EXC.ORDER_LIST$
1207                $IF j < i && EXC.EXCNO[excno] == EXC.EXCNO[excno2]$
1208                        $ERROR EXC.TEXT_LINE[excno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
1209                $END$
1210                $j = j + 1$
1211        $END$
1212
1213$       // excatr€¬¡ÊTA_NULL¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
1214        $IF (EXC.EXCATR[excno] & ~TARGET_EXCATR) != 0$
1215                $ERROR EXC.TEXT_LINE[excno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "excatr", EXC.EXCATR[excno], "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
1216        $END$
1217        $i = i + 1$
1218$END$
1219
1220$ CPUÎã³°¥Ï¥ó¥É¥é€Î€¿€á€ÎÉžœàŪ€ÊœéŽü²œŸðÊó€ÎÀžÀ®
1221$IF !OMIT_INITIALIZE_EXCEPTION$
1222
1223$ CPUÎã³°¥Ï¥ó¥É¥é¿ô
1224#define TNUM_EXCNO      $LENGTH(EXC.ORDER_LIST)$$NL$
1225const uint_t _kernel_tnum_excno = TNUM_EXCNO;$NL$
1226$NL$
1227$FOREACH excno EXC.ORDER_LIST$
1228        EXCHDR_ENTRY($EXC.EXCNO[excno]$, $+EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)$NL$
1229$END$
1230$NL$
1231
1232$ CPUÎã³°¥Ï¥ó¥É¥éœéŽü²œ¥Ö¥í¥Ã¥¯
1233$IF LENGTH(EXC.ORDER_LIST)$
1234        const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$
1235        $JOINEACH excno EXC.ORDER_LIST ",\n"$
1236                $TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)(EXC_ENTRY($EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)) }
1237        $END$$NL$
1238        };$NL$
1239$ELSE$
1240        TOPPERS_EMPTY_LABEL(const EXCINIB, _kernel_excinib_table);$NL$
1241$END$$NL$
1242$END$
1243
1244$
1245$  È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥ÈÍрΥ¹¥¿¥Ã¥¯Îΰè
1246$
1247/*$NL$
1248$SPC$*  Stack Area for Non-task Context$NL$
1249$SPC$*/$NL$
1250$NL$
1251
1252$IF !LENGTH(ICS.ORDER_LIST)$
1253$       // DEF_ICS€¬€Ê€€Ÿì¹ç€Î¥Ç¥Õ¥©¥ë¥ÈÃÍ€ÎÀßÄê
1254        #ifdef DEFAULT_ISTK$NL$
1255        $NL$
1256        #define TOPPERS_ISTKSZ          DEFAULT_ISTKSZ$NL$
1257        #define TOPPERS_ISTK            DEFAULT_ISTK$NL$
1258        $NL$
1259        #else /* DEAULT_ISTK */$NL$
1260        $NL$
1261        $istksz = ALLOC_STACK("_kernel_istack", "DEFAULT_ISTKSZ")$$NL$
1262        #define TOPPERS_ISTKSZ          $istksz$$NL$
1263        #define TOPPERS_ISTK            _kernel_istack$NL$
1264        $NL$
1265        #endif /* DEAULT_ISTK */$NL$
1266$ELSE$
1267
1268$       // ÀÅŪAPI¡ÖDEF_ICS¡×€¬Ê£¿ô€¢€ë¡ÊE_OBJ¡Ë
1269        $IF LENGTH(ICS.ORDER_LIST) > 1$
1270                $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_ICS")$$END$
1271        $END$
1272
1273$       // istksz€¬0°Ê²Œ€«¡€¥¿¡Œ¥²¥Ã¥ÈÄêµÁ€ÎºÇŸ®ÃÍ¡ÊTARGET_MIN_ISTKSZ¡Ë€è€ê€â
1274$       // Ÿ®€µ€€Ÿì¹ç¡ÊE_PAR¡Ë
1275        $IF ICS.ISTKSZ[1] <= 0 || (TARGET_MIN_ISTKSZ
1276                                                                        && ICS.ISTKSZ[1] < TARGET_MIN_ISTKSZ)$
1277                $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(_("too small %1% `%2%\' in %3%"), "istksz", ICS.ISTKSZ[1], "DEF_ICS")$$END$
1278        $END$
1279
1280$       // istksz€¬¥¹¥¿¥Ã¥¯Îΰè€Î¥µ¥€¥º€È€·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
1281        $IF !EQ(ICS.ISTK[1], "NULL") && CHECK_STKSZ_ALIGN
1282                                                        && (ICS.ISTKSZ[1] & (CHECK_STKSZ_ALIGN - 1))$
1283                $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% `%2%\' in %3% is not aligned"), "istksz", ICS.ISTKSZ[1], "DEF_ICS")$$END$
1284        $END$
1285
1286        $IF EQ(ICS.ISTK[1], "NULL")$
1287$               // ¥¹¥¿¥Ã¥¯Îΰè€ÎŒ«Æ°³äÉÕ€±
1288                $istksz = ALLOC_STACK("_kernel_istack", ICS.ISTKSZ[1])$$NL$
1289                #define TOPPERS_ISTKSZ          $istksz$$NL$
1290                #define TOPPERS_ISTK            _kernel_istack$NL$
1291        $ELSE$
1292                #define TOPPERS_ISTKSZ          ($ICS.ISTKSZ[1]$)$NL$
1293                #define TOPPERS_ISTK            (void *)($ICS.ISTK[1]$)$NL$
1294        $END$
1295$END$
1296$NL$
1297
1298$ È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥ÈÍрΥ¹¥¿¥Ã¥¯Îΰè
1299const SIZE              _kernel_istksz = TOPPERS_ISTKSZ;$NL$
1300STK_T *const    _kernel_istk = TOPPERS_ISTK;$NL$
1301$NL$
1302#ifdef TOPPERS_ISTKPT$NL$
1303STK_T *const    _kernel_istkpt = TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ);$NL$
1304#endif /* TOPPERS_ISTKPT */$NL$
1305$NL$
1306
1307$
1308$  ¥«¡Œ¥Í¥ë€¬³ä€êÉÕ€±€ë¥á¥â¥êÎΰè
1309$
1310/*$NL$
1311$SPC$*  Memory Area Allocated by Kernel$NL$
1312$SPC$*/$NL$
1313$NL$
1314
1315$IF !LENGTH(KMM.ORDER_LIST)$
1316$       // DEF_KMM€¬€Ê€€Ÿì¹ç€Î¥Ç¥Õ¥©¥ë¥ÈÃÍ€ÎÀßÄê
1317        #define TOPPERS_KMMSZ           0$NL$
1318        #define TOPPERS_KMM                     NULL$NL$
1319$ELSE$
1320$       // ÀÅŪAPI¡ÖDEF_KMM¡×€¬Ê£¿ô€¢€ë¡ÊE_OBJ¡Ë
1321        $IF LENGTH(KMM.ORDER_LIST) > 1$
1322                $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_KMM")$$END$
1323        $END$
1324
1325$       // kmmsz€¬0°Ê²Œ€ÎŸì¹ç¡ÊE_PAR¡Ë
1326        $IF KMM.KMMSZ[1] <= 0$
1327                $ERROR KMM.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% `%2%\' is zero in %3%"), "kmmsz", KMM.KMMSZ[1], "DEF_KMM")$$END$
1328        $END$
1329
1330$       // kmmsz€¬¥«¡Œ¥Í¥ë€¬³ä€êÉÕ€±€ë¥á¥â¥êÎΰè€Î¥µ¥€¥º€È€·€ÆÀµ€·€¯€Ê€€Ÿì¹ç¡ÊE_PAR¡Ë
1331        $IF !EQ(KMM.KMM[1], "NULL") && CHECK_MB_ALIGN
1332                                                        && (KMM.KMMSZ[1] & (CHECK_MB_ALIGN - 1))$
1333                $ERROR KMM.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% `%2%\' in %3% is not aligned"), "kmmsz", KMM.KMMSZ[1], "DEF_KMM")$$END$
1334        $END$
1335
1336        $IF EQ(KMM.KMM[1], "NULL")$
1337$               // ¥«¡Œ¥Í¥ë€¬³ä€êÉÕ€±€ë¥á¥â¥êÎΰè€ÎŒ«Æ°³äÉÕ€±
1338                static MB_T                                     _kernel_memory[TOPPERS_COUNT_SZ($KMM.KMMSZ[1]$, sizeof(MB_T))];$NL$
1339                #define TOPPERS_KMMSZ           TOPPERS_ROUND_SZ($KMM.KMMSZ[1]$, sizeof(MB_T))$NL$
1340                #define TOPPERS_KMM                     _kernel_memory$NL$
1341        $ELSE$
1342                #define TOPPERS_KMMSZ           ($KMM.KMMSZ[1]$)$NL$
1343                #define TOPPERS_KMM                     (void *)($KMM.KMM[1]$)$NL$
1344        $END$
1345$END$
1346$NL$
1347
1348$ ¥«¡Œ¥Í¥ë€¬³ä€êÉÕ€±€ë¥á¥â¥êÎΰè
1349const SIZE              _kernel_kmmsz = TOPPERS_KMMSZ;$NL$
1350MB_T *const             _kernel_kmm = TOPPERS_KMM;$NL$
1351$NL$
1352
1353$
1354$  ¥¿¥€¥à¥€¥Ù¥ó¥ÈŽÉÍý
1355$
1356/*$NL$
1357$SPC$*  Time Event Management$NL$
1358$SPC$*/$NL$
1359$NL$
1360TMEVTN   _kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];$NL$
1361$NL$
1362
1363$
1364$  ³Æ¥â¥ž¥å¡Œ¥ë€ÎœéŽü²œŽØ¿ô
1365$
1366/*$NL$
1367$SPC$*  Module Initialization Function$NL$
1368$SPC$*/$NL$
1369$NL$
1370void$NL$
1371_kernel_initialize_object(void)$NL$
1372{$NL$
1373$TAB$_kernel_initialize_task();$NL$
1374$IF num_semid$$TAB$_kernel_initialize_semaphore();$NL$$END$
1375$IF num_flgid$$TAB$_kernel_initialize_eventflag();$NL$$END$
1376$IF num_dtqid$$TAB$_kernel_initialize_dataqueue();$NL$$END$
1377$IF num_pdqid$$TAB$_kernel_initialize_pridataq();$NL$$END$
1378$IF num_mbxid$$TAB$_kernel_initialize_mailbox();$NL$$END$
1379$IF num_mpfid$$TAB$_kernel_initialize_mempfix();$NL$$END$
1380$IF num_cycid$$TAB$_kernel_initialize_cyclic();$NL$$END$
1381$IF num_almid$$TAB$_kernel_initialize_alarm();$NL$$END$
1382$TAB$_kernel_initialize_interrupt();$NL$
1383$IF num_isr$$TAB$_kernel_initialize_isr();$NL$$END$
1384$TAB$_kernel_initialize_exception();$NL$
1385}$NL$
1386$NL$
1387
1388$
1389$  œéŽü²œ¥ë¡Œ¥Á¥ó€ÎŒÂ¹ÔŽØ¿ô
1390$
1391/*$NL$
1392$SPC$*  Initialization Routine$NL$
1393$SPC$*/$NL$
1394$NL$
1395void$NL$
1396_kernel_call_inirtn(void)$NL$
1397{$NL$
1398$FOREACH order INI.ORDER_LIST$
1399$       // iniatr€¬¡ÊTA_NULL¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
1400        $IF INI.INIATR[order] != 0$
1401                $ERROR INI.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "iniatr", INI.INIATR[order], "inirtn", INI.INIRTN[order], "ATT_INI")$$END$
1402        $END$
1403        $TAB$((INIRTN)($INI.INIRTN[order]$))((intptr_t)($INI.EXINF[order]$));$NL$
1404$END$
1405}$NL$
1406$NL$
1407
1408$
1409$  œªÎ»œèÍý¥ë¡Œ¥Á¥ó€ÎŒÂ¹ÔŽØ¿ô
1410$
1411/*$NL$
1412$SPC$*  Termination Routine$NL$
1413$SPC$*/$NL$
1414$NL$
1415void$NL$
1416_kernel_call_terrtn(void)$NL$
1417{$NL$
1418$FOREACH rorder TER.RORDER_LIST$
1419$       // teratr€¬¡ÊTA_NULL¡Ë€Ç€Ê€€Ÿì¹ç¡ÊE_RSATR¡Ë
1420        $IF TER.TERATR[rorder] != 0$
1421                $ERROR TER.TEXT_LINE[rorder]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "teratr", TER.TERATR[rorder], "terrtn", TER.TERRTN[rorder], "ATT_TER")$$END$
1422        $END$
1423        $TAB$((TERRTN)($TER.TERRTN[rorder]$))((intptr_t)($TER.EXINF[rorder]$));$NL$
1424$END$
1425}$NL$
1426$NL$
詳しい使い方は TracBrowser を参照してください。