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