source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/configurator.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 25.4 KB
Line 
1
2 = JSPカーネル コンフィギュレータ仕様 =
3
4 (Release 1.4対応,最終更新: 20-Dec-2003)
5
6------------------------------------------------------------------------
7 TOPPERS/JSP Kernel
8 Toyohashi Open Platform for Embedded Real-Time Systems/
9 Just Standard Profile Kernel
10
11 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
12 Toyohashi Univ. of Technology, JAPAN
13
14 上記著作権者
15は,以下の (1)〜(4) の条件か,Free Software Foundation
16 によってå…
17¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
18 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
19 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
20å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
21 利用と呼ぶ)することを無償で許諾する.
22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24 スコード中に含まれていること.
25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26 用できる形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
29 者
30マニュアルなど)に,上記の著作権表示,この利用条件および下記
31 の無保証規定を掲載すること.
32 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
33 用できない形で再é…
34å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
35 と.
36 (a) 再é…
37å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
38マニュアルなど)に,上記の著
39 作権表示,この利用条件および下記の無保証規定を掲載すること.
40 (b) 再é…
41å¸ƒã®å½¢æ…
42‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
43 報告すること.
44 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
45 害からも,上記著作権者
46およびTOPPERSプロジェクトをå…
47è²¬ã™ã‚‹ã“と.
48
49 本ソフトウェアは,無保証で提供されているものである.上記著作権者
50お
51 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
52 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
53 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
54
55 @(#) $Id: configurator.txt,v 1.20 2005/07/06 01:40:05 honda Exp $
56------------------------------------------------------------------------
57
58
59このドキュメントでは,JSPカーネルのコンフィギュレータが生成すべきファ
60イルの内
61容について解説する.
62
63JSPカーネルのコンフィギュレータは,システムコンフィギュレーションファ
64イルを処理して,カーネル構成ファイル(kernel_cfg.c)とID自動割付け結果
65ファイル(kernel_id.h)を生成する.また,静的APIのパラメータチェックに
66用いるファイル(kernel_chk.c)を生成する.
67
68ID自動割付け結果ファイルは,コンフィギュレータがID番号を割り付けたオブ
69ジェクトの名前を,割り付けたID番号に定義するファイルである.
70
71以下では,カーネル構成ファイルの内
72容について解説する.
73
74(1) 固定生成部分
75
76(1-1) 標準インクルードファイル
77
78kernel_cfg.c 用のインクルードファイルをインクルードするプリプロセッサ
79ディレクティブ(#include)を生成する.å…
80·ä½“的には,次の行を生成する.
81
82#include "kernel_cfg.h"
83
84また,必
85要であれば,ID自動割付け結果ファイルをインクルードするプリプロ
86セッサディレクティブ(#include)を生成する.å…
87·ä½“的には,次の行を生成す
88る.
89
90#include "kernel_id.h"
91
92(1-2) マクロの置換順序の制御
93
94マクロの置換順序を変えるために,以下のマクロ定義行を生成する.
95
96#define CFG_INTHDR_ENTRY(inthdr) INTHDR_ENTRY(inthdr)
97#define CFG_EXCHDR_ENTRY(exchdr) EXCHDR_ENTRY(exchdr)
98#define CFG_INT_ENTRY(inthdr) INT_ENTRY(inthdr)
99#define CFG_EXC_ENTRY(exchdr) EXC_ENTRY(exchdr)
100
101なお,これらのマクロは,å…
102ƒã€…
103は過去のバージョンとの互換性を保つためにå…
104¥
105れたものである.ただし,過去のバージョンとの互換性が必
106要なくても,マク
107ロの置換順序を変えるために必
108要である.
109
110(2)「INCLUDE」静的APIの処理
111
112システムコンフィギュレーションファイルに含まれる「INCLUDE」静的APIに対
113応するプリプロセッサディレクティブ(#include)を生成する.例えば,
114
115INCLUDE("\"sample1.h\"");
116
117という静的APIに対して,
118
119#include "sample1.h"
120
121というディレクティブを生成する.生成するディレクティブの順序は,システ
122ムコンフィギュレーションファイル中での静的APIの順序に一致させる.
123
124(3) 各カーネルオブジェクトに関する定義
125
126システムコンフィギュレーションファイル中に,オブジェクトを生成する静的
127API「CRE_XXX」が含まれる各カーネルオブジェクトに関して,オブジェクト生
128成のための定義を生成する.
129
130コンフィギュレータは,同じ種類のオブジェクトを生成する静的APIを集め,
131それらをID番号の順に並べ替える.同じID番号のオブジェクトを生成する静的
132APIが複数含まれている場合には,コンフィギュレータがエラーを報告する.
133JSPカーネルは,オブジェクトのID番号が連続していることを仮定して実装
134し
135てある.ID番号が連続していない場合には,コンフィギュレータがエラーを報
136告する.
137
138また,コンフィギュレータは,オブジェクトのID番号の代わりに識別子が記述
139されている場合に,そのオブジェクトにID番号を割り付ける.ID番号は,他の
140オブジェクトのID番号と重複がなく,ID番号ができる限り連続するように割り
141付ける.それでもID番号が連続にならない場合には,コンフィギュレータがエ
142ラーを報告する.
143
144各カーネルオブジェクトに関する定義の標準的な構成は,次の通りである.オ
145ブジェクトによって例外がある場合には,オブジェクト毎の項
146で説明する.
147
148(a) オブジェクトの数
149
150オブジェクトの数をマクロ定義するプリプロセッサディレクティブ(#define)
151を生成する.å…
152·ä½“的には,オブジェクトの省略記号を「XXX」とすると,次の
153ような行を生成する.
154
155#define TNUM_XXXID <オブジェクトの数>
156
157(b) 最大のオブジェクトIDの変数の定義
158
159最大のオブジェクトIDを持つ変数の定義を生成する.å…
160·ä½“的には,オブジェク
161トの省略記号を「XXX/xxx」とすると,次のような行を生成する.
162
163const ID tmax_xxxid = (TMIN_XXXID + TNUM_XXXID - 1);
164
165(c) オブジェクトに必
166要なメモリ領域の定義
167
168オブジェクトによっては,オブジェクトに必
169要なメモリ領域の定義を生成する.
170å…
171·ä½“的には,オブジェクト毎の項
172で説明する.
173
174(d) オブジェクトの初期化ブロックの定義
175
176オブジェクトの初期化ブロックの定義を生成する.å…
177·ä½“的には,オブジェクト
178の省略記号を「XXX/xxx」とすると,次のような行を生成する.
179
180const XXXINIB xxxinib_table[TNUM_XXXID] = {
181 <オブジェクトIDが 1 のオブジェクトの初期化情
182å ±>,
183 <オブジェクトIDが 2 のオブジェクトの初期化情
184å ±>,
185 ……
186 <オブジェクトIDが tmax_xxxid のオブジェクトの初期化情
187å ±>
188};
189
190オブジェクトの初期化情
191報の形式は,オブジェクト毎に異なる.å…
192·ä½“的には,
193オブジェクト毎の項
194で説明する.
195
196(e) オブジェクトのコントロールブロックの定義
197
198オブジェクトのコントロールブロックの定義を生成する.å…
199·ä½“的には,オブジェ
200クトの省略記号を「XXX/xxx」とすると,次のような行を生成する.
201
202XXXCB xxxcb_table[TNUM_XXXID];
203
204(3-1) タスクに関する定義
205
206JSPカーネルは,タスクが一つもないケースに対応していないため,タスクに
207関する定義は必
208ず生成しなければならない.
209
210タスクに関する定義のインクルードファイル名とオブジェクトの省略記号は次
211の通りである.ただし,タスク初期化ブロックのデータ型は TINIB,変数名は
212tinib_table,タスクコントロールブロックのデータ型は TCB,変数名は
213tcb_table である(いずれも「TSK/tsk」に代えて「T/t」を用いている).
214
215 インクルードファイル名: task.h
216 オブジェクトの省略記号: TSK
217
218タスク初期化ブロックには,「CRE_TSK」静的APIで指定される情
219報に加えて,
220「DEF_TEX」静的APIで指定される情
221報を含める.
222
223以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
224ている時に生成すべき情
225報について述べる.
226
227CRE_TSK(tskid, { tskatr, exinf, task, itskpri, stksz, stack });
228DEF_TEX(tskid, { texatr, texrtn });
229
230(3-1-1) タスクに必
231要なメモリ領域の定義
232
233タスクに必
234要なメモリ領域として,タスクのスタック領域がある.生成する各
235タスク毎に,指定されたサイズのスタック領域を定義する.å…
236·ä½“的には,上記
237の静的APIに対して,次の定義を生成する.
238
239static __STK_UNIT <スタック領域の変数名>[__TCOUNT_STK_UNIT(stksz)];
240
241ここで,<スタック領域の変数名> は,タスク毎に異なる識別子を生成して用
242いる.
243
244(3-1-2) タスクの初期化情
245å ±
246
247タスク初期化ブロック中に生成するタスクの初期化情
248報は,次の形式とする.
249
250 { tskatr, (VP_INT)(exinf), (FP)(task), INT_PRIORITY(itskpri),
251 __TROUND_UNIT_STK(stksz), <スタック領域の変数名>,
252 texatr, (FP)(texrtn) }
253
254ここで,CRE_TSK に対応する DEF_TEX がない場合には,texatr を TA_NULL,
255texrtn を NULL とする.
256
257(3-1-3) タスク生成順序テーブルの定義
258
259タスクに対しては,生成された順序(タスクを生成する静的APIが記述された
260順序)をテーブルに出力する必
261要がある.これは,タスクの生成された順序で,
262タスクの初期化(よりå…
263·ä½“的には,タスクの起動)を行う必
264要があるためであ
265る.
266
267å…
268·ä½“的には,次のような行を生成する.
269
270const ID torder_table[TNUM_TSKID] = {
271 <最初に生成されたタスクのタスクID>,
272 <2番目に生成されたタスクのタスクID>,
273 ……
274 <最後に生成されたタスクのタスクID>
275};
276
277(3-1-4) エラー条件
278
279タスクの初期化に関するエラー条件は次の通りである.
280
281・DEF_TEX に対応する CRE_TSK がない場合(E_NOEXS)
282・(tskatr & ~(TA_ACT)) が 0 でない場合(E_RSATR)
283・(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI) でない場合(E_PAR)
284・stack が NULL でない場合(E_NOSPT)
285・texatr が 0 でない場合(E_RSATR)
286
287※ この他に,task や texrtn がプログラムの開始番地として正しいない場合
288や,stksz が小さすぎる場合にもエラーとすべきだが,エラー条件がターゲッ
289トに依存してしまうため,今後の課題とする.
290
291(3-2) セマフォに関する定義
292
293セマフォに関する定義のインクルードファイル名とオブジェクトの省略記号は
294次の通りである.
295
296 インクルードファイル名: semaphore.h
297 オブジェクトの省略記号: SEM
298
299以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
300ている時に生成すべき情
301報について述べる.なお,セマフォに必
302要なメモリ領
303域はない.
304
305CRE_SEM(semid, { sematr, isemcnt, maxsem });
306
307(3-2-1) セマフォの初期化情
308å ±
309
310セマフォ初期化ブロック中に生成するセマフォの初期化情
311報は,次の形式とす
312る.
313
314 { sematr, isemcnt, maxsem }
315
316(3-2-2) エラー条件
317
318セマフォの初期化に関するエラー条件は次の通りである.
319
320・(sematr & ~(TA_TPRI)) が 0 でない場合(E_RSATR)
321・(isemcnt > maxsem) の場合(E_PAR)
322・(1 <= maxsem && maxsem <= TMAX_MAXSEM) でない場合(E_PAR)
323
324(3-3) イベントフラグに関する定義
325
326イベントフラグに関する定義のインクルードファイル名とオブジェクトの省略
327記号は次の通りである.
328
329 インクルードファイル名: eventflag.h
330 オブジェクトの省略記号: FLG
331
332以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
333ている時に生成すべき情
334報について述べる.なお,イベントフラグに必
335要なメ
336モリ領域はない.
337
338CRE_FLG(flgid, { flgatr, iflgptn });
339
340(3-3-1) イベントフラグの初期化情
341å ±
342
343イベントフラグ初期化ブロック中に生成するイベントフラグの初期化情
344報は,
345次の形式とする.
346
347 { flgatr, iflgptn }
348
349(3-3-2) エラー条件
350
351イベントフラグの初期化に関するエラー条件は次の通りである.
352
353・(flgatr & ~(TA_TPRI|TA_CLR)) が 0 でない場合(E_RSATR)
354
355(3-4) データキューに関する定義
356
357データキューに関する定義のインクルードファイル名とオブジェクトの省略記
358号は次の通りである.
359
360 インクルードファイル名: dataqueue.h
361 オブジェクトの省略記号: DTQ
362
363以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
364ている時に生成すべき情
365報について述べる.
366
367CRE_DTQ(dtqid, { dtqatr, dtqcnt, dtq });
368
369(3-4-1) データキューに必
370要なメモリ領域の定義
371
372データキューに必
373要なメモリ領域として,データキュー領域がある.生成する
374各データキュー毎に,必
375要なサイズのデータキュー領域を定義する.å…
376·ä½“的に
377は,上記の静的APIに対して,次の定義を生成する.
378
379#if (dtqcnt) > 0
380static VP_INT <データキュー領域の変数名>[dtqcnt];
381#else
382#define <データキュー領域の変数名> NULL
383#endif
384
385ここで,<データキュー領域の変数名> は,データキュー毎に異なる識別子を
386生成して用いる.
387
388(3-4-2) データキューの初期化情
389å ±
390
391データキュー初期化ブロック中に生成するデータキューの初期化情
392報は,次の
393形式とする.
394
395 { dtqatr, dtqcnt, <データキュー領域の変数名> }
396
397(3-4-3) エラー条件
398
399データキューの初期化に関するエラー条件は次の通りである.
400
401・(dtqatr & ~(TA_TPRI)) が 0 でない場合(E_RSATR)
402・dtq が NULL でない場合(E_NOSPT)
403
404(3-5) メールボックスに関する定義
405
406メールボックスに関する定義のインクルードファイル名とオブジェクトの省略
407記号は次の通りである.
408
409 インクルードファイル名: mailbox.h
410 オブジェクトの省略記号: MBX
411
412以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
413ている時に生成すべき情
414報について述べる.なお,メールボックスに必
415要なメ
416モリ領域はない.
417
418CRE_MBX(mbxid, { mbxatr, maxmpri, mprihd });
419
420(3-5-1) メールボックスの初期化情
421å ±
422
423メールボックス初期化ブロック中に生成するメールボックスの初期化情
424報は,
425次の形式とする.
426
427 { mbxatr, maxmpri }
428
429(3-5-2) エラー条件
430
431メールボックスの初期化に関するエラー条件は次の通りである.
432
433・(mbxatr & ~(TA_TPRI|TA_MPRI)) が 0 でない場合(E_RSATR)
434・(TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI) でない場合(E_PAR)
435・mprihd が NULL でない場合(E_NOSPT)
436
437(3-6) 固定長メモリプールに関する定義
438
439固定長メモリプールに関する定義のインクルードファイル名とオブジェクトの
440省略記号は次の通りである.
441
442 インクルードファイル名: mempfix.h
443 オブジェクトの省略記号: MPF
444
445以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
446ている時に生成すべき情
447報について述べる.
448
449CRE_MPF(mpfid, { mpfatr, blkcnt, blksz, mpf });
450
451(3-6-1) 固定長メモリプールに必
452要なメモリ領域の定義
453
454固定長メモリプールに必
455要なメモリ領域として,固定長メモリプール領域があ
456る.生成する各固定長メモリプール毎に,必
457要なサイズの固定長メモリプール
458領域を定義する.å…
459·ä½“的には,上記の静的APIに対して,次の定義を生成する.
460
461static __MPF_UNIT <固定長メモリプール領域の変数名>
462 [__TCOUNT_MPF_UNIT(blksz) * (blkcnt)];
463
464ここで,<固定長メモリプール領域の変数名> は,固定長メモリプール毎に異
465なる識別子を生成して用いる.
466
467(3-6-2) 固定長メモリプールの初期化情
468å ±
469
470固定長メモリプール初期化ブロック中に生成する固定長メモリプールの初期化
471情
472報は,次の形式とする.
473
474 { mpfatr, __TROUND_MPF_UNIT(blksz), <固定長メモリプール領域の変数名>,
475 (VP)(((VB *) <固定長メモリプール領域の変数名>)
476 + sizeof(<固定長メモリプール領域の変数名>)) }
477
478(3-6-3) エラー条件
479
480固定長メモリプールの初期化に関するエラー条件は次の通りである.
481
482・(mpfatr & ~(TA_TPRI)) が 0 でない場合(E_RSATR)
483・blkcnt が 0 の場合(E_PAR)
484・blksz が 0 の場合(E_PAR)
485・mpf が NULL でない場合(E_NOSPT)
486
487(3-7) 周期ハンドラに関する定義
488
489周期ハンドラに関する定義のインクルードファイル名とオブジェクトの省略記
490号は次の通りである.
491
492 インクルードファイル名: cyclic.h
493 オブジェクトの省略記号: CYC
494
495以下では,システムコンフィギュレーションファイルに次の静的APIが含まれ
496ている時に生成すべき情
497報について述べる.なお,周期ハンドラに必
498要なメモ
499リ領域はない.
500
501CRE_CYC(cycid, { cycatr, exinf, cychdr, cyctim, cycphs });
502
503(3-7-1) 周期ハンドラの初期化情
504å ±
505
506周期ハンドラ初期化ブロック中に生成する周期ハンドラの初期化情
507報は,次の
508形式とする.
509
510 { cycatr, exinf, (FP)(cychdr), cyctim, cycphs }
511
512(3-7-2) エラー条件
513
514周期ハンドラの初期化に関するエラー条件は次の通りである.
515
516・(cycatr & ~(TA_STA)) が 0 でない場合(E_RSATR)
517・(cyctim > TMAX_RELTIM) の場合(E_PAR)
518・(cycphs > TMAX_RELTIM) の場合(E_PAR)
519
520※ この他に,cychdr がプログラムの開始番地として正しいない場合にもエラー
521とすべきだが,エラー条件がターゲットに依存してしまうため,今後の課題と
522する.
523
524(4) 割込みハンドラに関する定義
525
526システムコンフィギュレーションファイル中に,割込みハンドラを定義する静
527的API「DEF_INH」が含まれている場合に,割込みハンドラに関する定義を生成
528する.å…
529·ä½“的には次の通り.
530
531(4-1) 定義する割込みハンドラの数
532
533定義する割込みハンドラの数をマクロ定義するプリプロセッサディレクティブ
534(#define)を生成する.また,その値を持つ変数の定義を生成する.å…
535·ä½“çš„
536には,次のような行を生成する.
537
538#define TNUM_INHNO <定義する割込みハンドラの数>
539const UINT tnum_inhno = TNUM_INHNO;
540
541(4-2) 割込みハンドラの出å…
542¥å£å‡¦ç†
543
544定義する各割込みハンドラ毎に,割込みハンドラの出å…
545¥å£å‡¦ç†ãƒ«ãƒ¼ãƒãƒ³ã‚’生成
546する.å…
547·ä½“的には,
548
549DEF_INH(inhno, { inhatr, inthdr });
550
551という静的APIに対して,
552
553CFG_INTHDR_ENTRY(inthdr);
554
555という行を生成する.
556
557(4-3) 割込みハンドラ初期化ブロックの定義
558
559割込みハンドラ初期化ブロックを生成する.å…
560·ä½“的には,次のような行を生成
561する.
562
563const INHINIB inhinib_table[TNUM_INHNO] = {
564 <割込みハンドラ 1 の初期化情
565å ±>,
566 <割込みハンドラ 2 の初期化情
567å ±>,
568 ……
569 <割込みハンドラ TNUM_INHNO の初期化情
570å ±>
571};
572
573この中の割込みハンドラの初期化情
574報は,次の形式とする.
575
576 { inhno, inhatr, (FP)CFG_INT_ENTRY(inthdr) }
577
578(4-4) エラー条件
579
580割込みハンドラに関するエラー条件は次の通りである.
581
582・inhatr が 0 でない場合(E_RSATR)
583
584※ この他に,inthdr がプログラムの開始番地として正しいない場合や,
585inhno が割込みハンドラ番号として正しくない場合にもエラーとすべきだが,
586エラー条件がターゲットに依存してしまうため,今後の課題とする.
587
588(5) CPU例外ハンドラに関する定義
589
590システムコンフィギュレーションファイル中に,CPU例外ハンドラを定義する
591静的API「DEF_EXC」が含まれている場合に,CPU例外ハンドラに関する定義を
592生成する.å…
593·ä½“的には次の通り.
594
595(5-1) 定義するCPU例外ハンドラの数
596
597定義するCPU例外ハンドラの数をマクロ定義するプリプロセッサディレクティ
598ブ(#define)を生成する.また,その値を持つ変数の定義を生成する.å…
599·ä½“
600的には,次のような行を生成する.
601
602#define TNUM_EXCNO <定義するCPU例外ハンドラの数>
603const UINT tnum_excno = TNUM_EXCNO;
604
605(5-2) CPU例外ハンドラの出å…
606¥å£å‡¦ç†
607
608定義する各CPU例外ハンドラ毎に,CPU例外ハンドラの出å…
609¥å£å‡¦ç†ãƒ«ãƒ¼ãƒãƒ³ã‚’生
610成する.å…
611·ä½“的には,
612
613DEF_EXC(excno, { excatr, exchdr });
614
615という静的APIに対して,
616
617CFG_EXCHDR_ENTRY(exchdr);
618
619という行を生成する.
620
621(5-3) CPU例外ハンドラ初期化ブロックの定義
622
623CPU例外ハンドラ初期化ブロックを生成する.å…
624·ä½“的には,次のような行を生
625成する.
626
627const EXCINIB excinib_table[TNUM_EXCNO] = {
628 <CPU例外ハンドラ 1 の初期化情
629å ±>,
630 <CPU例外ハンドラ 2 の初期化情
631å ±>,
632 ……
633 <CPU例外ハンドラ TNUM_EXCNO の初期化情
634å ±>
635};
636
637この中のCPU例外ハンドラの初期化情
638報は,次の形式とする.
639
640 { excno, excatr, (FP)CFG_EXC_ENTRY(exchdr) }
641
642(5-4) エラー条件
643
644CPU例外ハンドラに関するエラー条件は次の通りである.
645
646・excatr が 0 でない場合(E_RSATR)
647
648※ この他に,excthdr がプログラムの開始番地として正しいない場合や,
649excno がCPU例外ハンドラ番号として正しくない場合にもエラーとすべきだが,
650エラー条件がターゲットに依存してしまうため,今後の課題とする.
651
652(6) タイムイベント管理に関する定義
653
654タイムイベント管理に関連して,次の定義を生成する.
655
656TMEVTN tmevt_heap[TNUM_TSKID + TNUM_CYCID];
657
658(7) 各モジュールの初期化関数の定義
659
660各カーネルオブジェクトの管理,割込み管理,CPU例外ハンドラ管理の各機能
661を初期化関数を順に呼び出す関数(object_initialize)を生成する.使用し
662ない機能の初期化関数は,呼び出さない.
663
664すべての機能を使った場合に生成される関数は次の通りである.
665
666void
667object_initialize()
668{
669 task_initialize();
670 semaphore_initialize();
671 eventflag_initialize();
672 dataqueue_initialize();
673 mailbox_initialize();
674 mempfix_initialize();
675 cyclic_initialize();
676 interrupt_initialize();
677 exception_initialize();
678}
679
680(8) 初期化ルーチンの実行関数の定義
681
682「ATT_INI」静的APIで追加した初期化ルーチンを順に呼び出す関数を生成する.
683å…
684·ä½“的には,
685
686ATT_INI({ iniatr, exinf, inirtn });
687
688という静的APIに対して,
689
690inirtn((VP_INT)(exinf));
691
692を呼び出す関数を,call_inirtn という名前で生成する.初期化ルーチンを呼
693び出す順序は,システムコンフィギュレーションファイル中での静的APIの順
694序に一致させる.
695
696例えば,
697
698ATT_INI({ TA_HLNG, 0, timer_initialize });
699ATT_INI({ TA_HLNG, (INT) CONSOLE_PORTID, serial_initialize });
700
701という二つの静的APIがこの順序で記述された時に生成する関数は次の通りで
702ある.
703
704void
705call_inirtn()
706{
707 timer_initialize((VP_INT)(0));
708 serial_initialize((VP_INT)((INT) CONSOLE_PORTID));
709}
710
711(8-1) エラー条件
712
713初期化ルーチンに関するエラー条件は次の通りである.
714
715・iniatr が 0 でない場合(E_RSATR)
716
717※ この他に,inirtn がプログラムの開始番地として正しいない場合にもエラー
718とすべきだが,エラー条件がターゲットに依存してしまうため,今後の課題と
719する.
720
721以上
722
723
Note: See TracBrowser for help on using the repository browser.