FreeBSD, Linux など 非Windows環境でも
プログラムが作成可能となることを目指してるものです。
IR tower とつなぐため Serial が使える OS で、
GNU tools がコンパイルできる環境なら、
簡単に応用できると思います。
この情報は
lego-robotics Mailing List および
web page から
得た情報を元に試したものをまとめたものです。
FreeBSD 2.2.7-RELEASE上でテストしてます。
各ツールのバージョンは、以下の例で挙げたモノ以外でも
動く可能性はありますが未確認です。
Firmware のダウンロードの方法
ここで ダウンロードとは、RCXへ送りこむことを指します。
LEGO謹製の firmware Firm0309.lgo のダウンロードを例にします。
-
kekoaさんのweb から
send.c と
firmdl.c を入手
(firmdl.c は、ほぼ同じものが
legOS-0.1.2.tgz の中に入ってます。)
- それぞれ
% gcc -o send send.c
% gcc -o firmdl firmdl.c
でコンパイル
FreeBSD で COM1に相当するポートを使うため、
ソース中の DEFAULTTTY を /dev/cuaa0 に設定。
環境変数 RCXTTY をみてるので、ソースコードを変更せずに、
% setenv RCXTTY /dev/cuaa0 (csh系の場合)
としてもよい。
- どこか適当なところにインストール
(僕は /usr/local/lego/bin にインストールし、path を通しました)
-
% chmod o+rw /dev/cuaa0
とし、一般ユーザー権限で
serial port を読み書きできるようにした。
場合によってはセキュリティ上問題になるかもしれないので注意
- Windows用のソフトがインストールされたディレクトリのどこかに
Firm0309.lgo というファイルがあるはずなので、
アクセス可能なところにコピーする。
(これが LEGO謹製の firmware である。)
- serialポートに IR tower を接続。
- RCXの電源を入れる
-
% send 10
と入力して
0000: ef
と返ってくれば O.K.
(ただし、firmwareが消去された初期状態では、反応なしで正常です)
send の使い方等の詳細は、
ココ を参照のこと
-
% firmdl Firm0309.lgo
と入力して
RCX がbeep音を発した後、カウントアップしていき、
しばらく待つと beep音がしてダウンロード完了。
Firm0309.lgo のダウンロードは、Windows環境でもできます。
手順は
- Mindstorms付属 Windowsソフト Robotics invention system を起動
- Getting started を選択
- Set Up Options を選択
- Download RCX firmware の選択
注意
お手製 firmware をダウンロードしたり、
RCX上でプログラムが暴走するなどして、
send 10(ping) や firmdl に反応しなくなった場合、
電池を抜くことで firmwareを消し初期状態(工場出荷状態)に
戻すことが可能です。
これにより、firmdl が実行可能となります。
単に電池を抜くだけではダメで、電池を抜いてから on/offボタンを
一度押し完全放電しないとメモリに残っているので注意。
tclRCX byte compiler でプログラミング
標準の firmware LEGO謹製 Firm0309.lgo環境で、
Windows用付属ソフトを使わずに RCXのプログラミングを
する方法です。
- Tcl 8.x がインストールされていることを確認
namespace を使っているので、Tcl 7.x ではダメだと思われます。
なければ pkg_add もしくは ports を使ってインストール
(FreeBSDの場合)
Tcl/Tk が使えるならば、その他の Linux, Windows といったOSでも
動作可能なはずです。
- ココ
から、メインのtclスクリプト
rcx.tcl と、サンプルプログラム
torbot.tcl を入手。
ついでにドキュメント
rcx-docs.html も保存しておくとよい。
- tclsh を起動する。
> tclsh8.1
- byte code compiler を読み込む
% source rcx.tcl
- 通信デバイスの open
% connect /dev/cuaa0
connect の後に、IR towerと通信するのに使用する
serial portのデバイス名を指定できます。
省略した場合、
UNIX系: /dev/ttyS1 (linux用)
Windows: COM1
がデフォルトになります。
よって FreeBSD では、/dev/cuaa? を指定してやる必要があります。
(もしくは、デフォルトを書き換える)
- ping
% ping
% OK
が返ってくれば大丈夫。
注意1
IR tower の接続、RCXの電源ON をお忘れなく
注意2
あらかじめ Firm0309.lgo を RCXにダウンロードしておくこと
- サンプルコードの読み込み
% source torbot.tcl
- 読み込んだ RCXコードを転送
% beam 1
これで、task 0 ,task 1が RCXに「転送」されます。
(ここでのtask とは、いわゆる thread みたいなものかと)
- RCXの 「Run」ボタン(緑色)を押すと実行が始まります。
各コマンドや、サンプルコードの詳細については、
rcx-docs.html を参照して下さい。
legOS で firmwareを作る
クロスコンパイル環境の構築
- クロスコンパイル環境用 binutils のコンパイル
(as や ld などの構築)
- binutils-2.9.1.tar.gz を入手、展開
- ./configure i386-freebsd --target=h8300-hitachi-hms --prefix=/usr/local/lego
注1) FreeBSD-2.2.7-RELEASE では オプション
i386-freebsd が必要。default ではOS タイプを正しく認識しないため)
注2) --prefix オプションは趣味の問題
- make
- make install
(いうまでもなく root権限で)
- 独自のディレクトリにインストールした場合 PATH を設定
上記の例では /usr/local/lego/bin/ に h8300-hitachi-hms-*
としてコマンドがインストールされる)
- クロスコンパイル環境用 gcc のコンパイル
- gcc-2.8.1.tar.gz を入手、展開
- ./configure i386-freebsd --target=h8300-hitachi-hms --prefix=/usr/local/lego
オプションは binutils と同じ
- make LANGUAGES=c
注1) FreeBSDでは、コンパイルの途中で
/usr/include 以下の include ファイルが
みつからないと error でコンパイルが止まるので、
-I/usr/include をつけてごまかす。
configure の問題であると思われる。
- make LANGUAGES=c install
- legOS のコンパイル
-
legOS-0.1.2.tgz を入手、展開
注)
バージョンが上がっている可能性があります。
- gmake (GNU make)で make
(Makefile が gmake でないと受け付けません)
- demo ディレクトリに simple-rover.srec
ができているはずなので、
firmdl simple-rover.srec
としてダウンロードする。
Firm0309.lgo があれば、もとに戻せるので心配なく。
ただし、RCXが壊れても知りません。
At own risk で。
補足
legOS の demo プログラムは、firmware の自己消去機能が
組み込まれました。「On-Off ボタン」 + 「Prgmボタン」を
押すと firmwareが消え、電池を抜いた時と同じ状態になります。
Firm0309.lgo に戻したり、新しく作った firmware に書き換える際、
いちいち電池を抜く必要はありません。
クロスデバッガの使用方法
- クロスデバッグ用 gdb のコンパイル
- gdb-4.17.tar.gz を入手、展開
- このパッチ をあてる
注1) Solaris2 では
このパッチ も
あてるといいらしい(未確認)
- ./configure i386-freebsd --target=h8300-hitachi-hms --prefix=/usr/local/lego
オプションは binutils と同じ
- make
- make install
Firmwareの逆アセンブル
- テスト中
|