source: asp_ewarm/asp-1.7.0/extension/ovrhdr/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: 36.1 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$ kernel_cfg.h‚̐¶¬
50$ =====================================================================
51
52$FILE "kernel_cfg.h"$
53/* kernel_cfg.h */$NL$
54#ifndef TOPPERS_KERNEL_CFG_H$NL$
55#define TOPPERS_KERNEL_CFG_H$NL$
56$NL$
57#define TNUM_TSKID $LENGTH(TSK.ID_LIST)$$NL$
58#define TNUM_SEMID $LENGTH(SEM.ID_LIST)$$NL$
59#define TNUM_FLGID $LENGTH(FLG.ID_LIST)$$NL$
60#define TNUM_DTQID $LENGTH(DTQ.ID_LIST)$$NL$
61#define TNUM_PDQID $LENGTH(PDQ.ID_LIST)$$NL$
62#define TNUM_MBXID $LENGTH(MBX.ID_LIST)$$NL$
63#define TNUM_MPFID $LENGTH(MPF.ID_LIST)$$NL$
64#define TNUM_CYCID $LENGTH(CYC.ID_LIST)$$NL$
65#define TNUM_ALMID $LENGTH(ALM.ID_LIST)$$NL$
66$NL$
67$FOREACH id TSK.ID_LIST$
68 #define $id$ $+id$$NL$
69$END$
70$FOREACH id SEM.ID_LIST$
71 #define $id$ $+id$$NL$
72$END$
73$FOREACH id FLG.ID_LIST$
74 #define $id$ $+id$$NL$
75$END$
76$FOREACH id DTQ.ID_LIST$
77 #define $id$ $+id$$NL$
78$END$
79$FOREACH id PDQ.ID_LIST$
80 #define $id$ $+id$$NL$
81$END$
82$FOREACH id MBX.ID_LIST$
83 #define $id$ $+id$$NL$
84$END$
85$FOREACH id MPF.ID_LIST$
86 #define $id$ $+id$$NL$
87$END$
88$FOREACH id CYC.ID_LIST$
89 #define $id$ $+id$$NL$
90$END$
91$FOREACH id ALM.ID_LIST$
92 #define $id$ $+id$$NL$
93$END$
94$NL$
95#endif /* TOPPERS_KERNEL_CFG_H */$NL$
96
97$ =====================================================================
98$ kernel_cfg.c‚̐¶¬
99$ =====================================================================
100
101$FILE "kernel_cfg.c"$
102/* kernel_cfg.c */$NL$
103#include "kernel/kernel_int.h"$NL$
104#include "kernel_cfg.h"$NL$
105$NL$
106#ifndef TOPPERS_EMPTY_LABEL$NL$
107#define TOPPERS_EMPTY_LABEL(x,y) x y[0]$NL$
108#endif$NL$
109$NL$
110#if TKERNEL_PRID != 0x07u$NL$
111#error The kernel does not match this configuration file.$NL$
112#endif$NL$
113$NL$
114
115$
116$ ƒCƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒui#includej
117$
118/*$NL$
119$SPC$* Include Directives (#include)$NL$
120$SPC$*/$NL$
121$NL$
122$INCLUDES$
123$NL$
124
125$
126$ ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚é•Ï”
127$
128$IF USE_EXTERNAL_ID$
129 /*$NL$
130 $SPC$* Variables for Object ID$NL$
131 $SPC$*/$NL$
132 $NL$
133 $FOREACH id TSK.ID_LIST$
134 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
135 $END$
136 $FOREACH id SEM.ID_LIST$
137 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
138 $END$
139 $FOREACH id FLG.ID_LIST$
140 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
141 $END$
142 $FOREACH id DTQ.ID_LIST$
143 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
144 $END$
145 $FOREACH id PDQ.ID_LIST$
146 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
147 $END$
148 $FOREACH id MBX.ID_LIST$
149 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
150 $END$
151 $FOREACH id MPF.ID_LIST$
152 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
153 $END$
154 $FOREACH id CYC.ID_LIST$
155 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
156 $END$
157 $FOREACH id ALM.ID_LIST$
158 const ID $id$_id$SPC$=$SPC$$+id$;$NL$
159 $END$
160$END$
161
162$
163$ ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
164$
165/*$NL$
166$SPC$* Default Definitions of Trace Log Macros$NL$
167$SPC$*/$NL$
168$NL$
169#ifndef LOG_ISR_ENTER$NL$
170#define LOG_ISR_ENTER(intno)$NL$
171#endif /* LOG_ISR_ENTER */$NL$
172$NL$
173#ifndef LOG_ISR_LEAVE$NL$
174#define LOG_ISR_LEAVE(intno)$NL$
175#endif /* LOG_ISR_LEAVE */$NL$
176$NL$
177
178$
179$ ƒ^ƒXƒN
180$
181/*$NL$
182$SPC$* Task Management Functions$NL$
183$SPC$*/$NL$
184$NL$
185
186$ ƒ^ƒXƒN‚ª1ŒÂˆÈã‘¶Ý‚·‚邱‚Ƃ̃`ƒFƒbƒN
187$IF !LENGTH(TSK.ID_LIST)$
188 $ERROR$$FORMAT(_("no task is registered"))$$END$
189$END$
190
191$ ƒ^ƒXƒNID”ԍ†‚̍őå’l
192const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);$NL$
193$NL$
194
195$ ƒGƒ‰[ƒ`ƒFƒbƒN
196$FOREACH tskid TSK.ID_LIST$
197$ // tskatr‚ªimTA_ACTnj‚Å‚È‚¢ê‡iE_RSATRj
198 $IF (TSK.TSKATR[tskid] & ~(TA_ACT|TARGET_TSKATR)) != 0$
199 $ERROR TSK.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "tskatr", TSK.TSKATR[tskid], tskid, "CRE_TSK")$$END$
200 $END$
201
202$ // (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)‚Å‚È‚¢ê‡iE_PARj
203 $IF !(TMIN_TPRI <= TSK.ITSKPRI[tskid] && TSK.ITSKPRI[tskid] <= TMAX_TPRI)$
204 $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "itskpri", TSK.ITSKPRI[tskid], tskid, "CRE_TSK")$$END$
205 $END$
206
207$ // texatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
208 $IF LENGTH(TSK.TEXATR[tskid]) && TSK.TEXATR[tskid] != 0$
209 $ERROR DEF_TEX.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "texatr", TSK.TEXATR[tskid], tskid, "DEF_TEX")$$END$
210 $END$
211$END$
212
213$ ƒXƒ^ƒbƒN—̈æ‚̐¶¬‚Æ‚»‚ê‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
214$FOREACH tskid TSK.ID_LIST$
215$ // stksz‚ª0‚©Cƒ^[ƒQƒbƒg’è‹`‚̍ŏ¬’liTARGET_MIN_STKSZj‚æ‚è‚à¬‚³‚¢ê‡iE_PARj
216 $IF TSK.STKSZ[tskid] == 0 || (TARGET_MIN_STKSZ
217 && TSK.STKSZ[tskid] < TARGET_MIN_STKSZ)$
218 $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$
219 $END$
220$ // stksz‚ªƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
221 $IF !EQ(TSK.STK[tskid], "NULL") && CHECK_STKSZ_ALIGN
222 && (TSK.STKSZ[tskid] & (CHECK_STKSZ_ALIGN - 1))$
223 $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$
224 $END$
225
226 $IF EQ(TSK.STK[tskid],"NULL")$
227 static STK_T _kernel_stack_$tskid$[COUNT_STK_T($TSK.STKSZ[tskid]$)];$NL$
228 $TSK.TINIB_STKSZ[tskid] = FORMAT("ROUND_STK_T(%1%)", TSK.STKSZ[tskid])$
229 $TSK.TINIB_STK[tskid] = CONCAT("_kernel_stack_", tskid)$
230 $ELSE$
231 $TSK.TINIB_STKSZ[tskid] = TSK.STKSZ[tskid]$
232 $TSK.TINIB_STK[tskid] = TSK.STK[tskid]$
233 $END$
234$END$
235$NL$
236
237$ ƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN‚̐¶¬iƒ^ƒXƒN‚Í1ŒÂˆÈã‘¶Ý‚·‚éj
238const TINIB _kernel_tinib_table[TNUM_TSKID] = {$NL$
239$JOINEACH tskid TSK.ID_LIST ",\n"$
240$ // ƒ^ƒXƒN‘®«CŠg’£î•ñC‹N“®”Ô’nC‹N“®Žž—Dæ“x
241 $TAB${
242 $SPC$($TSK.TSKATR[tskid]$), (intptr_t)($TSK.EXINF[tskid]$),
243 $SPC$((TASK)($TSK.TASK[tskid]$)), INT_PRIORITY($TSK.ITSKPRI[tskid]$),
244
245$ // ƒ^ƒXƒN‰Šú‰»ƒRƒ“ƒeƒLƒXƒgƒuƒƒbƒNCƒXƒ^ƒbƒN—̈æ
246 $IF USE_TSKINICTXB$
247 $GENERATE_TSKINICTXB(tskid)$
248 $ELSE$
249 $SPC$$TSK.TINIB_STKSZ[tskid]$, $TSK.TINIB_STK[tskid]$,
250 $END$
251
252$ // ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‘®«‚Æ‹N“®”Ô’n
253 $SPC$($ALT(TSK.TEXATR[tskid],"TA_NULL")$), ($ALT(TSK.TEXRTN[tskid],"NULL")$) }
254$END$$NL$
255};$NL$
256$NL$
257
258$ ƒ^ƒXƒNŠÇ—ƒuƒƒbƒN‚̐¶¬
259TCB _kernel_tcb_table[TNUM_TSKID];$NL$
260$NL$
261
262$ ƒ^ƒXƒN¶¬‡˜ƒe[ƒuƒ‹‚̐¶¬
263const ID _kernel_torder_table[TNUM_TSKID] = {$NL$
264$TAB$$JOINEACH tskid TSK.ORDER_LIST ", "$$tskid$$END$$NL$
265};$NL$
266$NL$
267
268$
269$ ƒZƒ}ƒtƒH
270$
271/*$NL$
272$SPC$* Semaphore Functions$NL$
273$SPC$*/$NL$
274$NL$
275
276$ ƒZƒ}ƒtƒHID”ԍ†‚̍őå’l
277const ID _kernel_tmax_semid = (TMIN_SEMID + TNUM_SEMID - 1);$NL$
278$NL$
279
280$ ƒZƒ}ƒtƒH‰Šú‰»ƒuƒƒbƒN‚̐¶¬
281$IF LENGTH(SEM.ID_LIST)$
282 const SEMINIB _kernel_seminib_table[TNUM_SEMID] = {$NL$
283 $JOINEACH semid SEM.ID_LIST ",\n"$
284$ // sematr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
285 $IF (SEM.SEMATR[semid] & ~TA_TPRI) != 0$
286 $ERROR SEM.TEXT_LINE[semid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "sematr", SEM.SEMATR[semid], semid, "CRE_SEM")$$END$
287 $END$
288
289$ // (0 <= isemcnt && isemcnt <= maxsem)‚Å‚È‚¢ê‡iE_PARj
290 $IF !(0 <= SEM.ISEMCNT[semid] && SEM.ISEMCNT[semid] <= SEM.MAXSEM[semid])$
291 $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("too large %1% `%2%\' of `%3%\' in %4%"), "isemcnt", SEM.ISEMCNT[semid], semid, "CRE_SEM")$$END$
292 $END$
293
294$ // (1 <= maxsem && maxsem <= TMAX_MAXSEM)‚Å‚È‚¢ê‡iE_PARj
295 $IF !(1 <= SEM.MAXSEM[semid] && SEM.MAXSEM[semid] <= TMAX_MAXSEM)$
296 $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxsem", SEM.MAXSEM[semid], semid, "CRE_SEM")$$END$
297 $END$
298
299$ // ƒZƒ}ƒtƒH‰Šú‰»ƒuƒƒbƒN
300 $TAB${ ($SEM.SEMATR[semid]$), ($SEM.ISEMCNT[semid]$), ($SEM.MAXSEM[semid]$) }
301 $END$$NL$
302 };$NL$
303 $NL$
304
305$ // ƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN
306 SEMCB _kernel_semcb_table[TNUM_SEMID];$NL$
307$ELSE$
308 TOPPERS_EMPTY_LABEL(const SEMINIB, _kernel_seminib_table);$NL$
309 TOPPERS_EMPTY_LABEL(SEMCB, _kernel_semcb_table);$NL$
310$END$$NL$
311
312$
313$ ƒCƒxƒ“ƒgƒtƒ‰ƒO
314$
315/*$NL$
316$SPC$* Eventflag Functions$NL$
317$SPC$*/$NL$
318$NL$
319
320$ ƒCƒxƒ“ƒgƒtƒ‰ƒOID”ԍ†‚̍őå’l
321const ID _kernel_tmax_flgid = (TMIN_FLGID + TNUM_FLGID - 1);$NL$
322$NL$
323
324$ ƒCƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN‚̐¶¬
325$IF LENGTH(FLG.ID_LIST)$
326 const FLGINIB _kernel_flginib_table[TNUM_FLGID] = {$NL$
327 $JOINEACH flgid FLG.ID_LIST ",\n"$
328$ // flgatr‚ªimTA_TPRInbmTA_WMULnbmTA_CLRnj‚Å‚È‚¢ê‡iE_RSATRj
329 $IF (FLG.FLGATR[flgid] & ~(TA_TPRI|TA_WMUL|TA_CLR)) != 0$
330 $ERROR FLG.TEXT_LINE[flgid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "flgatr", FLG.FLGATR[flgid], flgid, "CRE_FLG")$$END$
331 $END$
332
333$ // ƒCƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN
334 $TAB${ ($FLG.FLGATR[flgid]$), ($FLG.IFLGPTN[flgid]$) }
335 $END$$NL$
336 };$NL$
337 $NL$
338
339$ // ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN
340 FLGCB _kernel_flgcb_table[TNUM_FLGID];$NL$
341$ELSE$
342 TOPPERS_EMPTY_LABEL(const FLGINIB, _kernel_flginib_table);$NL$
343 TOPPERS_EMPTY_LABEL(FLGCB, _kernel_flgcb_table);$NL$
344$END$$NL$
345
346$
347$ ƒf[ƒ^ƒLƒ…
348[
349$
350/*$NL$
351$SPC$* Dataqueue Functions$NL$
352$SPC$*/$NL$
353$NL$
354
355$ ƒf[ƒ^ƒLƒ…
356[ID”ԍ†‚̍őå’l
357const ID _kernel_tmax_dtqid = (TMIN_DTQID + TNUM_DTQID - 1);$NL$
358$NL$
359
360$IF LENGTH(DTQ.ID_LIST)$
361 $FOREACH dtqid DTQ.ID_LIST$
362$ // dtqatr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
363 $IF (DTQ.DTQATR[dtqid] & ~TA_TPRI) != 0$
364 $ERROR DTQ.TEXT_LINE[dtqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqatr", DTQ.DTQATR[dtqid], dtqid, "CRE_DTQ")$$END$
365 $END$
366
367$ // dtqmb‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
368 $IF !EQ(DTQ.DTQMB[dtqid], "NULL")$
369 $ERROR DTQ.TEXT_LINE[dtqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQMB[dtqid], dtqid, "CRE_DTQ")$$END$
370 $END$
371
372$ // ƒf[ƒ^ƒLƒ…
373[ŠÇ——̈æ
374 $IF DTQ.DTQCNT[dtqid]$
375 static DTQMB _kernel_dtqmb_$dtqid$[$DTQ.DTQCNT[dtqid]$];$NL$
376 $END$
377 $END$
378
379$ // ƒf[ƒ^ƒLƒ…
380[‰Šú‰»ƒuƒƒbƒN‚̐¶¬
381 const DTQINIB _kernel_dtqinib_table[TNUM_DTQID] = {$NL$
382 $JOINEACH dtqid DTQ.ID_LIST ",\n"$
383 $TAB${ ($DTQ.DTQATR[dtqid]$), ($DTQ.DTQCNT[dtqid]$), $IF DTQ.DTQCNT[dtqid]$(_kernel_dtqmb_$dtqid$)$ELSE$NULL$END$ }
384 $END$$NL$
385 };$NL$
386 $NL$
387
388$ // ƒf[ƒ^ƒLƒ…
389[ŠÇ—ƒuƒƒbƒN
390 DTQCB _kernel_dtqcb_table[TNUM_DTQID];$NL$
391$ELSE$
392 TOPPERS_EMPTY_LABEL(const DTQINIB, _kernel_dtqinib_table);$NL$
393 TOPPERS_EMPTY_LABEL(DTQCB, _kernel_dtqcb_table);$NL$
394$END$$NL$
395
396$
397$ —Dæ“xƒf[ƒ^ƒLƒ…
398[
399$
400/*$NL$
401$SPC$* Priority Dataqueue Functions$NL$
402$SPC$*/$NL$
403$NL$
404
405$ —Dæ“xƒf[ƒ^ƒLƒ…
406[ID”ԍ†‚̍őå’l
407const ID _kernel_tmax_pdqid = (TMIN_PDQID + TNUM_PDQID - 1);$NL$
408$NL$
409
410$IF LENGTH(PDQ.ID_LIST)$
411 $FOREACH pdqid PDQ.ID_LIST$
412$ // pdqatr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
413 $IF (PDQ.PDQATR[pdqid] & ~TA_TPRI) != 0$
414 $ERROR PDQ.TEXT_LINE[pdqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqatr", PDQ.PDQATR[pdqid], pdqid, "CRE_PDQ")$$END$
415 $END$
416
417$ // (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)‚Å‚È‚¢ê‡iE_PARj
418 $IF !(TMIN_DPRI <= PDQ.MAXDPRI[pdqid] && PDQ.MAXDPRI[pdqid] <= TMAX_DPRI)$
419 $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxdpri", PDQ.MAXDPRI[pdqid], pdqid, "CRE_PDQ")$$END$
420 $END$
421
422$ // pdqmb‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
423 $IF !EQ(PDQ.PDQMB[pdqid], "NULL")$
424 $ERROR PDQ.TEXT_LINE[pdqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqmb", PDQ.PDQMB[pdqid], pdqid, "CRE_PDQ")$$END$
425 $END$
426
427$ // —Dæ“xƒf[ƒ^ƒLƒ…
428[ŠÇ——̈æ
429 $IF PDQ.PDQCNT[pdqid]$
430 static PDQMB _kernel_pdqmb_$pdqid$[$PDQ.PDQCNT[pdqid]$];$NL$
431 $END$
432 $END$
433
434$ // —Dæ“xƒf[ƒ^ƒLƒ…
435[‰Šú‰»ƒuƒƒbƒN‚̐¶¬
436 const PDQINIB _kernel_pdqinib_table[TNUM_PDQID] = {$NL$
437 $JOINEACH pdqid PDQ.ID_LIST ",\n"$
438 $TAB${ ($PDQ.PDQATR[pdqid]$), ($PDQ.PDQCNT[pdqid]$), ($PDQ.MAXDPRI[pdqid]$), $IF PDQ.PDQCNT[pdqid]$(_kernel_pdqmb_$pdqid$)$ELSE$NULL$END$ }
439 $END$$NL$
440 };$NL$
441 $NL$
442
443$ // —Dæ“xƒf[ƒ^ƒLƒ…
444[ŠÇ—ƒuƒƒbƒN
445 PDQCB _kernel_pdqcb_table[TNUM_PDQID];$NL$
446$ELSE$
447 TOPPERS_EMPTY_LABEL(const PDQINIB, _kernel_pdqinib_table);$NL$
448 TOPPERS_EMPTY_LABEL(PDQCB, _kernel_pdqcb_table);$NL$
449$END$$NL$
450
451$
452$ ƒ[ƒ‹ƒ{ƒbƒNƒX
453$
454/*$NL$
455$SPC$* Mailbox Functions$NL$
456$SPC$*/$NL$
457$NL$
458
459$ ƒ[ƒ‹ƒ{ƒbƒNƒXID”ԍ†‚̍őå’l
460const ID _kernel_tmax_mbxid = (TMIN_MBXID + TNUM_MBXID - 1);$NL$
461$NL$
462
463$ ƒ[ƒ‹ƒ{ƒbƒNƒX‰Šú‰»ƒuƒƒbƒN‚̐¶¬
464$IF LENGTH(MBX.ID_LIST)$
465 const MBXINIB _kernel_mbxinib_table[TNUM_MBXID] = {$NL$
466 $JOINEACH mbxid MBX.ID_LIST ",\n"$
467$ // mbxatr‚ªimTA_TPRInbmTA_MPRInj‚Å‚È‚¢ê‡iE_RSATRj
468 $IF (MBX.MBXATR[mbxid] & ~(TA_TPRI|TA_MPRI)) != 0$
469 $ERROR MBX.TEXT_LINE[mbxid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mbxatr", MBX.MBXATR[mbxid], mbxid, "CRE_MBX")$$END$
470 $END$
471
472$ // (TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)‚Å‚È‚¢ê‡iE_PARj
473 $IF !(TMIN_MPRI <= MBX.MAXMPRI[mbxid] && MBX.MAXMPRI[mbxid] <= TMAX_MPRI)$
474 $ERROR MBX.TEXT_LINE[mbxid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxmpri", MBX.MAXMPRI[mbxid], mbxid, "CRE_MBX")$$END$
475 $END$
476
477$ // mprihd‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
478 $IF !EQ(MBX.MPRIHD[mbxid], "NULL")$
479 $ERROR MBX.TEXT_LINE[mbxid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mprihd", MBX.MPRIHD[mbxid], mbxid, "CRE_MBX")$$END$
480 $END$
481
482$ // ƒ[ƒ‹ƒ{ƒbƒNƒX‰Šú‰»ƒuƒƒbƒN
483 $TAB${ ($MBX.MBXATR[mbxid]$), ($MBX.MAXMPRI[mbxid]$) }
484 $END$$NL$
485 };$NL$
486 $NL$
487
488$ // ƒ[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN
489 MBXCB _kernel_mbxcb_table[TNUM_MBXID];$NL$
490$ELSE$
491 TOPPERS_EMPTY_LABEL(const MBXINIB, _kernel_mbxinib_table);$NL$
492 TOPPERS_EMPTY_LABEL(MBXCB, _kernel_mbxcb_table);$NL$
493$END$$NL$
494
495$
496$ ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹
497$
498/*$NL$
499$SPC$* Fixed-sized Memorypool Functions$NL$
500$SPC$*/$NL$
501$NL$
502
503$ ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ID”ԍ†‚̍őå’l
504const ID _kernel_tmax_mpfid = (TMIN_MPFID + TNUM_MPFID - 1);$NL$
505$NL$
506
507$IF LENGTH(MPF.ID_LIST)$
508 $FOREACH mpfid MPF.ID_LIST$
509$ // mpfatr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
510 $IF (MPF.MPFATR[mpfid] & ~TA_TPRI) != 0$
511 $ERROR MPF.TEXT_LINE[mpfid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfatr", MPF.MPFATR[mpfid], mpfid, "CRE_MPF")$$END$
512 $END$
513
514$ // blkcnt‚ª0‚̏ꍇiE_PARj
515 $IF MPF.BLKCNT[mpfid] == 0$
516 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blkcnt", MPF.BLKCNT[mpfid], mpfid, "CRE_MPF")$$END$
517 $END$
518
519$ // blksz‚ª0‚̏ꍇiE_PARj
520 $IF MPF.BLKSZ[mpfid] == 0$
521 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blksz", MPF.BLKSZ[mpfid], mpfid, "CRE_MPF")$$END$
522 $END$
523
524$ // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ
525 $IF EQ(MPF.MPF[mpfid], "NULL")$
526 static MPF_T _kernel_mpf_$mpfid$[($MPF.BLKCNT[mpfid]$) * COUNT_MPF_T($MPF.BLKSZ[mpfid]$)];$NL$
527 $END$
528
529$ // mpfmb‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
530 $IF !EQ(MPF.MPFMB[mpfid], "NULL")$
531 $ERROR MPF.TEXT_LINE[mpfid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfmb", MPF.MPFMB[mpfid], mpfid, "CRE_MPF")$$END$
532 $END$
533
534$ // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ——̈æ
535 static MPFMB _kernel_mpfmb_$mpfid$[$MPF.BLKCNT[mpfid]$];$NL$
536 $END$
537
538$ // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‰Šú‰»ƒuƒƒbƒN‚̐¶¬
539 const MPFINIB _kernel_mpfinib_table[TNUM_MPFID] = {$NL$
540 $JOINEACH mpfid MPF.ID_LIST ",\n"$
541 $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$) }
542 $END$$NL$
543 };$NL$
544 $NL$
545
546$ // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN
547 MPFCB _kernel_mpfcb_table[TNUM_MPFID];$NL$
548$ELSE$
549 TOPPERS_EMPTY_LABEL(const MPFINIB, _kernel_mpfinib_table);$NL$
550 TOPPERS_EMPTY_LABEL(MPFCB, _kernel_mpfcb_table);$NL$
551$END$$NL$
552
553$
554$ ŽüŠúƒnƒ“ƒhƒ‰
555$
556/*$NL$
557$SPC$* Cyclic Handler Functions$NL$
558$SPC$*/$NL$
559$NL$
560
561$ ŽüŠúƒnƒ“ƒhƒ‰ID”ԍ†‚̍őå’l
562const ID _kernel_tmax_cycid = (TMIN_CYCID + TNUM_CYCID - 1);$NL$
563$NL$
564
565$ ŽüŠúƒnƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹‚̐¶¬
566$IF LENGTH(CYC.ID_LIST)$
567 const CYCINIB _kernel_cycinib_table[TNUM_CYCID] = {$NL$
568 $JOINEACH cycid CYC.ID_LIST ",\n"$
569$ // cycatr‚ªimTA_STAnj‚Å‚È‚¢ê‡iE_RSATRj
570 $IF (CYC.CYCATR[cycid] & ~TA_STA) != 0$
571 $ERROR CYC.TEXT_LINE[cycid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycatr", CYC.CYCATR[cycid], cycid, "CRE_CYC")$$END$
572 $END$
573
574$ // (0 < cyctim && cyctim <= TMAX_RELTIM)‚Å‚È‚¢ê‡iE_PARj
575 $IF !(0 < CYC.CYCTIM[cycid] && CYC.CYCTIM[cycid] <= TMAX_RELTIM)$
576 $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cyctim", CYC.CYCTIM[cycid], cycid, "CRE_CYC")$$END$
577 $END$
578
579$ // (0 <= cycphs && cycphs <= TMAX_RELTIM)‚Å‚È‚¢ê‡iE_PARj
580 $IF !(0 <= CYC.CYCPHS[cycid] && CYC.CYCPHS[cycid] <= TMAX_RELTIM)$
581 $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycphs", CYC.CYCPHS[cycid], cycid, "CRE_CYC")$$END$
582 $END$
583
584$ // ŒxFcycatr‚ÉTA_STA‚ªÝ’肳‚ê‚Ä‚¢‚āC(cycphs == 0)‚̏ꍇ
585 $IF (CYC.CYCATR[cycid] & TA_STA) != 0 && CYC.CYCPHS[cycid] == 0$
586 $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$
587 $END$
588
589$ // ŽüŠúƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
590 $TAB${ ($CYC.CYCATR[cycid]$), (intptr_t)($CYC.EXINF[cycid]$), ($CYC.CYCHDR[cycid]$), ($CYC.CYCTIM[cycid]$), ($CYC.CYCPHS[cycid]$) }
591 $END$$NL$
592 };$NL$
593 $NL$
594
595$ // ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN
596 CYCCB _kernel_cyccb_table[TNUM_CYCID];$NL$
597$ELSE$
598 TOPPERS_EMPTY_LABEL(const CYCINIB, _kernel_cycinib_table);$NL$
599 TOPPERS_EMPTY_LABEL(CYCCB, _kernel_cyccb_table);$NL$
600$END$$NL$
601
602$
603$ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰
604$
605/*$NL$
606$SPC$* Alarm Handler Functions$NL$
607$SPC$*/$NL$
608$NL$
609
610$ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ID”ԍ†‚̍őå’l
611const ID _kernel_tmax_almid = (TMIN_ALMID + TNUM_ALMID - 1);$NL$
612$NL$
613
614$ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̐¶¬
615$IF LENGTH(ALM.ID_LIST)$
616 const ALMINIB _kernel_alminib_table[TNUM_ALMID] = {$NL$
617 $JOINEACH almid ALM.ID_LIST ",\n"$
618$ // almatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
619 $IF ALM.ALMATR[almid] != 0$
620 $ERROR ALM.TEXT_LINE[almid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "almatr", ALM.ALMATR[almid], almid, "CRE_ALM")$$END$
621 $END$
622
623$ // ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
624 $TAB${ ($ALM.ALMATR[almid]$), (intptr_t)($ALM.EXINF[almid]$), ($ALM.ALMHDR[almid]$) }
625 $END$$NL$
626 };$NL$
627 $NL$
628
629$ // ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN
630 ALMCB _kernel_almcb_table[TNUM_ALMID];$NL$
631$ELSE$
632 TOPPERS_EMPTY_LABEL(const ALMINIB, _kernel_alminib_table);$NL$
633 TOPPERS_EMPTY_LABEL(ALMCB, _kernel_almcb_table);$NL$
634$END$$NL$
635
636$
637$ ƒI[ƒoƒ‰ƒ“ƒnƒ“ƒhƒ‰
638$
639/*$NL$
640$SPC$* Overrun Handler Functions$NL$
641$SPC$*/$NL$
642$NL$
643
644$ // Ã“IAPIuDEF_OVRv‚ª•¡”‚ ‚éiE_OBJj
645$IF LENGTH(OVR.ORDER_LIST) > 1$
646 $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_OVR")$$END$
647$END$
648
649$ ƒI[ƒoƒ‰ƒ“ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̐¶¬
650#ifdef TOPPERS_SUPPORT_OVRHDR$NL$$NL$
651const OVRINIB _kernel_ovrinib = {$NL$
652$IF LENGTH(OVR.ORDER_LIST)$
653 $TAB$($OVR.OVRATR[1]$), ($OVR.OVRHDR[1]$)$NL$
654$ELSE$
655 $TAB$TA_NULL, NULL$NL$
656$END$
657};$NL$$NL$
658#endif /* TOPPERS_SUPPORT_OVRHDR */$NL$
659$NL$
660
661$
662$ Š„ž‚ÝŠÇ—‹@”\
663$
664/*$NL$
665$SPC$* Interrupt Management Functions$NL$
666$SPC$*/$NL$
667$NL$
668
669$ Š„ž‚ݔԍ†‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚Ì•ÏŠ·ƒe[ƒuƒ‹‚̍쐬
670$IF LENGTH(INTNO_ATTISR_VALID) != LENGTH(INHNO_ATTISR_VALID)$
671 $ERROR$length of `INTNO_ATTISR_VALID' is different from length of `INHNO_ATTISR_VALID'$END$
672$END$
673$i = 0$
674$FOREACH intno INTNO_ATTISR_VALID$
675 $inhno = AT(INHNO_ATTISR_VALID, i)$
676 $INHNO[intno] = inhno$
677 $INTNO[inhno] = intno$
678 $i = i + 1$
679$END$
680
681$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
682$i = 0$
683$FOREACH intno INT.ORDER_LIST$
684$ // intno‚ªCFG_INT‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
685 $IF !LENGTH(FIND(INTNO_CFGINT_VALID, INT.INTNO[intno]))$
686 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
687 $END$
688
689$ // intno‚ªCFG_INT‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
690 $j = 0$
691 $FOREACH intno2 INT.ORDER_LIST$
692 $IF INT.INTNO[intno] == INT.INTNO[intno2] && j < i$
693 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
694 $END$
695 $j = j + 1$
696 $END$
697
698$ // intatr‚ªimTA_ENAINTnbmTA_EDGEnj‚Å‚È‚¢ê‡iE_RSATRj
699 $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|TARGET_INTATR)) != 0$
700 $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$
701 $END$
702
703$ // intpri‚ªCFG_INT‚ɑ΂·‚銄ž‚Ý—Dæ“x‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
704 $IF !LENGTH(FIND(INTPRI_CFGINT_VALID, INT.INTPRI[intno]))$
705 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intpri", INT.INTPRI[intno], "CFG_INT")$$END$
706 $END$
707
708$ // ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚éintno‚ɑ΂µ‚āCintpri‚ÉTMIN_INTPRI
709$ // ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ꂽê‡iE_OBJj
710 $IF LENGTH(FIND(INTNO_FIX_KERNEL, intno))$
711 $IF INT.INTPRI[intno] < TMIN_INTPRI$
712 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' must not have higher priority than %3%"), "intno", INT.INTNO[intno], "TMIN_INTPRI")$$END$
713 $END$
714 $END$
715
716$ // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚éintno‚ɑ΂µ‚āCintpri‚ÉTMIN_INTPRI
717$ // ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ê‚È‚©‚Á‚½ê‡iE_OBJj
718 $IF LENGTH(FIND(INTNO_FIX_NONKERNEL, intno))$
719 $IF INT.INTPRI[intno] >= TMIN_INTPRI$
720 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' must have higher priority than %3%"), "intno", INT.INTNO[intno], "TMIN_INTPRI")$$END$
721 $END$
722 $END$
723 $i = i + 1$
724$END$
725
726$ Š„ž‚݃nƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
727$i = 0$
728$FOREACH inhno INH.ORDER_LIST$
729$ // inhno‚ªDEF_INH‚ɑ΂·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
730 $IF !LENGTH(FIND(INHNO_DEFINH_VALID, INH.INHNO[inhno]))$
731 $ERROR INH.TEXT_LINE[inhno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
732 $END$
733
734$ // inhno‚ªDEF_INH‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
735 $j = 0$
736 $FOREACH inhno2 INH.ORDER_LIST$
737 $IF INH.INHNO[inhno] == INH.INHNO[inhno2] && j < i$
738 $ERROR INH.TEXT_LINE[inhno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
739 $END$
740 $j = j + 1$
741 $END$
742
743$ // inhatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
744 $IF (INH.INHATR[inhno] & ~TARGET_INHATR) != 0$
745 $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$
746 $END$
747
748$ // ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚éinhno‚ɑ΂µ‚āCinhatr‚ÉTA_NONKERNEL
749$ //@‚ªŽw’肳‚ê‚Ä‚¢‚éê‡iE_RSATRj
750 $IF LENGTH(FIND(INHNO_FIX_KERNEL, inhno))$
751 $IF (INH.INHATR[inhno] & TA_NONKERNEL) != 0$
752 $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("%1% `%2%\' must not be non-kernel interrupt"), "inhno", INH.INHNO[inhno])$$END$
753 $END$
754 $END$
755
756$ // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚éinhno‚ɑ΂µ‚āCinhatr‚ÉTA_NONKERNEL
757$ // ‚ªŽw’肳‚ê‚Ä‚¢‚È‚¢ê‡iE_RSATRj
758 $IF LENGTH(FIND(INHNO_FIX_NONKERNEL, inhno))$
759 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
760 $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("%1% `%2%\' must be non-kernel interrupt"), "inhno", INH.INHNO[inhno])$$END$
761 $END$
762 $END$
763
764 $IF LENGTH(INTNO[INH.INHNO[inhno]])$
765 $intno = INTNO[INH.INHNO[inhno]]$
766$ // inhno‚ɑΉž‚·‚éintno‚ɑ΂·‚éCFG_INT‚ª‚È‚¢ê‡iE_OBJj
767 $IF !LENGTH(INT.INTNO[intno])$
768 $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$
769 $ELSE$
770 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
771$ // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚炸Cinhno‚ɑΉž
772$ // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
773$ // TMIN_INTPRI‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
774 $IF INT.INTPRI[intno] < TMIN_INTPRI$
775 $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$
776 $END$
777 $ELSE$
778$ // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚èCinhno‚ɑΉž
779$ // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
780$ // TMIN_INTPRIˆÈã‚Å‚ ‚éê‡iE_OBJj
781 $IF INT.INTPRI[intno] >= TMIN_INTPRI$
782 $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$
783 $END$
784 $END$
785 $END$
786 $END$
787 $i = i + 1$
788$END$
789
790$ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“iISRj‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN‚ÆŠ„ž‚݃nƒ“ƒhƒ‰‚̐¶¬
791$FOREACH order ISR.ORDER_LIST$
792$ // isratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
793 $IF (ISR.ISRATR[order] & ~TARGET_ISRATR) != 0$
794 $ERROR ISR.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isratr", ISR.ISRATR[order], "ATT_ISR")$$END$
795 $END$
796
797$ // intno‚ªATT_ISR‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
798 $IF !LENGTH(FIND(INTNO_ATTISR_VALID, ISR.INTNO[order]))$
799 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", ISR.INTNO[order], "ATT_ISR")$$END$
800 $END$
801
802$ // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)‚Å‚È‚¢ê‡iE_PARj
803 $IF !(TMIN_ISRPRI <= ISR.ISRPRI[order] && ISR.ISRPRI[order] <= TMAX_ISRPRI)$
804 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isrpri", ISR.ISRPRI[order], "ATT_ISR")$$END$
805 $END$
806$END$
807
808$FOREACH intno INTNO_ATTISR_VALID$
809 $inhno = INHNO[intno]$
810
811$ // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚̃ŠƒXƒg‚̍쐬
812 $isr_order_list = {}$
813 $FOREACH order ISR.ORDER_LIST$
814 $IF ISR.INTNO[order] == intno$
815 $isr_order_list = APPEND(isr_order_list, order)$
816 $order_for_error = order$
817 $END$
818 $END$
819
820$ // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚ª‘¶Ý‚·‚éê‡
821 $IF LENGTH(isr_order_list) > 0$
822$ // intno‚ɑΉž‚·‚éinhno‚ɑ΂µ‚ÄDEF_INH‚ª‚ ‚éê‡iE_OBJj
823 $IF LENGTH(INH.INHNO[inhno])$
824 $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$
825 $END$
826
827$ // intno‚ɑ΂·‚éCFG_INT‚ª‚È‚¢ê‡iE_OBJj
828 $IF !LENGTH(INT.INTNO[intno])$
829 $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$
830 $ELSE$
831$ // intno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ªTMIN_INTPRI
832$ // ‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
833 $IF INT.INTPRI[intno] < TMIN_INTPRI$
834 $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$
835 $END$
836 $END$
837
838$ // DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> } );
839 $INH.INHNO[inhno] = inhno$
840 $INH.INHATR[inhno] = VALUE("TA_NULL", 0)$
841 $INH.INTHDR[inhno] = CONCAT("_kernel_inthdr_", intno)$
842 $INH.ORDER_LIST = APPEND(INH.ORDER_LIST, inhno)$
843
844$ // ISR—p‚ÌŠ„ž‚݃nƒ“ƒhƒ‰
845 void$NL$
846 _kernel_inthdr_$intno$(void)$NL$
847 {$NL$
848 $IF LENGTH(isr_order_list) > 1$
849 $TAB$PRI saved_ipm;$NL$
850 $NL$
851 $TAB$i_begin_int($intno$);$NL$
852 $TAB$saved_ipm = i_get_ipm();$NL$
853 $ELSE$
854 $TAB$i_begin_int($intno$);$NL$
855 $END$
856$ // ISR‚ð—Dæ“x‡‚ɌĂяo‚·
857 $JOINEACH order SORT(isr_order_list, "ISR.ISRPRI") "\tif (i_sense_lock()) {\n\t\ti_unlock_cpu();\n\t}\n\ti_set_ipm(saved_ipm);\n"$
858 $TAB$LOG_ISR_ENTER($intno$);$NL$
859 $TAB$((ISR)($ISR.ISR[order]$))((intptr_t)($ISR.EXINF[order]$));$NL$
860 $TAB$LOG_ISR_LEAVE($intno$);$NL$
861 $END$
862 $TAB$i_end_int($intno$);$NL$
863 }$NL$
864 $END$
865$END$
866$NL$
867
868$
869$ Š„ž‚ÝŠÇ—‹@”\‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
870$
871$ Š„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
872$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINIB_TABLE,0)$
873
874$ Š„ž‚݃nƒ“ƒhƒ‰”
875#define TNUM_INHNO $LENGTH(INH.ORDER_LIST)$$NL$
876const uint_t _kernel_tnum_inhno = TNUM_INHNO;$NL$
877$NL$
878$FOREACH inhno INH.ORDER_LIST$
879 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
880 INTHDR_ENTRY($INH.INHNO[inhno]$, $+INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)$NL$
881 $END$
882$END$
883$NL$
884
885$ Š„ž‚݃nƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
886$IF LENGTH(INH.ORDER_LIST)$
887 const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {$NL$
888 $JOINEACH inhno INH.ORDER_LIST ",\n"$
889 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
890 $TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)(INT_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)) }
891 $ELSE$
892 $TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)($INH.INTHDR[inhno]$) }
893 $END$
894 $END$$NL$
895 };$NL$
896$ELSE$
897 TOPPERS_EMPTY_LABEL(const INHINIB, _kernel_inhinib_table);$NL$
898$END$$NL$
899$END$
900
901$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
902$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINTB_TABLE,0)$
903
904$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“”
905#define TNUM_INTNO $LENGTH(INT.ORDER_LIST)$$NL$
906const uint_t _kernel_tnum_intno = TNUM_INTNO;$NL$
907$NL$
908
909$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‰Šú‰»ƒe[ƒuƒ‹
910$IF LENGTH(INT.ORDER_LIST)$
911 const INTINIB _kernel_intinib_table[TNUM_INTNO] = {$NL$
912 $JOINEACH intno INT.ORDER_LIST ",\n"$
913 $TAB${ ($INT.INTNO[intno]$), ($INT.INTATR[intno]$), ($INT.INTPRI[intno]$) }
914 $END$$NL$
915 };$NL$
916$ELSE$
917 TOPPERS_EMPTY_LABEL(const INTINIB, _kernel_intinib_table);$NL$
918$END$$NL$
919$END$
920
921$
922$ CPU—áŠOŠÇ—‹@”\
923$
924/*$NL$
925$SPC$* CPU Exception Management Functions$NL$
926$SPC$*/$NL$
927$NL$
928
929$ CPU—áŠOƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
930$i = 0$
931$FOREACH excno EXC.ORDER_LIST$
932$ // excno‚ªDEF_EXC‚ɑ΂·‚éCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
933 $IF !LENGTH(FIND(EXCNO_DEFEXC_VALID, EXC.EXCNO[excno]))$
934 $ERROR EXC.TEXT_LINE[excno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
935 $END$
936
937$ // excno‚ªDEF_EXC‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
938 $j = 0$
939 $FOREACH excno2 EXC.ORDER_LIST$
940 $IF EXC.EXCNO[excno] == EXC.EXCNO[excno2] && j < i$
941 $ERROR EXC.TEXT_LINE[excno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
942 $END$
943 $j = j + 1$
944 $END$
945
946$ // excatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
947 $IF (EXC.EXCATR[excno] & ~TARGET_EXCATR) != 0$
948 $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$
949 $END$
950 $i = i + 1$
951$END$
952
953$ CPU—áŠOƒnƒ“ƒhƒ‰‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
954$IF !OMIT_INITIALIZE_EXCEPTION$
955
956$ CPU—áŠOƒnƒ“ƒhƒ‰”
957#define TNUM_EXCNO $LENGTH(EXC.ORDER_LIST)$$NL$
958const uint_t _kernel_tnum_excno = TNUM_EXCNO;$NL$
959$NL$
960$FOREACH excno EXC.ORDER_LIST$
961 EXCHDR_ENTRY($EXC.EXCNO[excno]$, $+EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)$NL$
962$END$
963$NL$
964
965$ CPU—áŠOƒnƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
966$IF LENGTH(EXC.ORDER_LIST)$
967 const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$
968 $JOINEACH excno EXC.ORDER_LIST ",\n"$
969 $TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)(EXC_ENTRY($EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)) }
970 $END$$NL$
971 };$NL$
972$ELSE$
973 TOPPERS_EMPTY_LABEL(const EXCINIB, _kernel_excinib_table);$NL$
974$END$$NL$
975$END$
976
977$
978$ ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
979$
980/*$NL$
981$SPC$* Stack Area for Non-task Context$NL$
982$SPC$*/$NL$
983$NL$
984
985$IF !LENGTH(ICS.ORDER_LIST)$
986$ // DEF_ICS‚ª‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚̐ݒè
987 #ifdef DEFAULT_ISTK$NL$
988 $NL$
989 #define TOPPERS_ISTKSZ DEFAULT_ISTKSZ$NL$
990 #define TOPPERS_ISTK DEFAULT_ISTK$NL$
991 $NL$
992 #else /* DEAULT_ISTK */$NL$
993 $NL$
994 static STK_T _kernel_istack[COUNT_STK_T(DEFAULT_ISTKSZ)];$NL$
995 #define TOPPERS_ISTKSZ ROUND_STK_T(DEFAULT_ISTKSZ)$NL$
996 #define TOPPERS_ISTK _kernel_istack$NL$
997 $NL$
998 #endif /* DEAULT_ISTK */$NL$
999$ELSE$
1000
1001$ // Ã“IAPIuDEF_ICSv‚ª•¡”‚ ‚éiE_OBJj
1002 $IF LENGTH(ICS.ORDER_LIST) > 1$
1003 $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_ICS")$$END$
1004 $END$
1005
1006$ // istksz‚ªƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
1007 $IF !EQ(ICS.ISTK[1], "NULL") && CHECK_STKSZ_ALIGN
1008 && (ICS.ISTKSZ[1] & (CHECK_STKSZ_ALIGN - 1))$
1009 $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% `%2%\' in %3% is not aligned"), "istksz", ICS.ISTKSZ[1], "DEF_ICS")$$END$
1010 $END$
1011
1012 $IF EQ(ICS.ISTK[1], "NULL")$
1013$ // ƒXƒ^ƒbƒN—̈æ‚ÌŽ©“®Š„•t‚¯
1014 static STK_T _kernel_istack[COUNT_STK_T($ICS.ISTKSZ[1]$)];$NL$
1015 #define TOPPERS_ISTKSZ ROUND_STK_T($ICS.ISTKSZ[1]$)$NL$
1016 #define TOPPERS_ISTK _kernel_istack$NL$
1017 $ELSE$
1018 #define TOPPERS_ISTKSZ ($ICS.ISTKSZ[1]$)$NL$
1019 #define TOPPERS_ISTK ($ICS.ISTK[1]$)$NL$
1020 $END$
1021$END$
1022$NL$
1023
1024$ ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
1025const SIZE _kernel_istksz = TOPPERS_ISTKSZ;$NL$
1026STK_T *const _kernel_istk = TOPPERS_ISTK;$NL$
1027$NL$
1028#ifdef TOPPERS_ISTKPT$NL$
1029STK_T *const _kernel_istkpt = TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ);$NL$
1030#endif /* TOPPERS_ISTKPT */$NL$
1031$NL$
1032
1033$
1034$ ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—
1035$
1036/*$NL$
1037$SPC$* Time Event Management$NL$
1038$SPC$*/$NL$
1039$NL$
1040TMEVTN _kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];$NL$
1041$NL$
1042
1043$
1044$ Šeƒ‚ƒWƒ…
1045[ƒ‹‚̏‰Šú‰»ŠÖ”
1046$
1047/*$NL$
1048$SPC$* Module Initialization Function$NL$
1049$SPC$*/$NL$
1050$NL$
1051void$NL$
1052_kernel_initialize_object(void)$NL$
1053{$NL$
1054$TAB$_kernel_initialize_task();$NL$
1055$IF LENGTH(SEM.ID_LIST)$ _kernel_initialize_semaphore();$NL$$END$
1056$IF LENGTH(FLG.ID_LIST)$ _kernel_initialize_eventflag();$NL$$END$
1057$IF LENGTH(DTQ.ID_LIST)$ _kernel_initialize_dataqueue();$NL$$END$
1058$IF LENGTH(PDQ.ID_LIST)$ _kernel_initialize_pridataq();$NL$$END$
1059$IF LENGTH(MBX.ID_LIST)$ _kernel_initialize_mailbox();$NL$$END$
1060$IF LENGTH(MPF.ID_LIST)$ _kernel_initialize_mempfix();$NL$$END$
1061$IF LENGTH(CYC.ID_LIST)$ _kernel_initialize_cyclic();$NL$$END$
1062$IF LENGTH(ALM.ID_LIST)$ _kernel_initialize_alarm();$NL$$END$
1063#ifdef TOPPERS_SUPPORT_OVRHDR$NL$
1064$TAB$_kernel_initialize_overrun();$NL$
1065#endif /* TOPPERS_SUPPORT_OVRHDR */$NL$
1066$TAB$_kernel_initialize_interrupt();$NL$
1067$TAB$_kernel_initialize_exception();$NL$
1068}$NL$
1069$NL$
1070
1071$
1072$ ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
1073$
1074/*$NL$
1075$SPC$* Initialization Routine$NL$
1076$SPC$*/$NL$
1077$NL$
1078void$NL$
1079_kernel_call_inirtn(void)$NL$
1080{$NL$
1081$FOREACH order INI.ORDER_LIST$
1082$ // iniatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
1083 $IF INI.INIATR[order] != 0$
1084 $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$
1085 $END$
1086 $TAB$((INIRTN)($INI.INIRTN[order]$))((intptr_t)($INI.EXINF[order]$));$NL$
1087$END$
1088}$NL$
1089$NL$
1090
1091$
1092$ I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
1093$
1094/*$NL$
1095$SPC$* Termination Routine$NL$
1096$SPC$*/$NL$
1097$NL$
1098void$NL$
1099_kernel_call_terrtn(void)$NL$
1100{$NL$
1101$FOREACH rorder TER.RORDER_LIST$
1102$ // teratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
1103 $IF TER.TERATR[rorder] != 0$
1104 $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$
1105 $END$
1106 $TAB$((TERRTN)($TER.TERRTN[rorder]$))((intptr_t)($TER.EXINF[rorder]$));$NL$
1107$END$
1108}$NL$
1109$NL$
Note: See TracBrowser for help on using the repository browser.