source: asp_ewarm/asp-1.7.0/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: 35.4 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$ Š„ž‚ÝŠÇ—‹@”\
638$
639/*$NL$
640$SPC$* Interrupt Management Functions$NL$
641$SPC$*/$NL$
642$NL$
643
644$ Š„ž‚ݔԍ†‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚Ì•ÏŠ·ƒe[ƒuƒ‹‚̍쐬
645$IF LENGTH(INTNO_ATTISR_VALID) != LENGTH(INHNO_ATTISR_VALID)$
646 $ERROR$length of `INTNO_ATTISR_VALID' is different from length of `INHNO_ATTISR_VALID'$END$
647$END$
648$i = 0$
649$FOREACH intno INTNO_ATTISR_VALID$
650 $inhno = AT(INHNO_ATTISR_VALID, i)$
651 $INHNO[intno] = inhno$
652 $INTNO[inhno] = intno$
653 $i = i + 1$
654$END$
655
656$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
657$i = 0$
658$FOREACH intno INT.ORDER_LIST$
659$ // intno‚ªCFG_INT‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
660 $IF !LENGTH(FIND(INTNO_CFGINT_VALID, INT.INTNO[intno]))$
661 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
662 $END$
663
664$ // intno‚ªCFG_INT‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
665 $j = 0$
666 $FOREACH intno2 INT.ORDER_LIST$
667 $IF INT.INTNO[intno] == INT.INTNO[intno2] && j < i$
668 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
669 $END$
670 $j = j + 1$
671 $END$
672
673$ // intatr‚ªimTA_ENAINTnbmTA_EDGEnj‚Å‚È‚¢ê‡iE_RSATRj
674 $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|TARGET_INTATR)) != 0$
675 $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$
676 $END$
677
678$ // intpri‚ªCFG_INT‚ɑ΂·‚銄ž‚Ý—Dæ“x‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
679 $IF !LENGTH(FIND(INTPRI_CFGINT_VALID, INT.INTPRI[intno]))$
680 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intpri", INT.INTPRI[intno], "CFG_INT")$$END$
681 $END$
682
683$ // ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚éintno‚ɑ΂µ‚āCintpri‚ÉTMIN_INTPRI
684$ // ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ꂽê‡iE_OBJj
685 $IF LENGTH(FIND(INTNO_FIX_KERNEL, intno))$
686 $IF INT.INTPRI[intno] < TMIN_INTPRI$
687 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' must not have higher priority than %3%"), "intno", INT.INTNO[intno], "TMIN_INTPRI")$$END$
688 $END$
689 $END$
690
691$ // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚éintno‚ɑ΂µ‚āCintpri‚ÉTMIN_INTPRI
692$ // ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ê‚È‚©‚Á‚½ê‡iE_OBJj
693 $IF LENGTH(FIND(INTNO_FIX_NONKERNEL, intno))$
694 $IF INT.INTPRI[intno] >= TMIN_INTPRI$
695 $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' must have higher priority than %3%"), "intno", INT.INTNO[intno], "TMIN_INTPRI")$$END$
696 $END$
697 $END$
698 $i = i + 1$
699$END$
700
701$ Š„ž‚݃nƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
702$i = 0$
703$FOREACH inhno INH.ORDER_LIST$
704$ // inhno‚ªDEF_INH‚ɑ΂·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
705 $IF !LENGTH(FIND(INHNO_DEFINH_VALID, INH.INHNO[inhno]))$
706 $ERROR INH.TEXT_LINE[inhno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
707 $END$
708
709$ // inhno‚ªDEF_INH‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
710 $j = 0$
711 $FOREACH inhno2 INH.ORDER_LIST$
712 $IF INH.INHNO[inhno] == INH.INHNO[inhno2] && j < i$
713 $ERROR INH.TEXT_LINE[inhno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
714 $END$
715 $j = j + 1$
716 $END$
717
718$ // inhatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
719 $IF (INH.INHATR[inhno] & ~TARGET_INHATR) != 0$
720 $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$
721 $END$
722
723$ // ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚éinhno‚ɑ΂µ‚āCinhatr‚ÉTA_NONKERNEL
724$ //@‚ªŽw’肳‚ê‚Ä‚¢‚éê‡iE_RSATRj
725 $IF LENGTH(FIND(INHNO_FIX_KERNEL, inhno))$
726 $IF (INH.INHATR[inhno] & TA_NONKERNEL) != 0$
727 $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("%1% `%2%\' must not be non-kernel interrupt"), "inhno", INH.INHNO[inhno])$$END$
728 $END$
729 $END$
730
731$ // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚éinhno‚ɑ΂µ‚āCinhatr‚ÉTA_NONKERNEL
732$ // ‚ªŽw’肳‚ê‚Ä‚¢‚È‚¢ê‡iE_RSATRj
733 $IF LENGTH(FIND(INHNO_FIX_NONKERNEL, inhno))$
734 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
735 $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("%1% `%2%\' must be non-kernel interrupt"), "inhno", INH.INHNO[inhno])$$END$
736 $END$
737 $END$
738
739 $IF LENGTH(INTNO[INH.INHNO[inhno]])$
740 $intno = INTNO[INH.INHNO[inhno]]$
741$ // inhno‚ɑΉž‚·‚éintno‚ɑ΂·‚éCFG_INT‚ª‚È‚¢ê‡iE_OBJj
742 $IF !LENGTH(INT.INTNO[intno])$
743 $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$
744 $ELSE$
745 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
746$ // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚炸Cinhno‚ɑΉž
747$ // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
748$ // TMIN_INTPRI‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
749 $IF INT.INTPRI[intno] < TMIN_INTPRI$
750 $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$
751 $END$
752 $ELSE$
753$ // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚èCinhno‚ɑΉž
754$ // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
755$ // TMIN_INTPRIˆÈã‚Å‚ ‚éê‡iE_OBJj
756 $IF INT.INTPRI[intno] >= TMIN_INTPRI$
757 $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$
758 $END$
759 $END$
760 $END$
761 $END$
762 $i = i + 1$
763$END$
764
765$ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“iISRj‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN‚ÆŠ„ž‚݃nƒ“ƒhƒ‰‚̐¶¬
766$FOREACH order ISR.ORDER_LIST$
767$ // isratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
768 $IF (ISR.ISRATR[order] & ~TARGET_ISRATR) != 0$
769 $ERROR ISR.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isratr", ISR.ISRATR[order], "ATT_ISR")$$END$
770 $END$
771
772$ // intno‚ªATT_ISR‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
773 $IF !LENGTH(FIND(INTNO_ATTISR_VALID, ISR.INTNO[order]))$
774 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", ISR.INTNO[order], "ATT_ISR")$$END$
775 $END$
776
777$ // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)‚Å‚È‚¢ê‡iE_PARj
778 $IF !(TMIN_ISRPRI <= ISR.ISRPRI[order] && ISR.ISRPRI[order] <= TMAX_ISRPRI)$
779 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isrpri", ISR.ISRPRI[order], "ATT_ISR")$$END$
780 $END$
781$END$
782
783$FOREACH intno INTNO_ATTISR_VALID$
784 $inhno = INHNO[intno]$
785
786$ // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚̃ŠƒXƒg‚̍쐬
787 $isr_order_list = {}$
788 $FOREACH order ISR.ORDER_LIST$
789 $IF ISR.INTNO[order] == intno$
790 $isr_order_list = APPEND(isr_order_list, order)$
791 $order_for_error = order$
792 $END$
793 $END$
794
795$ // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚ª‘¶Ý‚·‚éê‡
796 $IF LENGTH(isr_order_list) > 0$
797$ // intno‚ɑΉž‚·‚éinhno‚ɑ΂µ‚ÄDEF_INH‚ª‚ ‚éê‡iE_OBJj
798 $IF LENGTH(INH.INHNO[inhno])$
799 $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$
800 $END$
801
802$ // intno‚ɑ΂·‚éCFG_INT‚ª‚È‚¢ê‡iE_OBJj
803 $IF !LENGTH(INT.INTNO[intno])$
804 $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$
805 $ELSE$
806$ // intno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ªTMIN_INTPRI
807$ // ‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
808 $IF INT.INTPRI[intno] < TMIN_INTPRI$
809 $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$
810 $END$
811 $END$
812
813$ // DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> } );
814 $INH.INHNO[inhno] = inhno$
815 $INH.INHATR[inhno] = VALUE("TA_NULL", 0)$
816 $INH.INTHDR[inhno] = CONCAT("_kernel_inthdr_", intno)$
817 $INH.ORDER_LIST = APPEND(INH.ORDER_LIST, inhno)$
818
819$ // ISR—p‚ÌŠ„ž‚݃nƒ“ƒhƒ‰
820 void$NL$
821 _kernel_inthdr_$intno$(void)$NL$
822 {$NL$
823 $IF LENGTH(isr_order_list) > 1$
824 $TAB$PRI saved_ipm;$NL$
825 $NL$
826 $TAB$i_begin_int($intno$);$NL$
827 $TAB$saved_ipm = i_get_ipm();$NL$
828 $ELSE$
829 $TAB$i_begin_int($intno$);$NL$
830 $END$
831$ // ISR‚ð—Dæ“x‡‚ɌĂяo‚·
832 $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"$
833 $TAB$LOG_ISR_ENTER($intno$);$NL$
834 $TAB$((ISR)($ISR.ISR[order]$))((intptr_t)($ISR.EXINF[order]$));$NL$
835 $TAB$LOG_ISR_LEAVE($intno$);$NL$
836 $END$
837 $TAB$i_end_int($intno$);$NL$
838 }$NL$
839 $END$
840$END$
841$NL$
842
843$
844$ Š„ž‚ÝŠÇ—‹@”\‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
845$
846$ Š„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
847$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINIB_TABLE,0)$
848
849$ Š„ž‚݃nƒ“ƒhƒ‰”
850#define TNUM_INHNO $LENGTH(INH.ORDER_LIST)$$NL$
851const uint_t _kernel_tnum_inhno = TNUM_INHNO;$NL$
852$NL$
853$FOREACH inhno INH.ORDER_LIST$
854 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
855 INTHDR_ENTRY($INH.INHNO[inhno]$, $+INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)$NL$
856 $END$
857$END$
858$NL$
859
860$ Š„ž‚݃nƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
861$IF LENGTH(INH.ORDER_LIST)$
862 const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {$NL$
863 $JOINEACH inhno INH.ORDER_LIST ",\n"$
864 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
865 $TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)(INT_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$)) }
866 $ELSE$
867 $TAB${ ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$), (FP)($INH.INTHDR[inhno]$) }
868 $END$
869 $END$$NL$
870 };$NL$
871$ELSE$
872 TOPPERS_EMPTY_LABEL(const INHINIB, _kernel_inhinib_table);$NL$
873$END$$NL$
874$END$
875
876$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
877$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINTB_TABLE,0)$
878
879$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“”
880#define TNUM_INTNO $LENGTH(INT.ORDER_LIST)$$NL$
881const uint_t _kernel_tnum_intno = TNUM_INTNO;$NL$
882$NL$
883
884$ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‰Šú‰»ƒe[ƒuƒ‹
885$IF LENGTH(INT.ORDER_LIST)$
886 const INTINIB _kernel_intinib_table[TNUM_INTNO] = {$NL$
887 $JOINEACH intno INT.ORDER_LIST ",\n"$
888 $TAB${ ($INT.INTNO[intno]$), ($INT.INTATR[intno]$), ($INT.INTPRI[intno]$) }
889 $END$$NL$
890 };$NL$
891$ELSE$
892 TOPPERS_EMPTY_LABEL(const INTINIB, _kernel_intinib_table);$NL$
893$END$$NL$
894$END$
895
896$
897$ CPU—áŠOŠÇ—‹@”\
898$
899/*$NL$
900$SPC$* CPU Exception Management Functions$NL$
901$SPC$*/$NL$
902$NL$
903
904$ CPU—áŠOƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
905$i = 0$
906$FOREACH excno EXC.ORDER_LIST$
907$ // excno‚ªDEF_EXC‚ɑ΂·‚éCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
908 $IF !LENGTH(FIND(EXCNO_DEFEXC_VALID, EXC.EXCNO[excno]))$
909 $ERROR EXC.TEXT_LINE[excno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
910 $END$
911
912$ // excno‚ªDEF_EXC‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
913 $j = 0$
914 $FOREACH excno2 EXC.ORDER_LIST$
915 $IF EXC.EXCNO[excno] == EXC.EXCNO[excno2] && j < i$
916 $ERROR EXC.TEXT_LINE[excno]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
917 $END$
918 $j = j + 1$
919 $END$
920
921$ // excatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
922 $IF (EXC.EXCATR[excno] & ~TARGET_EXCATR) != 0$
923 $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$
924 $END$
925 $i = i + 1$
926$END$
927
928$ CPU—áŠOƒnƒ“ƒhƒ‰‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
929$IF !OMIT_INITIALIZE_EXCEPTION$
930
931$ CPU—áŠOƒnƒ“ƒhƒ‰”
932#define TNUM_EXCNO $LENGTH(EXC.ORDER_LIST)$$NL$
933const uint_t _kernel_tnum_excno = TNUM_EXCNO;$NL$
934$NL$
935$FOREACH excno EXC.ORDER_LIST$
936 EXCHDR_ENTRY($EXC.EXCNO[excno]$, $+EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)$NL$
937$END$
938$NL$
939
940$ CPU—áŠOƒnƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
941$IF LENGTH(EXC.ORDER_LIST)$
942 const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$
943 $JOINEACH excno EXC.ORDER_LIST ",\n"$
944 $TAB${ ($EXC.EXCNO[excno]$), ($EXC.EXCATR[excno]$), (FP)(EXC_ENTRY($EXC.EXCNO[excno]$, $EXC.EXCHDR[excno]$)) }
945 $END$$NL$
946 };$NL$
947$ELSE$
948 TOPPERS_EMPTY_LABEL(const EXCINIB, _kernel_excinib_table);$NL$
949$END$$NL$
950$END$
951
952$
953$ ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
954$
955/*$NL$
956$SPC$* Stack Area for Non-task Context$NL$
957$SPC$*/$NL$
958$NL$
959
960$IF !LENGTH(ICS.ORDER_LIST)$
961$ // DEF_ICS‚ª‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚̐ݒè
962 #ifdef DEFAULT_ISTK$NL$
963 $NL$
964 #define TOPPERS_ISTKSZ DEFAULT_ISTKSZ$NL$
965 #define TOPPERS_ISTK DEFAULT_ISTK$NL$
966 $NL$
967 #else /* DEAULT_ISTK */$NL$
968 $NL$
969 static STK_T _kernel_istack[COUNT_STK_T(DEFAULT_ISTKSZ)];$NL$
970 #define TOPPERS_ISTKSZ ROUND_STK_T(DEFAULT_ISTKSZ)$NL$
971 #define TOPPERS_ISTK _kernel_istack$NL$
972 $NL$
973 #endif /* DEAULT_ISTK */$NL$
974$ELSE$
975
976$ // Ã“IAPIuDEF_ICSv‚ª•¡”‚ ‚éiE_OBJj
977 $IF LENGTH(ICS.ORDER_LIST) > 1$
978 $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_ICS")$$END$
979 $END$
980
981$ // istksz‚ªƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
982 $IF !EQ(ICS.ISTK[1], "NULL") && CHECK_STKSZ_ALIGN
983 && (ICS.ISTKSZ[1] & (CHECK_STKSZ_ALIGN - 1))$
984 $ERROR ICS.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% `%2%\' in %3% is not aligned"), "istksz", ICS.ISTKSZ[1], "DEF_ICS")$$END$
985 $END$
986
987 $IF EQ(ICS.ISTK[1], "NULL")$
988$ // ƒXƒ^ƒbƒN—̈æ‚ÌŽ©“®Š„•t‚¯
989 static STK_T _kernel_istack[COUNT_STK_T($ICS.ISTKSZ[1]$)];$NL$
990 #define TOPPERS_ISTKSZ ROUND_STK_T($ICS.ISTKSZ[1]$)$NL$
991 #define TOPPERS_ISTK _kernel_istack$NL$
992 $ELSE$
993 #define TOPPERS_ISTKSZ ($ICS.ISTKSZ[1]$)$NL$
994 #define TOPPERS_ISTK ($ICS.ISTK[1]$)$NL$
995 $END$
996$END$
997$NL$
998
999$ ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
1000const SIZE _kernel_istksz = TOPPERS_ISTKSZ;$NL$
1001STK_T *const _kernel_istk = TOPPERS_ISTK;$NL$
1002$NL$
1003#ifdef TOPPERS_ISTKPT$NL$
1004STK_T *const _kernel_istkpt = TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ);$NL$
1005#endif /* TOPPERS_ISTKPT */$NL$
1006$NL$
1007
1008$
1009$ ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—
1010$
1011/*$NL$
1012$SPC$* Time Event Management$NL$
1013$SPC$*/$NL$
1014$NL$
1015TMEVTN _kernel_tmevt_heap[TNUM_TSKID + TNUM_CYCID + TNUM_ALMID];$NL$
1016$NL$
1017
1018$
1019$ Šeƒ‚ƒWƒ…
1020[ƒ‹‚̏‰Šú‰»ŠÖ”
1021$
1022/*$NL$
1023$SPC$* Module Initialization Function$NL$
1024$SPC$*/$NL$
1025$NL$
1026void$NL$
1027_kernel_initialize_object(void)$NL$
1028{$NL$
1029$TAB$_kernel_initialize_task();$NL$
1030$IF LENGTH(SEM.ID_LIST)$ _kernel_initialize_semaphore();$NL$$END$
1031$IF LENGTH(FLG.ID_LIST)$ _kernel_initialize_eventflag();$NL$$END$
1032$IF LENGTH(DTQ.ID_LIST)$ _kernel_initialize_dataqueue();$NL$$END$
1033$IF LENGTH(PDQ.ID_LIST)$ _kernel_initialize_pridataq();$NL$$END$
1034$IF LENGTH(MBX.ID_LIST)$ _kernel_initialize_mailbox();$NL$$END$
1035$IF LENGTH(MPF.ID_LIST)$ _kernel_initialize_mempfix();$NL$$END$
1036$IF LENGTH(CYC.ID_LIST)$ _kernel_initialize_cyclic();$NL$$END$
1037$IF LENGTH(ALM.ID_LIST)$ _kernel_initialize_alarm();$NL$$END$
1038$TAB$_kernel_initialize_interrupt();$NL$
1039$TAB$_kernel_initialize_exception();$NL$
1040}$NL$
1041$NL$
1042
1043$
1044$ ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
1045$
1046/*$NL$
1047$SPC$* Initialization Routine$NL$
1048$SPC$*/$NL$
1049$NL$
1050void$NL$
1051_kernel_call_inirtn(void)$NL$
1052{$NL$
1053$FOREACH order INI.ORDER_LIST$
1054$ // iniatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
1055 $IF INI.INIATR[order] != 0$
1056 $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$
1057 $END$
1058 $TAB$((INIRTN)($INI.INIRTN[order]$))((intptr_t)($INI.EXINF[order]$));$NL$
1059$END$
1060}$NL$
1061$NL$
1062
1063$
1064$ I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
1065$
1066/*$NL$
1067$SPC$* Termination Routine$NL$
1068$SPC$*/$NL$
1069$NL$
1070void$NL$
1071_kernel_call_terrtn(void)$NL$
1072{$NL$
1073$FOREACH rorder TER.RORDER_LIST$
1074$ // teratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
1075 $IF TER.TERATR[rorder] != 0$
1076 $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$
1077 $END$
1078 $TAB$((TERRTN)($TER.TERRTN[rorder]$))((intptr_t)($TER.EXINF[rorder]$));$NL$
1079$END$
1080}$NL$
1081$NL$
Note: See TracBrowser for help on using the repository browser.