SH4Aのハイエンド
5年前に製品を作った時、ルネサスのSH4Aを使った。クロックは400Mhz。最近その後継機を作る話が持ち上がったので今のSHのラインナップを調べたら600Mhzがハイエンドった。
一方アンロドイド端末が1Ghz超のプロセッサを使ってるから次はアンドロイドボードを採用だな
オープンソースの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のメインターゲットを考えてみる
TOPPERSはiTRONの全関数が使えるわけではない。個人的に一番やっかいだと思ったのが cre_tsk() / cre_flg() といったOSリソースを稼働中に生成する関数がないことだ。
稼働中にOSリソースが作れないとライブラリを作るときに「最初に静的生成でスタックサイズ10KBのタスクをID何番〜何番まで3個作っておいてください。イベントフラグとセマフォもID何番〜何番まで3個必要です。その後main関数からxxx_start()関数を実行してください。」という指定が必要になるからだ。こんな方式のライブラリがいっぱいできると、
- 各ライブラリでIDが重複する可能性がある。
- 製品仕様でタスク数を変えたい場合(例えばHTTPサーバ)、複数の箇所を変更しないといけない
という問題がある。また、稼働中のリソース生成をサポートしている商用iTRONからOSを移植する時に初期化シーケンスを一から作り直す必要があるだろう。
TOPPERSが静的生成をサポートしない理由はきっとメインターゲットの要望にないから。その辺の関係を図にしてみた。
TOPPERSに主に口(&金&人)を出しているのはトヨタ関連企業、JAXAなので省メモリ、高信頼用の機能を優先しているのだろう。
参考URL
ネットでエラーメッセージを調べている時にふと気になってTOPPERS+ExpressEditionで検索したところ、2005の時に成功した例がいくつかあった。
- http://d.hatena.ne.jp/shikaku/20071010/p1
- http://blog.altemasoft.com/article/12572757.html
- 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を設定。
再度
をビルドしたところコンパイルはできた。ただ最後にツールを起動しようとしてエラーになるのでプロジェクトのプロパティから「構成プロパティ」→「カスタムビルドステップ」→「コマンドライン」の項目を削除
TOPPERSを VC2008ExpressEditionで動かすことはできるかも
SendMessage()関数を調べたところMFCではなくWin32API関数であることが判明。動かない理由はダイアログを作るための hal_resouce.rc がコンパイルできないのだけが理由だった。VC2008Expressで新規Windowsアプリを作成したところ、リソースファイルは自動的に作られており、編集はできないけどコンパイルされている模様。ということでhal_resouce.rcと比較してインクルードヘッダを変更した結果toppers シミュレータが動くようになった。
他のコンパイルできなかったプロジェクトも念のため調べたが、
- jsp\windev\devicecontrol\device.dsw
- jsp\windev\devicemanager\devicemanager.dsw
- jsp\windev\watcher\watcher.dsw
の3つはATLのIConnectionPointImplクラスを使っているのでコンパイルできなかった。