source: asp3_wo_tecs/trunk/extension/ovrhdr/kernel/kernel_check.tf@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 13.7 KB
Line 
1$
2$ TOPPERS/ASP Kernel
3$ Toyohashi Open Platform for Embedded Real-Time Systems/
4$ Advanced Standard Profile Kernel
5$
6$ Copyright (C) 2008-2015 by Embedded and Real-Time Systems Laboratory
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$
9$ 上記著作権者
10は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12$ 変・再é…
13å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
14$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16$ スコード中に含まれていること.
17$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18$ 用できる形で再é…
19å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
20å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
21$ 者
22マニュアルなど)に,上記の著作権表示,この利用条件および下記
23$ の無保証規定を掲載すること.
24$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
25$ 用できない形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
27$ と.
28$ (a) 再é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
30マニュアルなど)に,上記の著
31$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
32$ (b) 再é…
33å¸ƒã®å½¢æ…
34‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
35$ 報告すること.
36$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37$ 害からも,上記著作権者
38およびTOPPERSプロジェクトをå…
39è²¬ã™ã‚‹ã“と.
40$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
41$ 由に基づく請求からも,上記著作権者
42およびTOPPERSプロジェクトを
43$ å…
44è²¬ã™ã‚‹ã“と.
45$
46$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
49$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
50$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
51$ の責任を負わない.
52$
53$ $Id: kernel_check.tf 463 2015-10-18 14:25:55Z ertl-hiro $
54$
55
56$
57$ コンフィギュレータのパス3のテンプレートファイル
58$
59
60$
61$ データセクションのLMAからVMAへのコピー
62$
63$FOREACH lma LMA.ORDER_LIST$
64 $start_data = SYMBOL(LMA.START_DATA[lma])$
65 $end_data = SYMBOL(LMA.END_DATA[lma])$
66 $start_idata = SYMBOL(LMA.START_IDATA[lma])$
67 $IF !LENGTH(start_data)$
68 $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.START_DATA[lma])$$END$
69 $ELIF !LENGTH(end_data)$
70 $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.END_DATA[lma])$$END$
71 $ELIF !LENGTH(start_idata)$
72 $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.START_IDATA[lma])$$END$
73 $ELSE$
74 $BCOPY(start_idata, start_data, end_data - start_data)$
75 $END$
76$END$
77
78$
79$ 通知情
80報のチェック関数
81$
82$tmax_tskid = PEEK(SYMBOL("_kernel_tmax_tskid"), sizeof_ID)$
83$tmax_semid = PEEK(SYMBOL("_kernel_tmax_semid"), sizeof_ID)$
84$tmax_flgid = PEEK(SYMBOL("_kernel_tmax_flgid"), sizeof_ID)$
85$tmax_dtqid = PEEK(SYMBOL("_kernel_tmax_dtqid"), sizeof_ID)$
86
87$FUNCTION CHECK_NFYHDR$
88$ // パラメータを変数に格納
89 $nfymode = ARGV[1]$
90 $nfymode1 = nfymode & 0x0f$
91 $nfymode2 = nfymode & ~0x0f$
92 $exinf = ARGV[2]$
93 $nfyhdr = ARGV[3]$
94 $par1 = ARGV[4]$
95 $par2 = ARGV[5]$
96 $text_line = ARGV[8]$
97 $objid = ARGV[9]$
98 $apiname = ARGV[10]$
99 $funcname = CONCAT("_kernel_nfyhdr_", objid)$
100
101$ // 通知処理のパラメータ数による補正処理
102 $IF nfymode1 == TNFY_SETVAR || nfymode1 == TNFY_SETFLG
103 || nfymode1 == TNFY_SNDDTQ$
104$ // 通知処理のパラメータが2つの場合
105 $epar1 = ARGV[6]$
106 $epar2 = ARGV[7]$
107 $ELSE$
108$ // 通知処理のパラメータが1つの場合
109 $epar1 = ARGV[5]$
110 $epar2 = ARGV[6]$
111 $END$
112
113$ // タイムイベントハンドラのå…
114ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI3693ï¼½
115 $IF nfymode == TNFY_HANDLER$
116 $tmehdr = nfyhdr$
117 $IF CHECK_FUNC_ALIGN && (tmehdr & (CHECK_FUNC_ALIGN - 1)) != 0$
118 $ERROR text_line$E_PAR:$SPC$
119 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
120 "tmehdr", par2, objid, apiname)$
121 $END$
122 $END$
123 $IF CHECK_FUNC_NONNULL && tmehdr == 0$
124 $ERROR text_line$E_PAR:$SPC$
125 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
126 "tmehdr", par2, objid, apiname)$
127 $END$
128 $END$
129 $END$
130
131$ // イベント通知処理の変数の番地とオブジェクトIDのチェック
132 $IF nfymode1 == TNFY_SETVAR || nfymode1 == TNFY_INCVAR$
133$ // 変数の設定/インクリメントによるタイムイベントの通知
134 $p_var = exinf$
135
136$ // 変数の番地のチェック[NGKI3699][NGKI3897]
137 $IF CHECK_INTPTR_ALIGN && (p_var & (CHECK_INTPTR_ALIGN - 1)) != 0$
138 $ERROR text_line$E_PAR:$SPC$
139 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
140 "p_var", par1, objid, apiname)$
141 $END$
142 $END$
143 $IF CHECK_INTPTR_NONNULL && p_var == 0$
144 $ERROR text_line$E_PAR:$SPC$
145 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
146 "p_var", par1, objid, apiname)$
147 $END$
148 $END$
149 $ELIF nfymode1 == TNFY_ACTTSK || nfymode1 == TNFY_WUPTSK$
150$ // タスクの起動/起床によるタイムイベントの通知
151 $tskid = exinf$
152
153$ // タスクIDのチェック[NGKI3704]
154 $IF !(TMIN_TSKID <= tskid && tskid <= tmax_tskid)$
155 $ERROR text_line$E_ID:$SPC$
156 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
157 "tskid", par1, objid, apiname)$
158 $END$
159 $END$
160 $ELIF nfymode1 == TNFY_SIGSEM$
161$ // セマフォの資源の返却によるタイムイベントの通知
162 $semid = exinf$
163
164$ // セマフォIDのチェック[NGKI3707]
165 $IF !(TMIN_SEMID <= semid && semid <= tmax_semid)$
166 $ERROR text_line$E_ID:$SPC$
167 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
168 "semid", par1, objid, apiname)$
169 $END$
170 $END$
171 $ELIF nfymode1 == TNFY_SETFLG$
172$ // イベントフラグのセットによるタイムイベントの通知
173 $flgid = exinf$
174
175$ // イベントフラグIDのチェック[NGKI3710]
176 $IF !(TMIN_FLGID <= flgid && flgid <= tmax_flgid)$
177 $ERROR text_line$E_ID:$SPC$
178 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
179 "flgid", par1, objid, apiname)$
180 $END$
181 $END$
182 $ELIF nfymode1 == TNFY_SNDDTQ$
183$ // データキューへの送信によるタイムイベントの通知
184 $dtqid = exinf$
185
186$ // データキューIDのチェック[NGKI3713]
187 $IF !(TMIN_DTQID <= dtqid && dtqid <= tmax_dtqid)$
188 $ERROR text_line$E_ID:$SPC$
189 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
190 "dtqid", par1, objid, apiname)$
191 $END$
192 $END$
193 $END$
194
195$ // エラー通知処理の変数の番地とオブジェクトIDのチェック
196 $IF nfymode2 == TENFY_SETVAR || nfymode2 == TENFY_INCVAR$
197$ // 変数の設定/インクリメントによるエラーの通知
198 $p_var = PEEK(SYMBOL(CONCAT(funcname, "_p_evar")), sizeof_intptr_t)$
199
200$ // 変数の番地のチェック[NGKI3701][NGKI3897]
201 $IF CHECK_INTPTR_ALIGN && (p_var & (CHECK_INTPTR_ALIGN - 1)) != 0$
202 $ERROR text_line$E_PAR:$SPC$
203 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
204 "p_var", epar1, objid, apiname)$
205 $END$
206 $END$
207 $IF CHECK_INTPTR_NONNULL && p_var == 0$
208 $ERROR text_line$E_PAR:$SPC$
209 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
210 "p_var", epar1, objid, apiname)$
211 $END$
212 $END$
213 $ELIF nfymode2 == TENFY_ACTTSK || nfymode2 == TENFY_WUPTSK$
214$ // タスクの起動/起床によるエラーの通知
215 $tskid = PEEK(SYMBOL(CONCAT(funcname, "_etskid")), sizeof_ID)$
216
217$ // タスクIDのチェック[NGKI3704]
218 $IF !(TMIN_TSKID <= tskid && tskid <= tmax_tskid)$
219 $ERROR text_line$E_ID:$SPC$
220 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
221 "tskid", epar1, objid, apiname)$
222 $END$
223 $END$
224 $ELIF nfymode2 == TENFY_SIGSEM$
225$ // セマフォの資源の返却によるエラーの通知
226 $semid = PEEK(SYMBOL(CONCAT(funcname, "_esemid")), sizeof_ID)$
227
228$ // セマフォIDのチェック[NGKI3707]
229 $IF !(TMIN_SEMID <= semid && semid <= tmax_semid)$
230 $ERROR text_line$E_ID:$SPC$
231 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
232 "semid", epar1, objid, apiname)$
233 $END$
234 $END$
235 $ELIF nfymode2 == TENFY_SETFLG$
236$ // イベントフラグのセットによるエラーの通知
237 $flgid = PEEK(SYMBOL(CONCAT(funcname, "_eflgid")), sizeof_ID)$
238
239$ // イベントフラグIDのチェック[NGKI3710]
240 $IF !(TMIN_FLGID <= flgid && flgid <= tmax_flgid)$
241 $ERROR text_line$E_ID:$SPC$
242 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
243 "flgid", epar1, objid, apiname)$
244 $END$
245 $END$
246 $ELIF nfymode2 == TENFY_SNDDTQ$
247$ // データキューへの送信によるエラーの通知
248 $dtqid = PEEK(SYMBOL(CONCAT(funcname, "_edtqid")), sizeof_ID)$
249
250$ // データキューIDのチェック[NGKI3715]
251 $IF !(TMIN_DTQID <= dtqid && dtqid <= tmax_dtqid)$
252 $ERROR text_line$E_ID:$SPC$
253 $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"),
254 "dtqid", epar1, objid, apiname)$
255 $END$
256 $END$
257 $END$
258$END$
259
260$
261$ タスクに関するチェック
262$
263$tinib = SYMBOL("_kernel_tinib_table")$
264$FOREACH tskid TSK.ID_LIST$
265$ // タスクのå…
266ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI1033ï¼½
267 $task = PEEK(tinib + offsetof_TINIB_task, sizeof_FP)$
268 $IF CHECK_FUNC_ALIGN && (task & (CHECK_FUNC_ALIGN - 1)) != 0$
269 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:$SPC$
270 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
271 "task", TSK.TASK[tskid], tskid, "CRE_TSK")$
272 $END$
273 $END$
274 $IF CHECK_FUNC_NONNULL && task == 0$
275 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:$SPC$
276 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
277 "task", TSK.TASK[tskid], tskid, "CRE_TSK")$
278 $END$
279 $END$
280
281$ // タスクのスタック領域のå…
282ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI1056ï¼½
283 $IF USE_TSKINICTXB$
284 $stk = GET_STK_TSKINICTXB(tinib)$
285 $ELSE$
286 $stk = PEEK(tinib + offsetof_TINIB_stk, sizeof_void_ptr)$
287 $END$
288 $IF CHECK_STACK_ALIGN && (stk & (CHECK_STACK_ALIGN - 1)) != 0$
289 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:$SPC$
290 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
291 "stk", TSK.STK[tskid], tskid, "CRE_TSK")$
292 $END$
293 $END$
294 $IF CHECK_STACK_NONNULL && stk == 0$
295 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:$SPC$
296 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
297 "stk", TSK.STK[tskid], tskid, "CRE_TSK")$
298 $END$
299 $END$
300
301 $tinib = tinib + sizeof_TINIB$
302$END$
303
304$
305$ 周期通知に関するチェック
306$
307$cycinib = SYMBOL("_kernel_cycinib_table")$
308$FOREACH cycid CYC.ID_LIST$
309 $exinf = PEEK(cycinib + offsetof_CYCINIB_exinf, sizeof_intptr_t)$
310 $nfyhdr = PEEK(cycinib + offsetof_CYCINIB_nfyhdr, sizeof_FP)$
311
312$ // 通知情
313報のチェック
314 $CHECK_NFYHDR(CYC.NFYMODE[cycid], exinf, nfyhdr,
315 CYC.PAR1[cycid], CYC.PAR2[cycid],
316 CYC.PAR3[cycid], CYC.PAR4[cycid],
317 CYC.TEXT_LINE[cycid], cycid, "CRE_CYC")$
318
319 $cycinib = cycinib + sizeof_CYCINIB$
320$END$
321
322$
323$ アラーム通知に関するチェック
324$
325$alminib = SYMBOL("_kernel_alminib_table")$
326$FOREACH almid ALM.ID_LIST$
327 $exinf = PEEK(alminib + offsetof_ALMINIB_exinf, sizeof_intptr_t)$
328 $nfyhdr = PEEK(alminib + offsetof_ALMINIB_nfyhdr, sizeof_FP)$
329
330$ // 通知情
331報のチェック
332 $CHECK_NFYHDR(ALM.NFYMODE[almid], exinf, nfyhdr,
333 ALM.PAR1[almid], ALM.PAR2[almid],
334 ALM.PAR3[almid], ALM.PAR4[almid],
335 ALM.TEXT_LINE[almid], almid, "CRE_ALM")$
336
337 $alminib = alminib + sizeof_ALMINIB$
338$END$
339
340$
341$ オーバランハンドラに関するチェック
342$
343$ovrinib = SYMBOL("_kernel_ovrinib")$
344$IF LENGTH(OVR.ORDER_LIST)$
345 $ovrhdr = PEEK(ovrinib + offsetof_OVRINIB_ovrhdr, sizeof_FP)$
346
347$ // オーバランハンドラのå…
348ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI2613ï¼½
349 $IF CHECK_FUNC_ALIGN && (ovrhdr & (CHECK_FUNC_ALIGN - 1)) != 0$
350 $ERROR OVR.TEXT_LINE[1]$E_PAR:$SPC$
351 $FORMAT(_("%1% `%2%\' in %4% is not aligned"),
352 "ovrhdr", OVR.OVRHDR[1], "DEF_OVR")$
353 $END$
354 $END$
355 $IF CHECK_FUNC_NONNULL && ovrhdr == 0$
356 $ERROR OVR.TEXT_LINE[1]$E_PAR:$SPC$
357 $FORMAT(_("%1% `%2%\' in %3% is null"),
358 "ovrhdr", OVR.OVRHDR[1], "DEF_OVR")$
359 $END$
360 $END$
361$END$
362
363$
364$ 固定長メモリプールに関するチェック
365$
366$mpfinib = SYMBOL("_kernel_mpfinib_table")$
367$FOREACH mpfid MPF.ID_LIST$
368 $mpf = PEEK(mpfinib + offsetof_MPFINIB_mpf, sizeof_void_ptr)$
369
370$ // 固定長メモリプール領域のå…
371ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI2249ï¼½
372 $IF CHECK_MPF_ALIGN && (mpf & (CHECK_MPF_ALIGN - 1)) != 0$
373 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR:$SPC$
374 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
375 "mpf", MPF.MPF[mpfid], mpfid, "CRE_MPF")$
376 $END$
377 $END$
378 $IF CHECK_MPF_NONNULL && mpf == 0$
379 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR:$SPC$
380 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
381 "mpf", MPF.MPF[mpfid], mpfid, "CRE_MPF")$
382 $END$
383 $END$
384
385 $mpfinib = mpfinib + sizeof_MPFINIB$
386$END$
387
388$
389$ 非タスクコンテキスト用のスタック領域に関するチェック
390$
391$istk = PEEK(SYMBOL("_kernel_istk"), sizeof_void_ptr)$
392
393$ 非タスクコンテキスト用のスタック領域のå…
394ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI3222ï¼½
395$IF CHECK_STACK_ALIGN && (istk & (CHECK_STACK_ALIGN - 1)) != 0$
396 $ERROR ICS.TEXT_LINE[1]$E_PAR:$SPC$
397 $FORMAT(_("%1% `%2%\' in %3% is not aligned"),
398 "istk", ICS.ISTK[1], "DEF_ICS")$
399 $END$
400$END$
401$IF CHECK_STACK_NONNULL && istk == 0$
402 $ERROR ICS.TEXT_LINE[1]$E_PAR:$SPC$
403 $FORMAT(_("%1% `%2%\' in %3% is null"),
404 "istk", ICS.ISTK[1], "DEF_ICS")$
405 $END$
406$END$
Note: See TracBrowser for help on using the repository browser.