HOS を VC2008EE で動かす

windows上で動いたのでmemo。

ダウンロードしたのは20081206のスナップショット版。HOSはもともとVC60用のプロジェクトファイルを含んでいたが、そのまま2008用に自動変換するとコンパイル時に内部エラー(エラー番号:D8030)が発生したので、プロジェクトを1から作り直し。

コンフィギュレータとカーネルをビルドして、コンフィギュレータ動かして、サンプルプログラムのビルドをした。

とりあえず動いている模様。

オープンソースのiTRONフル実装

オープンソースiTRONのフル実装がないか調べたところ、TOPPERS/FI4 https://www.toppers.jp/fi4-kernel.html とHOS http://sourceforge.jp/projects/hos/ というのがあった。T-Kernel http://www.t-engine.org/T-Kernel/tkernel.htmlもいつの間にかソース配布を始めてた。自分の用途にはFI4かHOSが使えそう。

一応昨日の図を書き直し

TOPPERSのメインターゲットを考えてみる

TOPPERSiTRONの全関数が使えるわけではない。個人的に一番やっかいだと思ったのが cre_tsk() / cre_flg() といったOSリソースを稼働中に生成する関数がないことだ。

稼働中にOSリソースが作れないとライブラリを作るときに「最初に静的生成でスタックサイズ10KBのタスクをID何番〜何番まで3個作っておいてください。イベントフラグとセマフォもID何番〜何番まで3個必要です。その後main関数からxxx_start()関数を実行してください。」という指定が必要になるからだ。こんな方式のライブラリがいっぱいできると、

  1. 各ライブラリでIDが重複する可能性がある。
  2. 製品仕様でタスク数を変えたい場合(例えばHTTPサーバ)、複数の箇所を変更しないといけない

という問題がある。また、稼働中のリソース生成をサポートしている商用iTRONからOSを移植する時に初期化シーケンスを一から作り直す必要があるだろう。

TOPPERSが静的生成をサポートしない理由はきっとメインターゲットの要望にないから。その辺の関係を図にしてみた。

TOPPERSに主に口(&金&人)を出しているのはトヨタ関連企業、JAXAなので省メモリ、高信頼用の機能を優先しているのだろう。

参考URL

ネットでエラーメッセージを調べている時にふと気になってTOPPERS+ExpressEditionで検索したところ、2005の時に成功した例がいくつかあった。

  1. http://d.hatena.ne.jp/shikaku/20071010/p1
  2. http://blog.altemasoft.com/article/12572757.html
  3. http://masayuki.style.coocan.jp/hp/robowiki/?TOPPERS%2FJSP%A4%F2%BB%C8%A4%A6

どれもわかりやすくまとまってるし、そのままVS2008で使えそう。

ただみんなコンフィギュレータとシミュレータをコンパイルしたところで終わってるのが残念。

PlatformSDKのダウンロード

ATLが必要なプロジェクトをビルドするために
Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う(http://www.microsoft.com/japan/msdn/vstudio/express/2005/visualc/usingpsdk/)とかVisual Studio 2005 Express Edition(http://elku.at.infoseek.co.jp/memo/vc2005.html)を参考にVC2008EEを設定。

再度

  1. jsp\windev\devicecontrol\device.dsw

をビルドしたところコンパイルはできた。ただ最後にツールを起動しようとしてエラーになるのでプロジェクトのプロパティから「構成プロパティ」→「カスタムビルドステップ」→「コマンドライン」の項目を削除

TOPPERSを VC2008ExpressEditionで動かすことはできるかも

SendMessage()関数を調べたところMFCではなくWin32API関数であることが判明。動かない理由はダイアログを作るための hal_resouce.rc がコンパイルできないのだけが理由だった。VC2008Expressで新規Windowsアプリを作成したところ、リソースファイルは自動的に作られており、編集はできないけどコンパイルされている模様。ということでhal_resouce.rcと比較してインクルードヘッダを変更した結果toppers シミュレータが動くようになった。

他のコンパイルできなかったプロジェクトも念のため調べたが、

  1. jsp\windev\devicecontrol\device.dsw
  2. jsp\windev\devicemanager\devicemanager.dsw
  3. jsp\windev\watcher\watcher.dsw

の3つはATLのIConnectionPointImplクラスを使っているのでコンパイルできなかった。