Interface 6月号付録の SH-2 基板に、Linux 上でプログラミングについての第二回目として、リアルタイムOS について述べる。
HOSのダウンロード
リアルタイム OS は、フリーの ITRON 4.0 である HOS を用いた。
HOS には、リリース版の V4 と、開発版の V4 Advance がある。
本当は安定版である V4 の方が良かったのだが、V4 Advance のお知らせに「Interface2006年6月号付録SH2基板で動き始めました」とあったので、V4 Advance を使うことにした。だが、V4 Advance は、開発途中ということもあり、今後、変更される可能性も高いので、V4 にすべきだったかと思うこともある。
さて、HOS-V4 Advance のソースコードをダウンロードするのだが、これは、cvs を使う必要がある。もし、Debian Linux で、cvs をインストールしていなければ、
# apt-get install cvsとして、cvs をインストールしておくこと。
$ cd ~/
$ cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/hos login
Logging in to :pserver:anonymous@cvs.sourceforge.jp:2401/cvsroot/hos
CVS password: (パスワードは、改行のみ)
$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/hos co hos/hos-v4a
$ cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/hos logout
Logging out of :pserver:anonymous@cvs.sourceforge.jp:2401/cvsroot/hos
カーネルモジュールを作る
$ cd ~/hos/hos-v4a/kernel/build/sh/sh2/gcc
$ make -f gmake.mak
サンプルプログラムを作る
$ cd ~/hos/hos-v4a/sample/sh/sh7144/gcc/
ここで、gmake.mak の中の
h4acfg-sh2.exe を h4acfg-sh2 に変更する。
$ make -f gmake.mak
これで、sample.mot が作成される。
ただし、この sample.mot は、RAM 上で動作するものらしい。RAM を追加していない SH-2 基板では動かないようなので、動作チェックしていない。
ROM 化
HOS を使ったプログラムを ROM 化し、SH-2 内蔵のフラッシュ ROM に書き込めるようにした。
何故、ROM 化するかと言うと、SH-2 に RAM を接続すると、せっかく沢山ある I/O ピンの多くが使えなくなってしまうからだ。
また、実際に組み込み用途に使うことを考えると、電源を入れる度に、母艦となるパソコンから RAM にプログラムをアップするよりも、ROM 化した方が便利だ。
もう一つ、MMU が無く、メモリ保護の無い SH-2 のような CPU の場合、RAM 上にロードしたプログラムを書き換えてしまう可能性があるからだ。
万一の場合、ウォッチドックタイマなどで緊急対策用のプログラムに飛ぶように作っていても、飛び先のプログラムが消えていては何にもならない。その点、書き換えできない ROM 上にプログラムがあれば、大丈夫だ。もっとも、SH-2 で、そんな信頼性の必要なプログラムをするか、どうかは別問題だ。まさか、宇宙船の制御をするつもりなわけじゃない。(事も無いことも無いこともない・・・・・)
ROM 化のデメリットとしては、SH-2 の内蔵 ROM の書き換え回数は 100 回だそうで、これが制約になりかねない。
また、ROM 化すると、モニターが無いのでデバッガーを走らせられない事もデメリットと言われそうだ。実は、私はデバッガーを使わない人なので、この点については全く困らない。特にタイミングが命のリアルタイム OS だと、デバッガーを使ったデバッグは余り意味が無いので、この点は余りデメリットとはならないと思うのだが、いかがだろう。
ROM 化するプロセスを再現すると長くなるので、すぐに ROM 化できるようなサンプルプログラムを用意しておいた。
下記のファイルをダウンロードする。
「sh7144rom.tar.gz」をダウンロード(もし、ダウンロードしたファイルが「sh7144rom.tar.gz.gz」になっていたら、「sh7144rom.tar.gz」にリネームすること。)
$ cd ~/hos/hos-v4a/sample/sh/
$ tar zxvf sh7144rom.tar.gz
$ cd sh7144rom/gcc/
$ make -f gmake.mak
これで、ROM に書き込める sampleRom.mot ができる。
なお、sh7144rom.tgz に入っている regs_sh7144.h だが、元々のファイルのレジスタアドレスがいくつか間違っていたので訂正しておいた。ただし、全てを修正し尽くしたわけではないので、注意してもらいたい。
注意
ブログのコンテンツの内、「告知」など時期よって情報価値が無くなるのは除いてある。また、コンテンツに付いたコメントは書き込み者に著作権があるものと判断し、ここに持ってきていないので、コメントを見るときは、元々のブログコンテンツを参照してもらいたい。
その他、ブログ発表後、コメントなどの内容を反映するなど、内容を変更しているものもあるので、注意してほしい。