source: asp_ewarm/asp-1.7.0/extension/dcre/kernel/kernel.tf@ 61

Last change on this file since 61 was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

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