-------------------------------------------------------------------------------
 Hyper Oparating System V3 for Hitachi H8                                      
 リファレンスマニュアル                                                        
                                                                               
                                        Copyright (C) 1998-2002 by Project HOS 
-------------------------------------------------------------------------------



  このマニュアルでは Hyper Oparating System V3 for Hitachi H8 (以下 HOS-H8)の
利用しかたを説明します。



＜目次＞

  第１章  HOS-H8 の概要
  第２章  ライブラリのメイク方法
  第３章  コンフィギュレーターの使い方
  第４章  プログラムのメイク方法
  付録Ａ  謝辞
  付録Ｂ  参考文献




-------------------------------------------------------------------------------
 第１章  HOS-H8 の概要
-------------------------------------------------------------------------------


  HOS-H8 はμITRON3.0仕様に準拠した 日立 H8/300H シリーズ用のリアルタイム
ＯＳです。主に個人レベルでのホビーを目的とした物でＲＯＭ化するシステムに
リンクするだけで簡単に組み込むことが出来ます。コンパイラは有限会社秋月電子
通商殿から販売されているＣコンパイラとアセンブラを前提としていますが、恐らく
makefike や リンク用のファイルを修正するだけで日立製作所純正のＣコンパイラで
利用する事が可能と思います。



1.1 システムコール

  接続機能を除くレベルＳまでと一部のレベルＥ、Ｃのシステムコールをサポート
しています。
  サポートしているシステムコールは以下の通り。

タスク管理
  sta_tsk  ext_tsk  ter_tsk  dis_dsp  ena_dsp  chg_pri  rot_rdq  rel_wai
  get_tid  ref_tsk

タスク付属同期機能
  sus_tsk  rsm_tsk  frsm_tsk slp_tsk  wup_tsk  can_wup

同期・通信機能
  sig_sem  wai_sem  preq_sem ref_sem  set_flg  clr_flg  wai_flg  pol_flg
  ref_flg  snd_msg  rcv_msg  prcv_msg ref_mbx

割り込み管理機能
  ret_int  loc_cpu  unl_cpu

時間管理機能
  set_tim  get_tim  dly_tsk

メモリプール
  get_blf  pget_blf rel_blf  ref_mpf

システム管理
  get_ver  ref_sys


  各オブジェクトは全て静的に生成します。コンフィギュレーターを用意しており
ますので簡単に生成することが可能です。



1.2 スペック

  最大タスク数           255
  SUSPEND最大ネスト数    65535
  起床要求最大ネスト数   65535
  最大セマフォ数         255
  最大セマフォカウンタ   65535
  最大イベントフラグ数   255
  イベントフラグの種類   16 bit
  最大メイルボックス数   255




-------------------------------------------------------------------------------
 第２章  ソースファイルのメイク方法
-------------------------------------------------------------------------------


  HOS-H8 はソースで配布されますので利用するためにはまずソースをメイクして
オブジェクトファイルを生成する必要があります。秋月から販売されるコンパイラ
にはライブラリアンがありませんのでライブラリファイルは作れません。効率は悪い
のですが２つのオブジェクトファイルにすべてまとめてしまいます。この章では
ソースのメイク方法を説明します。



2.1 必要なアセンブラ、コンパイラ

  HOS-H8 をコンパイルするためには有限会社秋月電子通商から販売されている
AKI-H8用のＣコンパイラとアセンブラが必要です。付属マニュアルに沿って
これらをセットアップしておいて下さい。また make も必要となります。私は
「エル・エス・アイジャパン株式会社」より配布されている「LSI C-86 Ver.3.30
試食版」付属の make を利用しました。別途入手していただけますようお願い
いたします。

  以後の説明はアセンブラおよびコンパイラのディレクトリにパスが通り、利用
可能な状態になっていることを前提に進めます。



2.2 ヘッダファイルのコピー

  まずは配布ファイルを解凍した時に作られる INCLUDE というディレクトリの
下にあるファイルをコンパイルラの利用するディレクトリにコピーします。この
ヘッダファイルはソースのリンク時にも使用しますし、後からHOS-H8を利用
したアプリケーションを作製する際にもインクルードする必要があります。



2.3 メイクファイルなどの設定

  解凍時に出来た src というディレクトリに makefile が出来ますが、ヘッダ
ファイルのパス指定など一部環境に依存する設定項目があります。利用される
環境に合せて書き換えて下さい。



2.4 ライブラリのメイク

  全ての設定が終ったらいよいよメイクです。解凍時の src に makefile が
ありますので、このディレクトリに移動し make を実行してください。エラーが
無ければ hos_c.obj と hos_asm.obj というオブジェクトファイルが生成される
はずです。ライブラリアンがあればライブラリを作成するところなのですが、
秋月からは販売されていないようですので、Ｃ言語部分とアセンブラ部分でそれ
ぞれ強引に１つにまとめています。
  HOS-H8 の使用に際してこれらの２つのオブジェクトをリンクします。



2.3 コンフィギュレーターのコピー

  config というディレクトリに hcfgh8h.c というコンフィギュレーターのソース
と hcfgh8h.exe という hcfgh8h.c を Borland-C++ 5.01J でコンパイルした物を
用意しています。アプリケーション作成時に hcfgh8h.exe を利用しますので、これ
をパスの通ったディレクトリにコピーしておいてください。

  これで HOS-H8 を利用したアプリケーションを作製する準備が整いました。




-------------------------------------------------------------------------------
 第３章 コンフィギュレーターの使い方
-------------------------------------------------------------------------------


  この章では HOS-H8h のコンフィギュレーターの使い方を説明します。



3.1 コンフィギュレーターとは

  HOS-H8 ではタスクをはじめ、セマフォ、イベントフラグなどは静的に生成されま
す。そのためこれらを記述したプログラム書きコンパイル、リンクを行なう必要が
あります。しかしこれらのプログラムを毎回記述するのは面倒であるため、必要な
項目のみを書いたファイルを用意し、コンフィギュレーターを使いこのファイルから
必要なソースを生成させます。



3.2 コンフィギュレーターの機能

  コンフィギュレーターは次の機能を持ちます。

  ・最大優先度の指定
  ・割り込みハンドラの登録
  ・スタックプールの登録
  ・タスクの登録
  ・セマフォの登録
  ・イベントフラグの登録
  ・メイルボックスの登録



3.3 コンフィギュレーターの動作

  コンフィギュレーターはユーザーが用意した "hos.cfg" というファイルを読み込
んで解析し、"cfg_c.c"、"cfg_asm.asm"、"defid.h"という３つのファイルを出力し
ます。ユーザーは各プログラムの中で "defid.h" をインクルードして使い、メイク
時には "cfg_c.c"、"cfg_asm.asm" をそれぞれコンパイルしてリンクする必要があり
ます。

（注：現バージョンではファイル名が固定です。）



3.4 コンフィギュレーションファイルの書き方

  コンフィギュレーションファイル("hos.cfg")の書き方を説明します。

ファイル中には１行に１命令のみおくことが出来ます。また命令は一行に全て書いて
しまう必要があります。
  利用できる命令を以下に記します。

  INCLUDE_C     "cfg_c.c" で読み込むファイルの指定
  USE_TIMER     時間管理機能を利用することを宣言
  NOUSE_TIMER   時間管理機能を利用しないことを宣言
  MAX_TSKPRI    最大タスク優先度を指定
  SYSTEM_STACK  システム用のスタックポインタの指定
  CRE_SPL       スタックプールの作成
  CRE_TSK       タスクの登録
  CRE_TSKSP     スタックプールを使うタスクの登録
  CRE_SEM       セマフォの登録
  CRE_FLG       イベントフラグの登録
  CRE_MBX       メイルボックスの登録
  CRE_MPF       固定長メモリプールの登録
  DEF_INT       割り込みハンドラの登録


  具体的な例は解凍時に出来た sample というディレクトリにありますので参照して
ください。ここでは個々の命令を簡単に説明します。


INCLUDE_C  Ｃ言語ファイル用インクルードファイル指定
  文法： INCLUDE_C("filename.h")

  "cfg_c.c" でインクルードするファイルを指定します。"cfg_c.c" ではタスク
開始時の関数などが利用されますので、それらを宣言したヘッダファイルのイン
クルードが必要です。この命令にて指定してください。
  なお、<ITRON.h> は自動的に先頭に読み込まれます。


USE_TIMER  タイマ利用
  文法： USE_TIMER (デフォルト)

  時間管理機能を使うことを宣言します。ただし実際に機能を使うには定期的に
__time_handler を呼び出すようにする必要があります。
  時間管理用のシステムコールを呼び出さなければ USE_TIMER を指定しても問題は
無いのでデフォルトとなっています。


NOUSE_TIMER  タイマ未使用
  文法： NOUSE_TIMER

  時間管理機能を使わないことを宣言します。時間管理用のメモリを確保しなく
なります。


MAX_TSKPRI  最大タスク優先度指定
  文法： MAX_TSKPRI(maxtskpri)

  maxtskpri : 最大優先度

  最大優先度を指定します。範囲のエラーチェックは行なっていないので指定する
際は実際に使っている優先度を良く確認してください。


SYSTEM_STACK  システム用スタックアドレス指定
  文法： SYSTEM_STACK(stackadr)

  stackadr  : スタックポインタのアドレス

  スタートアップ時や非タスク部でシステムが利用するスタックポインタの初期値
を指定します。デフォルトは 0xfff10 です。通常はRAMの最後を指定します。


CRE_SPL  スタックプールの作成
  文法： CRE_SPL(ID_SPL, splcnt, splsz)

  ID_SPL    : スタックプールＩＤ定義名
  splcnt    : スタックの個数
  splsz     : スタックのサイズ

  タスク間で共有できるスタックを作成します。スタックプールを利用する
タスクは sta_tsk 時にここで作成したスタックプールからスタック領域の
割り当てを受けます。
  μITRON3.0の仕様外の独自実装です。


CRE_TSK  タスク生成
  文法： CRE_TASK(ID_TASK, exinf, func, itskpri, stacksize)

  ID_TASK   : タスクＩＤ定義名
  exinf     : 拡張情報
  func      : タスク開始関数名  void func(int stcd)
  itskpri   : タスク優先度初期値 1〜8
  stacksize : スタックサイズ

  タスクＩＤは自動的に振られ "defid.h" に

  #define ID_TASK 1

  といった形で出力されます。この項目に数値を指定すると直接ID番号を
指定することが出来ます。


CRE_TSKSP  タスク生成
  文法： CRE_TSKSP(ID_TASK, exinf, func, itskpri, splid)

  ID_TASK   : タスクＩＤ定義名
  exinf     : 拡張情報
  func      : タスク開始関数名  void func(int stcd)
  itskpri   : タスク優先度初期値 1〜8
  splid     : スタックプールのＩＤ

  DOMANT状態でなくなるときに指定されたスタックプールからスタックを
割り当てます。割り当てるスタックが無い場合は「スタック待ち」という
HOS独自の状態となります。
  この機構により、同時にレディ状態になるタスクの数だけスタックを用意
して共有することが出来ます。


CRE_SEM  セマフォ生成
  文法： CRE_SEM(ID_SEM, exinf, isemcnt, maxsem)

  ID_SEM    : セマフォＩＤ定義名
  exinf     : 拡張情報
  isemcnt   : セマフォの初期値
  maxsem    : セマフォの最大値


CRE_FLG  イベントフラグ生成
  文法： CRE_SEM(ID_FLG, exinf, iflgptn)

  ID_FLG    : イベントフラグＩＤ定義名
  exinf     : 拡張情報
  iflgptn   : イベントフラグ初期値


CRE_MBX  メイルボックス生成
  文法： CRE_MBX(ID_MBX, exinf, bufsize)

  ID_MBX    : メイルボックスＩＤ定義名
  exinf     : 拡張情報
  bufcnt    : バッファのサイズ


CRE_MPF  固定長メモリプール生成
  文法： CRE_MPF(ID_MPF, exinf, mpfcnt, mpfsz)

  ID_MBX    : メイルボックスＩＤ定義名
  exinf     : 拡張情報
  mpfcnt    : ブロック数
  mpfsz     : １ブロックのサイズ(Byte) ２以上であること


DEF_INT  割り込みハンドラ定義
  文法： DEF_INT(intnum, func)

  intnum    : 割り込み番号 1〜60
  func      : 割り込みハンドラ（Ｃ言語の関数）

  レジスタの待避、スタックの切り替え後 void func(void) が呼ばれます。
  なお多重割り込みにも対応していますので割り込みルーチン内で割り込みを
許可してもかまいません。



3.5 備考

  "cfg_c.c" に展開されるパラメーターのほとんどは数値としてではなく文字列と
してそのまま展開します。そのためエラーチェック能力はほとんどありませんが、
数式を入力したり、INCLUDE_C 命令で読み込むヘッダファイル中のマクロを利用
することが出来ます。




-------------------------------------------------------------------------------
 第４章  プログラムの作成方法                                                  
-------------------------------------------------------------------------------


  この章では実際に HOS-H8 を使ったプログラムを作成する方法を説明します。



4.1 スタートアップルーチン

  普通のＣ言語のプログラムは main 関数から始まりますが、HOS-H8 では
  start_up という関数から始まります。

  void start_up(void)

  という関数を必ず用意してください。

  このスタートアップルーチンは非タスク部として扱われ、割り込みは許可された
状態で呼び出されます。普通はここで変数の初期化やデバイス初期設定を行いタスク
をスタートさせたりします。タスクを一切使わず割り込みだけで処理するなどという
場合は普通の mian 関数として使えます。
  リターン後にディスパッチが開始されます。


4.2 時間管理機能

  時間管理機能を使うためには __time_handler というハンドラを定期的に呼び出す
必要があります。非タスク部から定期的に呼ぶか、インターバルタイマを設定して
割り込みアドレスに __time_handler を指定してください。
  なお、一回呼び出すごとに進む時間を設定する vset_tmi(timint) というマクロを
用意しています。デフォルトで１が設定されていますが vset_tim(5) と宣言しておけ
ば 5msec 間隔で呼び出しても時間は 1msec 単位となります。
  荒業ですが、2.5msec単位で呼び出して vset_tim(2)とvset_tim(3) を交互に呼ぶ
などということも出来ます。特に msec 単位である必要がある場合は利用してくださ
い。


4.3 メイク

  メイクの際には作製したソースのほかにコンフィギュレーターが出力した cfg_c.c
と cfg_asm.asm の２種類をそれぞれコンパイルする必要があります。この時、
cfg_asm.asm から生成される cfg_asm.obj がスタートアップルーチンとなりますので
これを先頭にしてリンクを行って下さい。




-------------------------------------------------------------------------------
 第５章  サンプルのメイク                                                      
-------------------------------------------------------------------------------


5.1 サンプルの概要

  簡単なサンプルを用意しています。CSI(チャンネル１）を用いてＰＣと通信
するものですが、タスク１はＰＣから送った文字を１文字ずらしてエコーバックし、
タスク２は始めの１０秒間、１秒おきに現在時刻をＰＣに表示するというものです。


5.2 メイクの前に

  サンプルは解凍時にできる sample というディレクトリに展開されます。まずは
作成した hos_c.obj と hos_asm.obj をこのディレクトリにコピーして下さい。
  次に makefile のパスの指定などをご利用の環境に合せて書き換えて下さい。
  また、lnk.sub というリンク時のサブファイルもメモリ構成などに応じて書き
換えてください。


5.3 メイク

  make を実行すると sample.mot というモトローラＳファイルが生成される
はずです。
  これをメモリに転送して動作すれば成功です。




-------------------------------------------------------------------------------
  付録Ａ  謝辞
-------------------------------------------------------------------------------

  TRONプロジェクトというすばらしいものを生み出してくださいました東京大学の
坂村先生、ITRONに大きな貢献をされ MLでもお世話になりました豊橋技術科学大学の
高田広章先生、素人の私にこころよく助言くださった ITRON-Club メイリングリスト
の方々に厚く御礼申し上げます。
  gcc用に移植下さりバグレポもたくさん頂いた細渕氏、いつも掲示板で
心強いご意見を下さる濱氏、Shunji氏、致命的なバグに突っ込んでくださった
k-sasaki氏、いつも貴重なご意見を下さる teruk氏、pen氏、teruk氏、その他
大勢の方々、本来の研究とあまり関係無いのに開発環境を提供下さった九州
工業大学の高野先生、私の卒業後研究でHOS使ってくれてる石川君、この場を
お借りして厚く御礼申し上げます。




-------------------------------------------------------------------------------
 付録Ｂ  参考文献
-------------------------------------------------------------------------------

  このプログラムの作成にあたり参考とした文書を以下に記します。
「μITRON3.0標準ハンドブック」は手元に置かれることをお勧めいたします。
 http://tron.um.u-tokyo.ac.jp/TRON/ITRON/home-j.html から英語版の
 ダウンロードが出来るようです。


  μITRON3.0標準ハンドブック  改訂新版
     監修 坂村 健   パーソナルメディア
     ISBN4-89362-154-8  \4,000+税

  ITRON・μITRON標準ハンドブック
     監修 坂村 健   パーソナルメディア
     ISBN4-89362-079-7  \4,800+税

  TRON標準ガイドブック2
     監修 坂村 健   パーソナルメディア
     ISBN4-89362-133-5  \3,500+税

  TRONWARE Vol.3 リアルタイムＯＳ ITRON入門
     パーソナルメディア
     ISBN4-89362-071-1  \1,204+税

  TRONWARE Vol.5 シングルチップCPU向けリアルタイムＯＳ μITRON入門
     パーソナルメディア
     ISBN4-89362-076-2  \1,204+税




-------------------------------------------------------------------------------
 end of file                                                                   
-------------------------------------------------------------------------------
