source: extension/ovrhdr/kernel/kernel_check.tf

このファイルの最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 7.4 KB
 
1$ ======================================================================
2$
3$   TOPPERS/ASP Kernel
4$       Toyohashi Open Platform for Embedded Real-Time Systems/
5$       Advanced Standard Profile Kernel
6$
7$   Copyright (C) 2008-2013 by Embedded and Real-Time Systems Laboratory
8$               Graduate School of Information Science, Nagoya Univ., JAPAN
9
10$   Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
11$   ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
12$   ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
13$   (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
14$       ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
15$       ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
16$   (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
17$       Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
18$       ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
19$       €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
20$   (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
21$       Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
22$       €È¡¥
23$     (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
24$         ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
25$     (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
26$         Êó¹ð€¹€ë€³€È¡¥
27$   (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
28$       ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
29$       €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
30$       Í³€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
31$       ÌÈÀÕ€¹€ë€³€È¡¥
32
33$   ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
34$   €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
35$   €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
36$   ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
37$   €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
38$
39$   @(#) $Id$
40
41$ =====================================================================
42
43$
44$  ¥Ç¡Œ¥¿¥»¥¯¥·¥ç¥ó€ÎLMA€«€éVMA€Ø€Î¥³¥Ô¡Œ
45$
46$FOREACH lma LMA.ORDER_LIST$
47        $start_data = SYMBOL(LMA.START_DATA[lma])$
48        $end_data = SYMBOL(LMA.END_DATA[lma])$
49        $start_idata = SYMBOL(LMA.START_IDATA[lma])$
50        $IF !LENGTH(start_data)$
51                $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.START_DATA[lma])$$END$
52        $ELIF !LENGTH(end_data)$
53                $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.END_DATA[lma])$$END$
54        $ELIF !LENGTH(start_idata)$
55                $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.START_IDATA[lma])$$END$
56        $ELSE$
57                $BCOPY(start_idata, start_data, end_data - start_data)$
58        $END$
59$END$
60
61$
62$  ŽØ¿ô€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
63$
64$IF CHECK_FUNC_ALIGN || CHECK_FUNC_NONNULL$
65$       // ¥¿¥¹¥¯€È¥¿¥¹¥¯Îã³°œèÍý¥ë¡Œ¥Á¥ó€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
66        $tinib = SYMBOL("_kernel_tinib_table")$
67        $FOREACH tskid TSK.ID_LIST$
68                $task = PEEK(tinib + offsetof_TINIB_task, sizeof_FP)$
69                $IF CHECK_FUNC_ALIGN && (task & (CHECK_FUNC_ALIGN - 1)) != 0$
70                        $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
71                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
72                                "task", TSK.TASK[tskid], tskid, "CRE_TSK")$$END$
73                $END$
74                $IF CHECK_FUNC_NONNULL && task == 0$
75                        $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
76                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
77                                "task", TSK.TASK[tskid], tskid, "CRE_TSK")$$END$
78                $END$
79                $texrtn = PEEK(tinib + offsetof_TINIB_texrtn, sizeof_FP)$
80                $IF CHECK_FUNC_ALIGN && (texrtn & (CHECK_FUNC_ALIGN - 1)) != 0$
81                        $ERROR DEF_TEX.TEXT_LINE[tskid]$E_PAR:
82                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
83                                "texrtn", TSK.TEXRTN[tskid], tskid, "DEF_TEX")$$END$
84                $END$
85                $tinib = tinib + sizeof_TINIB$
86        $END$
87
88$       // ŒþŽü¥Ï¥ó¥É¥é€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
89        $cycinib = SYMBOL("_kernel_cycinib_table")$
90        $FOREACH cycid CYC.ID_LIST$
91                $cychdr = PEEK(cycinib + offsetof_CYCINIB_cychdr, sizeof_FP)$
92                $IF CHECK_FUNC_ALIGN && (cychdr & (CHECK_FUNC_ALIGN - 1)) != 0$
93                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR:
94                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
95                                "cychdr", CYC.CYCHDR[cycid], cycid, "CRE_CYC")$$END$
96                $END$
97                $IF CHECK_FUNC_NONNULL && cychdr == 0$
98                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR:
99                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
100                                "cychdr", CYC.CYCHDR[cycid], cycid, "CRE_CYC")$$END$
101                $END$
102                $cycinib = cycinib + sizeof_CYCINIB$
103        $END$
104
105$       // ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥é€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
106        $alminib = SYMBOL("_kernel_alminib_table")$
107        $FOREACH almid ALM.ID_LIST$
108                $almhdr = PEEK(alminib + offsetof_ALMINIB_almhdr, sizeof_FP)$
109                $IF CHECK_FUNC_ALIGN && (almhdr & (CHECK_FUNC_ALIGN - 1)) != 0$
110                        $ERROR ALM.TEXT_LINE[almid]$E_PAR:
111                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
112                                "almhdr", ALM.ALMHDR[almid], almid, "CRE_ALM")$$END$
113                $END$
114                $IF CHECK_FUNC_NONNULL && almhdr == 0$
115                        $ERROR ALM.TEXT_LINE[almid]$E_PAR:
116                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
117                                "almhdr", ALM.ALMHDR[almid], almid, "CRE_ALM")$$END$
118                $END$
119                $alminib = alminib + sizeof_ALMINIB$
120        $END$
121
122$       // ¥ª¡Œ¥Ð¥é¥ó¥Ï¥ó¥É¥é€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
123        $ovrinib = SYMBOL("_kernel_ovrinib")$
124        $IF LENGTH(OVR.ORDER_LIST)$
125                $ovrhdr = PEEK(ovrinib + offsetof_OVRINIB_ovrhdr, sizeof_FP)$
126                $IF CHECK_FUNC_ALIGN && (ovrhdr & (CHECK_FUNC_ALIGN - 1)) != 0$
127                        $ERROR OVR.TEXT_LINE[1]$E_PAR:
128                                $FORMAT(_("%1% `%2%\' in %4% is not aligned"),
129                                "ovrhdr", OVR.OVRHDR[1], "DEF_OVR")$$END$
130                $END$
131                $IF CHECK_FUNC_NONNULL && ovrhdr == 0$
132                        $ERROR OVR.TEXT_LINE[1]$E_PAR:
133                                $FORMAT(_("%1% `%2%\' in %3% is null"),
134                                "ovrhdr", OVR.OVRHDR[1], "DEF_OVR")$$END$
135                $END$
136        $END$
137$END$
138
139$
140$  ¥¹¥¿¥Ã¥¯Îΰè€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
141$
142$IF CHECK_STACK_ALIGN || CHECK_STACK_NONNULL$
143$       // ¥¿¥¹¥¯€Î¥¹¥¿¥Ã¥¯Îΰè€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
144        $tinib = SYMBOL("_kernel_tinib_table")$
145        $FOREACH tskid TSK.ID_LIST$
146                $IF USE_TSKINICTXB$
147                        $stk = GET_STK_TSKINICTXB(tinib)$
148                $ELSE$
149                        $stk = PEEK(tinib + offsetof_TINIB_stk, sizeof_void_ptr)$
150                $END$
151                $IF CHECK_STACK_ALIGN && (stk & (CHECK_STACK_ALIGN - 1)) != 0$
152                        $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
153                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
154                                "stk", TSK.STK[tskid], tskid, "CRE_TSK")$$END$
155                $END$
156                $IF CHECK_STACK_NONNULL && stk == 0$
157                        $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
158                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
159                                "stk", TSK.STK[tskid], tskid, "CRE_TSK")$$END$
160                $END$
161                $tinib = tinib + sizeof_TINIB$
162        $END$
163
164$       // È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥ÈÍрΥ¹¥¿¥Ã¥¯Îΰè€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
165        $istk = PEEK(SYMBOL("_kernel_istk"), sizeof_void_ptr)$
166        $IF CHECK_STACK_ALIGN && (istk & (CHECK_STACK_ALIGN - 1)) != 0$
167                $ERROR ICS.TEXT_LINE[1]$E_PAR:
168                        $FORMAT(_("%1% `%2%\' in %3% is not aligned"),
169                        "istk", ICS.ISTK[1], "DEF_ICS")$$END$
170        $END$
171        $IF CHECK_STACK_NONNULL && istk == 0$
172                $ERROR ICS.TEXT_LINE[1]$E_PAR:
173                        $FORMAT(_("%1% `%2%\' in %3% is null"),
174                        "istk", ICS.ISTK[1], "DEF_ICS")$$END$
175        $END$
176$END$
177
178$
179$  žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëÎΰè€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
180$
181$IF CHECK_MPF_ALIGN || CHECK_MPF_NONNULL$
182$       // žÇÄêĹ¥á¥â¥ê¥×¡Œ¥ëÎΰè€ÎÀèÆ¬ÈÖÃπΥÁ¥§¥Ã¥¯
183        $mpfinib = SYMBOL("_kernel_mpfinib_table")$
184        $FOREACH mpfid MPF.ID_LIST$
185                $mpf = PEEK(mpfinib + offsetof_MPFINIB_mpf, sizeof_void_ptr)$
186                $IF CHECK_MPF_ALIGN && (mpf & (CHECK_MPF_ALIGN - 1)) != 0$
187                        $ERROR MPF.TEXT_LINE[mpfid]$E_PAR:
188                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
189                                "mpf", MPF.MPF[mpfid], mpfid, "CRE_MPF")$$END$
190                $END$
191                $IF CHECK_MPF_NONNULL && mpf == 0$
192                        $ERROR MPF.TEXT_LINE[mpfid]$E_PAR:
193                                $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
194                                "mpf", MPF.MPF[mpfid], mpfid, "CRE_MPF")$$END$
195                $END$
196                $mpfinib = mpfinib + sizeof_MPFINIB$
197        $END$
198$END$
詳しい使い方は TracBrowser を参照してください。