« September 2006 | Main | November 2006 »

October 28, 2006

告知

11月2日(木曜日)に、新宿・ロフトプラスワンで行われる「ロケットまつりS」に呼ばれて、ゲスト出演する予定。

| | Comments (2) | TrackBack (1)

October 13, 2006

SH-2 Linux上でのリアルタイム OS 開発環境 (その5 HOSのバージョンをV4にする編)

既に述べてあるが、V4a だと周期ハンドラが無かったり、割込み処理でハングアップしたりと不安定な事が判った。同様のプログラムを、V4 で動かしたところ、全く問題なく安定して動作した。

どうも、V4a は開発途中で不安定なようだ。
と言うわけで、今回は、HOS のバージョンを V4 にする話だ。

HOSのダウンロードと解凍及びコンフィギュレーターとライブラリの構築
HOSから、h4_101a.tgzをダウンロード

$ cd ~/
$ tar zxvf h4_101a.tgz
$ cd hos-v4/config/
$ make -f gcc.mak
# cp hos4cfg /usr/cross/bin/
$ cd ../lib/sh/sh2gcc/

ここで、h4sh2.makの中の

sh-hms-gccをsh-elf-gccに
sh-hms-arをsh-elf-arに
sh-hms-ranlibをsh-elf-ranlibに変更する。

$ make -f h4sh2.mak

SH7045用のサンプルプログラムを構築

$ cd ~/hos-v4/sample/sh2gcc/

ここで、gcc.makの中の

sh-hms-gccをsh-elf-gccに
sh-hms-arをsh-elf-arに
sh-hms-objcopyをsh-elf-objcopyに変更する。

また、sample.x に次の行を追加する。

<<< 最初略 >>>
.text :
{
_TEXT_START = . ;
*(.vector)
*(.text)
*(.strings)
*(.rodata)
*(.rodata.*) << この行を追加。
_TEXT_END = . ;
} > rom
<<< 最後略 >>>

$ make -f gcc.mak

なお、私は、SH7045 を持っていないので、上でコンパイルしたプログラムが動作するか確認していない。

ROM 化
「sh7144rom01.tar.gz」をダウンロード

$ cd ~/hos-v4/sample/
$ tar zxvf sh7144rom01.tar.gz
$ cd sh7144rom01/
$ make -f make -f gcc.mak

できた sampleRom.mot を SH-2 ボードに書き込むと、「いわゆる哲学者の食事の問題」を実行する。

ハードウェア操作
「sh7144hw01.tar.gz」をダウンロード

$ cd ~/hos-v4/sample/
$ tar zxvf sh7144hw01.tar.gz
$ cd sh7144hw01/
$ make -f make -f gcc.mak

できた sampleRom.mot を SH-2 ボードに書き込むと、ハードウェアを操作するプログラムを実行する。

| | Comments (2) | TrackBack (0)

October 11, 2006

ココログのファイル管理

どうも、SH-2 のプログラムソースをアップロードすると、ココログの機能か、勝手に gzip 圧縮されてしまうらしい。
今のところ、ごまかしてアップロードしているが、上手くダウンロードできなかったり、解凍できなかったりしたら、御報告してほしい、よろしくお願い。

と、まあ、SH-2 のリアルタイム OS の話題を続けているが、次回から HOS のバージョンを V4a から V4 に戻す。
実は、周期的な処理や割込み等を試したのだが、V4a だと周期ハンドラが無かったり、割込み処理でハングアップしたりと不安定な事が判ったのだ。
ところが、同様のプログラムを、V4 で動かしたところ、全く問題なく安定して動作した。

やはり、V4a は開発途中で不安定なようだ。と言うわけで、次回からは、HOS-V4 の話題になる。
私に付き合ってくれて、HOS-V4a の導入をしてくれた人には、誠に申し訳ない。

| | Comments (2) | TrackBack (0)

October 08, 2006

SH-2 Linux上でのリアルタイム OS 開発環境 (その4 ハードウェア操作編)

E070この週末も大風が吹いていて、模型飛行機は飛ばせない。引き続いて、SH-2 ボードでリアルタイム OS を使う方法の説明をしよう。

今回説明するのは、ハードウェアを直接叩く方法である。わざわざ、ROM 化したのは、IO ポートを沢山使うためだ。せっかくだから、その沢山使える IO ポートを使う方法を説明する。

簡単に試せるように、押しボタンスイッチと LED だけで作れるテスト回路を図に示した。
IO ポートは贅沢な使い方をしているが、説明のためである。
なお、押しボタンスイッチと C ポートや D ポートの間にある抵抗は、間違って、C ポートや D ポートをアウトプットに設定しても、SH-2 を壊さないようにする保護のためのものだ。

下が、サンプルプログラムだ。
「sh7144hw00.tar.gz」をダウンロード
(もし、ダウンロードしたファイルが「sh7144hw00.tar.gz.gz」になっていたら、「sh7144hw00.tar.gz」にリネームすること。)

次のような操作でコンパイルできる。

$ cd ~/hos/hos-v4a/sample/sh/
$ tar zxvf sh7144hw00.tar.gz
$ cd sh7144hw00/gcc/
$ make -f gmake.mak

ソースコード中、main.c の中で、RAM を読み書きするバスを全て IO ポートに使えるように設定している。今回の例では、 B ポートを出力に、C ポートと D ポートを入力に設定している。応用するときは、この辺を参考にしてみると良いだろう。

コードをコンパイルし、SH-2 ボードに書き込み、実行させると、シリアルポートに押しボタンスイッチの状態を表示すると共に、LED の点灯にも出力する。
また、SH-2 ボード上の LED も点滅させる。

簡単な例だが、HOS を使って、ハードウェアを操作させる方法の理解になれば、幸いである。

| | Comments (0) | TrackBack (0)

October 06, 2006

SH-2 Linux上でのリアルタイム OS 開発環境 (その3 ROM 書き込み編)

さて、今回は、コンパイルした sampleRom.mot を SH-2 内部の ROM に書き込む方法に付いて述べる。

Linux 専用の書き込みプログラムが無い
普段、Linux から、H8 や SH-2 に書き込む時は、Open SH/H8 writerを用いている。
ところが、これは、SH7050F や SH7045F には対応しているものの、今回使っている SH7144F には対応していない。

Open SH/H8 writer はソースも公開しているので、SH7144F 用に作り変える事も可能かと思ったが、意外と難しそうなので、諦めた。(誰か、お願い)

そこで、ちょっとインチキだが、Wine と Windows 用の書き込みソフトを使う手段を使った。

Wine
Wine は、Linux 上で、Windows のアプリケーションを動かすことができるエミュレーターだ。
まだ、正式リリース版では無いようだが、意外と色々なアプリケーションが動作する。
私の場合、3D 表示やサウンドを使った Windows アプリは動作しないが、ATI や nVIDIA のようなグラフィックカードを使っていれば、3D 表示の Windows アプリも動作するらしい。(サウンドの方は単なるセッティングの問題の可能性が高い)

今回は、フリーの Windows 用の書き込みソフトを試したところ、もちろん 3D 表示もサウンドも使っていないせいか、全く問題なく Wine の上で動作した。

まず、Wine のインストールだ。
ここから、Wine のソースをダウンロードする。Wine は毎週のように更新している。私が使ったバージョンは、wine-0.9.6.tar.bz2 だが、最新のものでも大丈夫だろう、確信は無いが。

次のような手順でインストールする。

$ bunzip2 < wine-0.9.6.tar.bz2 |tar xvf -
$ cd wine-0.9.6
$ ./configure
$ make depend
$ make
# make install

/etc/ld.so.conf に /usr/local/lib があることを確認。

# /sbin/ldconfig -v

$ winecfg
で、設定が行えるのだが、たぶん、デフォルトのままで良い。
$ winemine
とやって、ゲームが動けば、動作確認である。

フリーの Windows 用の書き込みソフト
H8ライター+H8工作+PIC工作から、H8W_036b.zip をダウンロードする。

$ unzip H8W_036b.zip
$ cd H8W
$ wine h8w.exe
これで、書き込みソフトが起動する。

・SH-2 ボード上のジャンパーを接続する。
・パソコンのシリアルポートと SH-2 ボードのシリアルポートをストレートケーブルで接続。
・SH-2 ボードの電源を入れる。
・書き込みソフトの「書き込み制御ファイル」で「7144_45_F48M_P384.MOT」を選択
・「COM Port」「COM1」
・「Baud (B)」「19200」
・「Baud (P)」「38400」
・「書き込むファイル」ボタンを押し、「目的となる sampleRom.mot」を選択する。
・「書き込み開始」ボタンを押す。
・しばらく、時間がかかるが、プログラムを書き込む事ができる。
・SH-2 ボードの電源を切る。
・書き込みソフトを終了。

動作試験
ターミナルソフトをインストールしていなければ、kermit をインストールしておこう。

# apt-get install ckermit 

~/.kermrc と言うファイルを作り、

set line /dev/ttyS0
set speed 38400
set carrier-watch off

$ kermit
で、kermit がスタートする。
C-Kermit>
と言うプロンプトが出たら、「c」とエンターでターミナルがスタートする。

・SH-2 ボード上のジャンパーを切る。
・パソコンのシリアルポートと SH-2 ボードのシリアルポートをストレートケーブルで接続。
・SH-2 ボードの電源を入れる。

これで、サンプルソフト(いわゆる哲学者の食事の問題)が、表示されれば、成功である。
なお、kermit を止めるには、コントロール+「\」に続いて、「c」を押し、

C-Kermit>
と言うプロンプトが出たら、「exit」とコマンドを入れる。

私のパソコンには、シリアルポートが付いており、全く問題なく、ROM にプログラムが書き込めた。
シリアルポートの無いパソコンの場合、USB 等のシリアルポートからプログラミングができるかどうかは試していない。誰か、やってみたら、結果を教えてほしい。

| | Comments (0) | TrackBack (0)

October 05, 2006

SH-2 Linux上でのリアルタイム OS 開発環境 (その2 リアルタイムOS編)

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 だが、元々のファイルのレジスタアドレスがいくつか間違っていたので訂正しておいた。ただし、全てを修正し尽くしたわけではないので、注意してもらいたい。

| | Comments (1) | TrackBack (0)

October 04, 2006

SH-2 Linux上でのリアルタイム OS 開発環境 (その1 クロスコンパイラ構築編)

Interface 6月号付録の SH-2 基板を、Linux 上でプログラミングし、リアルタイム OS (HOS)を使い、更に rom 化して、SH-2 内蔵の rom に書き込む方法について述べる。
今回は、第一回目として、Linux 上でのクロスコンパイラ構築方法について述べる。

私の Linux は、Debian Linux 3.1 Sarge であるが、大概の Linux なら同様の方法で、クロスコンパイラが構築できると思う。また、私の Linux 環境にはセルフコンパイル用の gcc 等のインストールは既に済んでいる。もし、セルフ用 gcc 等のインストールが済んでいない人は、そこから行ってほしい。

まず、必要なソースファイルのダウンロードを行う。
GCCソースコードの在処
BINUTILSソースコードの在処
NEWLIBソースコードの在処

上記のリンク先から、下記のファイルをダウンロードする。
・binutils-2.17.tar.gz
・gcc-3.4.6.tar.gz
・newlib-1.14.0.tar.gz
なお、私のダウンロードしたバージョンは、その時点での最新のソースファイルをダウンロードしただけである。(gcc は、3.4 系列での最新)

ダウンロードしたファイルは、「~/src/」ディレクトリに入れておく。

以下のコマンドを実行する。なお、文頭が「$」はユーザーモードで、「#」はrootモードで実行すること。

解凍

$ cd ~/src/
$ tar zxvf binutils-2.17.tar.gz
$ tar zxvf gcc-3.4.6.tar.gz
$ tar zxvf newlib-1.14.0.tar.gz

binutils の構築

# mkdir /usr/cross
$ cd ~/src/binutils-2.17
$ ./configure -target=sh-elf -prefix=/usr/cross -disable-nls
$ make
# make install

~/.bashrc を編集し

 PATH=/usr/cross/bin:$PATH ; export PATH
を追加し、一度ターミナルを終了するか、ログアウトして、PATHを反映しておく。

gcc の構築

$ cd ~/src/gcc-3.4.6
$ ln -s ../newlib-1.14.0/newlib .
$ mkdir dist;cd dist
$ ../configure -target=sh-elf -prefix=/usr/cross -with-gnu-as
-with-gnu-ld -with-newlib
-with-headers=~/src/newlib-1.14.0/newlib/libc/include
--enable-languages="c,c++"
$ make
# PATH=/usr/cross/bin:$PATH ; export PATH
# make install

なお、上記の「../configure」は、本来、一行で入力するのだが、表示上複数行に分けて居るので、注意して欲しい。

これで、クロスコンパイラの構築は終了である。
なお、gcc の make などは、意外と時間がかかるので、のんびりできるときに行った方が良い。

| | Comments (0) | TrackBack (0)

« September 2006 | Main | November 2006 »