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