1 ------------------------------------------------------------------------------
2 Hyper Operating System V4 Advance --μITRON4.0仕様OS
5 Copyright (C) 1998-2007 by Project HOS
6 http://sourceforge.jp/projects/hos/
7 ------------------------------------------------------------------------------
17 本ドキュメントは Hyper Operating System V4 Advance (以下 HOS-V4a)の
18 コンフィギュレーター(h4acfg)についての説明を記載します。
24 cfgrtr ディレクトリ以下にコンフィギュレーターのビルド用ファイル一式が
26 コンフィギュレーターはターゲットプロセッサ毎に生成され、カーネル
33 コンフィギュレーターの仕様自体も、μITRON4.0 仕様によって定められて
35 本ドキュメントはμITRON4.0仕様をご理解いただいていいることを前提と
36 しております。μITRON4.0仕様書はインターネットで無償公開されて
37 おりますので、別途入手の上、ご確認ください。
39 基本的な処理の流れとしては、静的APIを記載した、system.cfg を
40 Cプリプロセッサで処理した後に、h4acfg で処理することにより、
41 kernel_id.h(IDなどを宣言したヘッダファイル)と、kernel_cfg.c(カーネル
43 その後に後は、kernel_cfg.c をコンパイルしてリンクすることで、HOS-V4aが
49 h4acfgでは μITRON4.0仕様 で定める静的APIの他に下記のAPIを
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
62 μITRON4.0 標準 API については μITRON4.0 仕様 をご参照ください。
63 ここでは HOS 独自 API についてのみ説明いたします。
70 KERNEL_HEP_MEM(SIZE hepsz, VP hep);
73 SIZE hepsz カーネルのヒープメモリのサイズ
77 カーネルは各種動的オブジェクト生成(cre_xxxやacre_xxx)にて、
78 オブジェクトを生成する場合、カーネルのヒープからメモリを
80 本APIではカーネルのヒープメモリを指定します。
81 hep に指定されたアドレスから、hepsz で指定されたサイズ分の
82 メモリ領域をアイドル時のスタックに割り当てます。
83 hep に NULL を指定した場合、hepsz で指定されたサイズを
90 KERNEL_SYS_STK(SIZE sysstksz, VP sysstk);
93 SIZE sysstksz システムタスクのスタックのサイズ
94 VP sysstk システムタスクのスタック
97 カーネルは実行するタスクがない場合のアイドルループ実行や、必要に応じて
98 一部の処理をカーネル内部のシステムタスクにて実行します。
99 本APIではシステムタスクのスタックを指定します。
100 sysstk に指定されたアドレスから、sysstksz で指定されたサイズ分の
101 メモリ領域をアイドル時のスタックに割り当てます。
102 sysstk に NULL を指定した場合、sysstksz で指定されたサイズをコンフィ
104 未指定の場合、デフォルトでプロセッサ毎に最低限必要なサイズが割り当て
105 られますが、アイドル時の例外処理等でスタックを大量に消費する場合は
112 KERNEL_INT_STK(SIZE intstksz, VP intstk);
113 KERNEL_INT_SP(VP intsp);
116 SIZE intstksz 割込み時のスタックのサイズ
118 VP intsp 割込み時の初期スタックポインタ値
121 割り込みが発生した場合、スタックは割込み用スタックに切り替わります。
122 本APIでは割込み時に切り替えるスタックを指定します。
123 KERNEL_INT_STK と KERNEL_INT_SP は同時には利用できず、どちらか片方を
125 KERNEL_INT_STK では、intstk に指定されたアドレスから、intstksz で指定
126 されたサイズ分のメモリ領域を割込み時のスタックに割り当てます。
127 intstk に NULL を指定した場合、intstksz で指定されたサイズをコンフィ
129 KERNEL_INT_SP では、intsp に割込み発生時のスタックポインタ値を直接指定
133 割込み用のスタックポインタ初期値は _kernel_int_isp の名称で生成されます。
134 通常、起動時のスタートアップルーチン実行時のスタックと割込み用のスタックは
135 共有できる為、スタートアップルーチンにて、_kernel_int_sp を参照して利用する
142 KERNEL_TIM_TIC(UW nume, UW deno);
145 UW nume タイムティックの周期の分子
146 UW deno タイムティックの周期の分母
149 isig_tim にてカーネルに供給するタイムティックの周期を指定します。
150 例えば、周期に 10/1 を指定した場合、isig_tim を1回呼び出すごとに
152 逆に 1/3 などを指定した場合には、isig_tim を 3回呼び出して初めて
154 指定しない場合デフォルトで 1/1 となります。
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 進む
167 KERNEL_MIN_INTNO(INTNO minintno);
168 KERNEL_MAX_INTNO(INTNO maxintno);
171 INTNO minintno 割り込み番号の最小値
172 INTNO maxintno 割り込み番号の最大値
175 割り込み番号の最大値と最小値を指定します。
176 プロセッサのリビジョンにより利用できる割り込み範囲が異なったり、
177 用途として使う範囲が狭い場合、本APIで範囲を限定し、割込み管理テーブルの
181 プロセッサによっては、前半がプロセッサ例外やリセットなどに
182 割り当てられており、割り込み番号が後半の番号から始まることが
183 あるものもある為、最小値も指定できるようになっております。
184 指定した範囲の分しか、割り込み管理テーブルを生成しませんの
185 で、プロセッサでは定義されていても利用しない範囲を外すなどで
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);
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の最大値
214 各オブジェクトのIDの最大値を指定します。
215 指定しない場合デフォルトでコンフィギュレーターで生成した
216 オブジェクトが利用している最大のID番号になります。
219 cre_tsk や cre_sem といった、動的にオブジェクトを生成する
220 場合、ここで指定した範囲を超えるIDは利用出来ません。
221 利用するID範囲を適切な範囲に設定することで、メモリを有効に
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);
238 ID tskobjno 予約するタスクオブジェクト数
239 ID semobjno 予約するセマフォオブジェクト数
240 ID flgobjno 予約するセマフォオブジェクト数
241 ID dtqobjno 予約するデータキューオブジェクト数
242 ID mbxobjno 予約するメールボックスオブジェクト数
243 ID mbfobjno 予約するメッセージバッファオブジェクト数
244 ID mpfobjno 予約するメモリプールオブジェクト数
245 ID cycobjno 予約する周期ハンドラオブジェクト数
248 予約するオブジェクト数の指定を行ないます。この指定があると、
249 静的生成分に加えて予約数 xxxobjnoのオブジェクトがカーネルに登録
253 基本的にはHOS_MAX_XXXIDと同じ用途のAPIですが、IDの最大値では
254 なく予約数(=静的生成分を除く利用可能なID数)を指定する点が異なり
255 ます。また、本APIは複数指定が許され、実際に予約されるオブジェクト
257 HOS_MAX_XXXIDとは排他的な関係にあります。両方を同時に使用するこ
262 ------------------------------------------------------------------------------
264 ------------------------------------------------------------------------------