OSDN Git Service

(none)
[hos/hos-v4a.git] / document / cfgrtr.txt
1 ------------------------------------------------------------------------------
2   Hyper Operating System V4 Advance  --μITRON4.0仕様OS                       
3     コンフィギュレーター ドキュメント                                         
4                                                                               
5                                        Copyright (C) 1998-2007 by Project HOS 
6                                        http://sourceforge.jp/projects/hos/    
7 ------------------------------------------------------------------------------
8
9
10 (注意)
11    現時点では未実装の機能も含みます。
12
13
14
15 1. 概要
16
17   本ドキュメントは Hyper Operating System V4 Advance (以下 HOS-V4a)の
18 コンフィギュレーター(h4acfg)についての説明を記載します。
19
20
21
22 2. コンフィギュレーターのメイク
23
24   cfgrtr ディレクトリ以下にコンフィギュレーターのビルド用ファイル一式が
25 あります。
26   コンフィギュレーターはターゲットプロセッサ毎に生成され、カーネル
27 ビルド時に連動してビルドされます。
28
29
30
31 2. コンフィギュレーターの使い方
32
33   コンフィギュレーターの仕様自体も、μITRON4.0 仕様によって定められて
34 おります。
35   本ドキュメントはμITRON4.0仕様をご理解いただいていいることを前提と
36 しております。μITRON4.0仕様書はインターネットで無償公開されて
37 おりますので、別途入手の上、ご確認ください。
38
39   基本的な処理の流れとしては、静的APIを記載した、system.cfg を
40 Cプリプロセッサで処理した後に、h4acfg で処理することにより、
41 kernel_id.h(IDなどを宣言したヘッダファイル)と、kernel_cfg.c(カーネル
42 オブジェクトの静的生成など)を得ます。
43   その後に後は、kernel_cfg.c をコンパイルしてリンクすることで、HOS-V4aが
44 利用可能となります。
45
46
47 3. HOS-V4a 独自の静的API
48
49   h4acfgでは μITRON4.0仕様 で定める静的APIの他に下記のAPIを
50 備えております。
51
52     KERNEL_HEP_MEM, KERNEL_SYS_STK, KERNEL_INT_STK, KERNEL_INT_SP,
53     KERNEL_TIM_TIC, KERNEL_MIN_INTNO, KERNEL_MAX_INTNO,
54     KERNEL_MAX_TSKID, KERNEL_MAX_SEMID, KERNEL_MAX_FLGID,
55     KERNEL_MAX_DTQID, KERNEL_MAX_MBFID, KERNEL_MAX_MBXID,
56     KERNEL_MAX_MPFID, KERNEL_MAX_CYCID, KERNEL_MAX_ISRID
57
58
59
60 4. 静的APIの説明
61
62   μITRON4.0 標準 API については μITRON4.0 仕様 をご参照ください。
63    ここでは HOS 独自 API についてのみ説明いたします。
64
65
66
67 4.1 カーネルのヒープメモリの指定
68
69   【API】
70       KERNEL_HEP_MEM(SIZE hepsz, VP hep);
71
72   【パラメータ】
73       SIZE   hepsz        カーネルのヒープメモリのサイズ
74       VP     sysstk       カーネルのヒープメモリ
75
76   【機能】
77       カーネルは各種動的オブジェクト生成(cre_xxxやacre_xxx)にて、
78     オブジェクトを生成する場合、カーネルのヒープからメモリを
79     割り当てます。
80       本APIではカーネルのヒープメモリを指定します。
81       hep に指定されたアドレスから、hepsz で指定されたサイズ分の
82     メモリ領域をアイドル時のスタックに割り当てます。
83       hep に NULL を指定した場合、hepsz で指定されたサイズを
84     コンフィギュレーターが自動的に確保します。
85
86
87 4.2 システムタスクのスタックの指定
88
89   【API】
90       KERNEL_SYS_STK(SIZE sysstksz, VP sysstk);
91
92   【パラメータ】
93       SIZE   sysstksz     システムタスクのスタックのサイズ
94       VP     sysstk       システムタスクのスタック
95
96   【機能】
97       カーネルは実行するタスクがない場合のアイドルループ実行や、必要に応じて
98     一部の処理をカーネル内部のシステムタスクにて実行します。
99     本APIではシステムタスクのスタックを指定します。
100       sysstk に指定されたアドレスから、sysstksz で指定されたサイズ分の
101     メモリ領域をアイドル時のスタックに割り当てます。
102       sysstk に NULL を指定した場合、sysstksz で指定されたサイズをコンフィ
103     ギュレーターが自動的に確保します。
104       未指定の場合、デフォルトでプロセッサ毎に最低限必要なサイズが割り当て
105     られますが、アイドル時の例外処理等でスタックを大量に消費する場合は
106     本APIにて調整することが可能です。
107
108
109 4.3 割込み時のスタックの指定
110
111   【API】
112       KERNEL_INT_STK(SIZE intstksz, VP intstk);
113       KERNEL_INT_SP(VP intsp);
114
115   【パラメータ】
116       SIZE   intstksz     割込み時のスタックのサイズ
117       VP     intstk       割込み時のスタック
118       VP     intsp        割込み時の初期スタックポインタ値
119
120   【機能】
121       割り込みが発生した場合、スタックは割込み用スタックに切り替わります。
122       本APIでは割込み時に切り替えるスタックを指定します。
123       KERNEL_INT_STK と KERNEL_INT_SP は同時には利用できず、どちらか片方を
124     利用して指定を行います。
125       KERNEL_INT_STK では、intstk に指定されたアドレスから、intstksz で指定
126     されたサイズ分のメモリ領域を割込み時のスタックに割り当てます。
127       intstk に NULL を指定した場合、intstksz で指定されたサイズをコンフィ
128     ギュレーターが自動的に確保します。
129       KERNEL_INT_SP では、intsp に割込み発生時のスタックポインタ値を直接指定
130     できます。
131
132   【補足】
133       割込み用のスタックポインタ初期値は _kernel_int_isp の名称で生成されます。
134     通常、起動時のスタートアップルーチン実行時のスタックと割込み用のスタックは
135     共有できる為、スタートアップルーチンにて、_kernel_int_sp を参照して利用する
136     ことが可能です。
137
138
139 4.4 タイムティックの周期の指定
140
141   【API】
142       KERNEL_TIM_TIC(UW nume, UW deno);
143
144   【パラメータ】
145       UW      nume        タイムティックの周期の分子
146       UW      deno        タイムティックの周期の分母
147
148   【機能】
149       isig_tim にてカーネルに供給するタイムティックの周期を指定します。
150       例えば、周期に 10/1 を指定した場合、isig_tim を1回呼び出すごとに
151     カーネルのシステム時刻は10進みます。
152       逆に 1/3 などを指定した場合には、isig_tim を 3回呼び出して初めて
153     システム時刻は1進みます。
154       指定しない場合デフォルトで 1/1 となります。
155
156   【補足】
157       例えば 周期が 3.333... ms のインターバルタイマにて、isig_tim を
158     呼び出し、システムの単位時間を ms に統一したい場合などは 10/3 を
159     指定すれば、isig_tim を 呼び出すごとに、3, 3, 4, 3, 3, 3, 4...
160     といった順序で3回の isig_tim の呼び出しで、システム時刻が 10 進む
161     ようになります。
162
163
164 4.5 割り込み番号の範囲の指定
165
166   【API】
167       KERNEL_MIN_INTNO(INTNO minintno);
168       KERNEL_MAX_INTNO(INTNO maxintno);
169
170   【パラメータ】
171       INTNO   minintno    割り込み番号の最小値
172       INTNO   maxintno    割り込み番号の最大値
173
174   【機能】
175       割り込み番号の最大値と最小値を指定します。
176       プロセッサのリビジョンにより利用できる割り込み範囲が異なったり、
177     用途として使う範囲が狭い場合、本APIで範囲を限定し、割込み管理テーブルの
178     メモリ量を抑制することが可能となります。
179
180   【補足】
181      プロセッサによっては、前半がプロセッサ例外やリセットなどに
182     割り当てられており、割り込み番号が後半の番号から始まることが
183     あるものもある為、最小値も指定できるようになっております。
184       指定した範囲の分しか、割り込み管理テーブルを生成しませんの
185     で、プロセッサでは定義されていても利用しない範囲を外すなどで
186     メモリの削減を行うことも可能です。
187
188
189 4.6 オブジェクトの最大IDの指定
190
191   【API】
192       KERNEL_MAX_TSKID(ID maxtskid);
193       KERNEL_MAX_SEMID(ID maxsemid);
194       KERNEL_MAX_FLGID(ID maxflgid);
195       KERNEL_MAX_DTQID(ID maxdtqid);
196       KERNEL_MAX_MBXID(ID maxmbxid);
197       KERNEL_MAX_MBFID(ID maxmbfid);
198       KERNEL_MAX_MPFID(ID maxmpfid);
199       KERNEL_MAX_CYCID(ID maxcycid);
200       KERNEL_MAX_ISRID(ID maxisrid);
201
202   【パラメータ】
203       ID      maxtskid    タスクIDの最大値
204       ID      maxsemid    セマフォIDの最大値
205       ID      maxflgid    フラグIDの最大値
206       ID      maxdtqid    データキューIDの最大値
207       ID      maxmbxid    メールボックスIDの最大値
208       ID      maxmbfid    メッセージバッファIDの最大値
209       ID      maxmpfid    固定長メモリプールIDの最大値
210       ID      maxcycid    周期ハンドラIDの最大値
211       ID      maxisrid    割込みサービスルーチンIDの最大値
212
213   【機能】
214       各オブジェクトのIDの最大値を指定します。
215       指定しない場合デフォルトでコンフィギュレーターで生成した
216     オブジェクトが利用している最大のID番号になります。
217
218   【補足】
219       cre_tsk や cre_sem といった、動的にオブジェクトを生成する
220     場合、ここで指定した範囲を超えるIDは利用出来ません。
221       利用するID範囲を適切な範囲に設定することで、メモリを有効に
222     利用することが可能です。
223
224
225 4.8 オブジェクトの予約
226
227   【API】
228       KERNEL_RES_TSKOBJ(ID tskobjno);
229       KERNEL_RES_SEMOBJ(ID semobjno);
230       KERNEL_RES_FLGOBJ(ID flgobjno);
231       KERNEL_RES_DTQOBJ(ID dtqobjno);
232       KERNEL_RES_MBXOBJ(ID mbxobjno);
233       KERNEL_RES_MBFOBJ(ID mbfobjno);
234       KERNEL_RES_MPFOBJ(ID mpfobjno);
235       KERNEL_RES_CYCOBJ(ID cycobjno);
236
237   【パラメータ】
238       ID      tskobjno    予約するタスクオブジェクト数
239       ID      semobjno    予約するセマフォオブジェクト数
240       ID      flgobjno    予約するセマフォオブジェクト数
241       ID      dtqobjno    予約するデータキューオブジェクト数
242       ID      mbxobjno    予約するメールボックスオブジェクト数
243       ID      mbfobjno    予約するメッセージバッファオブジェクト数
244       ID      mpfobjno    予約するメモリプールオブジェクト数
245       ID      cycobjno    予約する周期ハンドラオブジェクト数
246
247   【機能】
248       予約するオブジェクト数の指定を行ないます。この指定があると、
249     静的生成分に加えて予約数 xxxobjnoのオブジェクトがカーネルに登録
250     可能になります。
251
252   【補足】
253       基本的にはHOS_MAX_XXXIDと同じ用途のAPIですが、IDの最大値では
254     なく予約数(=静的生成分を除く利用可能なID数)を指定する点が異なり
255     ます。また、本APIは複数指定が許され、実際に予約されるオブジェクト
256     数は指定された予約数の総和となります。
257       HOS_MAX_XXXIDとは排他的な関係にあります。両方を同時に使用するこ
258     とは出来ません。
259
260
261
262 ------------------------------------------------------------------------------
263  end of file
264 ------------------------------------------------------------------------------