------------------------------------------------------------------------------
  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                      
    コンフィギュレーター ドキュメント                                         
                                                                              
                                       Copyright (C) 1998-2003 by Project HOS 
                                       http://sourceforge.jp/projects/hos/    
------------------------------------------------------------------------------



1. 概要

  本ドキュメントは Hyper Operating System V4（以下 HOS-V4）の
コンフィギュレーター(hos4cfg)についての説明を記載します。



2. コンフィギュレーターのメイク

  hos-v4/config 以下にコンフィギュレーターのソースファイルがあります。
まずは、これをメイクして、hos4cfg を作る必要があります。
  Windows用ですと、無償で利用できる Borland-C++ Ver 5.5 用のメイク
ファイルが bcc55.mak 、gcc環境ですと、gcc.mak がありますので
これらを参考にメイクを行って、出来上がった hos4cfg をパスの通った
ディレクトリに配置してください。



2. コンフィギュレーターの使い方

  コンフィギュレーターの仕様自体も、μITRON4.0 仕様によって定められて
おりますので、まずは http://www.assoc.tron.org/itron/SPEC/mitron4-j.html
より配布の、仕様書をご一読されることをお勧めします。
  大雑把な流れとしましては、静的APIを記載いただきました、system.cfg を
Cプリプロセッサで処理していただいた後に、hos4cfg で処理することにより
kernel_id.h(IDなどを宣言したヘッダファイル)と、kernel_cfg.c(カーネル
オブジェクトの静的生成など）が作成されます。
  後は、kernel_cfg.c をコンパイルしてリンクすることで、HOS-V4が利用可能と
なります。



3. HOS-V4で利用できる静的API一覧

  μITRON4.0 標準 API
    CRE_TSK, DEF_TEX, CRE_SEM, CRE_FLG, CRE_DTQ, CRE_MBX, CRE_MBF,
    CRE_MPF, CRE_CYC, ATT_ISR, ATT_INI, INCLUDE

  HOS-V4 独自 API
    HOS_IDL_STK, HOS_INT_STK, HOS_INT_SP, HOS_MAX_TPRI, HOS_KERNEL_HEAP,
    HOS_TIM_TIC, HOS_MIN_INTNO, HOS_MAX_INTNO, HOS_MAX_TSKID,
    HOS_MAX_SEMID, HOS_MAX_FLGID, HOS_MAX_DTQID, HOS_MAX_MBFID,
    HOS_MAX_MBXID,HOS_MAX_MPFID, HOS_MAX_CYCID, HOS_MAX_ISRID



4. 静的APIの説明

  μITRON4.0 標準 API については μITRON4.0 仕様 をご参照ください。
   ここでは HOS 独自 API についてのみ説明いたします。


4.1 アイドル時のスタックの指定

  【API】
      HOS_IDL_STK(SIZE idlstksz, VP idlstk);

  【パラメータ】
      SIZE   idlstksz     アイドル時のスタックのサイズ
      VP     idlstk       アイドル時のスタック

  【機能】
      カーネルは実行するタスクがない場合、カーネル内部でアイドルループを
    実行します。本APIではアイドルループ実行中のスタックを指定します。
      idlstk に指定されたアドレスから、idlstksz で指定されたサイズ分の
    メモリ領域をアイドル時のスタックに割り当てます。
      idlstk に NULL を指定した場合、idlstksz で指定されたサイズをコンフィ
    ギュレーターが自動的に確保します。
      指定しない場合デフォルトでサイズは128となります。

  【補足】
      アイドル時の必要スタック量は、割込み時に割り込み用スタックに
    切り替わるまでの最低限のワークとレジスタ退避分です。
      必要な量はプロセッサやコンパイラなどの環境に依存する為、別途
    最適な値を定義できる仕様になっております。


4.2 割込み時のスタックの指定

  【API】
      HOS_INT_STK(SIZE intstksz, VP intstk);
      HOS_INT_SP(VP intsp);

  【パラメータ】
      SIZE   intstksz     割込み時のスタックのサイズ
      VP     intstk       割込み時のスタック
      VP     intsp        割込み時の初期スタックポインタ値

  【機能】
      割り込みが発生した場合、スタックは割込み用スタックに切り替わります。
      本APIでは割込み時に切り替えるスタックを指定します。
      HOS_INT_STK と HOS_INT_SP は同時には利用できず、どちらか片方を利用して
    指定を行います。
      HOS_INT_STK では、intstk に指定されたアドレスから、intstksz で指定
    されたサイズ分のメモリ領域を割込み時のスタックに割り当てます。
      intstk に NULL を指定した場合、intstksz で指定されたサイズをコンフィ
    ギュレーターが自動的に確保します。
      HOS_INT_SP では、intsp に割込み発生時のスタックポインタ値を直接指定
    できます。
      どちらのAPIも指定しない場合、コンフィギュレーターは割込み用スタック
    ポインタを生成しません。別途割込み時の初期スタックポインタ値を格納した
    const VP 型 の kernel_int_sp というグローバル変数を定義してください。

  【補足】
      割込み時のスタックは起動時の初期スタック値と共有できる為、スタート
    アップルーチンにて、kernel_int_sp を定義する方が便利な場合が考えられます。
      その為、デフォルトで kernel_int_sp を生成しない仕様にしております。


4.3 最大タスク優先度の指定

  【API】
      HOS_MAX_TPRI(PRI maxpri);

  【パラメータ】
      PRI     maxpri      利用する最大優先度

  【機能】
      カーネル内部で確保する、レディーキューの数を変更します。
      レディーキューは優先度の数だけ用意されますので、利用する
    優先度の数を明示的に宣言することでメモリの節約が可能となります。
      指定しない場合デフォルトで 16 となります。


4.4 カーネルヒープサイズの指定

  【API】
      HOS_KERNEL_HEAP(SIZE heapsize);

  【パラメータ】
      SIZE   heapsize     生成するカーネル用ヒープメモリのサイズ

  【機能】
      cre_tsk、cre_sem などの、オブジェクトの動的生成を行う API を利用した
    場合にカーネルが割り当てるヒープメモリのサイズを指定します。
      オブジェクトの動的生成を利用しない場合には不要です。
      指定しない場合デフォルトでサイズ0となり、オブジェクトの動的生成は
    出来なくなります。


4.5 タイムティックの周期の指定

  【API】
      HOS_TIM_TIC(UW nume, UW deno);

  【パラメータ】
      UW      nume        タイムティックの周期の分子
      UW      deno        タイムティックの周期の分母

  【機能】
      isig_tim にてカーネルに供給するタイムティックの周期を指定します。
      例えば、周期に 10/1 を指定した場合、isig_tim を１回呼び出すごとに
    カーネルのシステム時刻は10進みます。
      逆に 1/3 などを指定した場合には、isig_tim を 3回呼び出して初めて
    システム時刻は1進みます。
      指定しない場合デフォルトで 1/1 となります。

  【補足】
      例えば 周期が 3.333... ms のインターバルタイマにて、isig_tim を
    呼び出し、システムの単位時間を ms に統一したい場合などは 10/3 を
    指定すれば、isig_tim を 呼び出すごとに、3, 3, 4, 3, 3, 3, 4...
    といった順序で3回の isig_tim の呼び出しで、システム時刻が 10 進む
    ようになります。


4.6 割り込み番号の範囲の指定

  【API】
      HOS_MIN_INTNO(INTNO minintno);
      HOS_MAX_INTNO(INTNO maxintno);

  【パラメータ】
      INTNO   minintno    割り込み番号の最小値
      INTNO   maxintno    割り込み番号の最大値

  【機能】
      割り込み番号の最大値と最小値を指定します。
      プロセッサにより利用できる割り込み範囲が異なりますのでここで
    指定してください。
      利用可能な値は、0を含む正の値となります。
      指定しない場合デフォルトで最大、最小共に 0 となります。

  【補足】
     プロセッサによっては、前半がプロセッサ例外やリセットなどに
    割り当てられており、割り込み番号が後半の番号から始まることが
    あるものもある為、最小値も指定できるようになっております。
      指定した範囲の分しか、割り込み管理テーブルを生成しませんの
    で、プロセッサでは定義されていても利用しない範囲を外すなどで
    メモリの削減を行うことも可能です。


4.7 オブジェクトの最大IDの指定

  【API】
      HOS_MAX_TSKID(ID maxtskid);
      HOS_MAX_SEMID(ID maxsemid);
      HOS_MAX_FLGID(ID maxflgid);
      HOS_MAX_DTQID(ID maxdtqid);
      HOS_MAX_MBXID(ID maxmbxid);
      HOS_MAX_MBFID(ID maxmbfid);
      HOS_MAX_MPFID(ID maxmpfid);
      HOS_MAX_CYCID(ID maxcycid);
      HOS_MAX_ISRID(ID maxisrid);

  【パラメータ】
      ID      maxtskid    タスクIDの最大値
      ID      maxsemid    セマフォIDの最大値
      ID      maxflgid    フラグIDの最大値
      ID      maxdtqid    データキューIDの最大値
      ID      maxmbxid    メールボックスIDの最大値
      ID      maxmbfid    メッセージバッファIDの最大値
      ID      maxmpfid    固定長メモリプールIDの最大値
      ID      maxcycid    周期ハンドラIDの最大値
      ID      maxisrid    割り込みサービスルーチンIDの最大値

  【機能】
      各オブジェクトのIDの最大値を指定します。
      指定しない場合デフォルトでコンフィギュレーターで生成した
    オブジェクトが利用している最大のID番号になります。

  【補足】
      cre_tsk や cre_sem といった、動的にオブジェクトを生成する
    場合、ここで指定した範囲を超えるIDは利用出来ません。
      なお、ここで指定した値は、カーネル内部での ID とオブジェクトを
    結びつけるテーブルのサイズに影響します。動的生成時にオブジェクト
    そのもののメモリはカーネルヒープから別途確保されます。


4.8 オブジェクトの予約

  【API】
      HOS_RES_TSKOBJ(ID tskobjno);
      HOS_RES_SEMOBJ(ID semobjno);
      HOS_RES_FLGOBJ(ID flgobjno);
      HOS_RES_DTQOBJ(ID dtqobjno);
      HOS_RES_MBXOBJ(ID mbxobjno);
      HOS_RES_MBFOBJ(ID mbfobjno);
      HOS_RES_MPFOBJ(ID mpfobjno);
      HOS_RES_CYCOBJ(ID cycobjno);

  【パラメータ】
      ID      tskobjno    予約するタスクオブジェクト数
      ID      semobjno    予約するセマフォオブジェクト数
      ID      flgobjno    予約するセマフォオブジェクト数
      ID      dtqobjno    予約するデータキューオブジェクト数
      ID      mbxobjno    予約するメールボックスオブジェクト数
      ID      mbfobjno    予約するメッセージバッファオブジェクト数
      ID      mpfobjno    予約するメモリプールオブジェクト数
      ID      cycobjno    予約する周期ハンドラオブジェクト数

  【機能】
      予約するオブジェクト数の指定を行ないます。この指定があると、
    静的生成分に加えて予約数 xxxobjnoのオブジェクトがカーネルに登録
    可能になります。

  【補足】
      基本的にはHOS_MAX_XXXIDと同じ用途のAPIですが、IDの最大値では
    なく予約数(=静的生成分を除く利用可能なID数)を指定する点が異なり
    ます。また、本APIは複数指定が許され、実際に予約されるオブジェクト
    数は指定された予約数の総和となります。
      HOS_MAX_XXXIDとは排他的な関係にあります。両方を同時に使用するこ
    とは出来ません。



------------------------------------------------------------------------------
 Copyright (C) 1998-2003 by Project HOS                                       
------------------------------------------------------------------------------
