2008年10月19日は富山県知事選挙の日である。自宅に送られてきた投票所入場券を開くと,これまでより人数が一人増えている。ここ10年以上,私と妻と,母の3人の名前がプリントされた入場券が送られて来ていたのだが,今回は先月二十歳になったこうしろうの名前が印刷されていた。現在,こうしろうは大阪府豊中市にある大学の寮に住んでいるが,住民票を移していないので,4人分の入場券が送られてきたのだ。学生なので,卒業までは仕送りをしないといけないが,精神的には,一人子育てが終わったように感じた。


 さて,近ごろはBricxCCをインストールするとDocumentationフォルダにコピーされるNBC_tutorial.pdfとNBC_Guide.pdfをテキストにして,MINDSTORMS NXTを動かすアセンブラ・ライクなプログラム言語NBCの勉強をしている。


 NBC_tutorial.pdfの正式なタイトルは「Programming Lego Robots using NBC」であり,著者はRoss Crawfordさんだ。NBC_Guide.pdfのタイトルは,「Next Byte Code(NBC) Porgrammer's Guide」で,こちらはJohn Hansenさんが著者である。


 順に読み進めていくと,今回はスレッドやサブルーチンといったプログラムの構造に関する勉強になる。


 スレッド(thread)はNQCのタスクと同じような概念だ。NXTでは,複数のスレッドを同時に実行することができる。


スレッドmove_squareとplay_musicをprecedesで開始している。ロボットはC(ド)とE(ミ)の音を鳴らしながら,多角形を描くように走る。


お次は,サブルーチンを使うサンプルだ。サブルーチン(subroutine)は,再利用可能なコードの固まりを作っておくテクニックだ。この例のturn_aroundのように何度でも呼び出して使うことができる。スレッドはendtで終わり,サブルーチンはendsで終わる。


 従来のMINDSTORMS RCXとNXTを比べると,両者の違いとして,CPUが8ビットから32ビットになったこと,メモリーのサイズが16KバイトのROM,512バイトのRAMから,256Kバイトのフラッシュメモリー,64KバイトのRAMと格段に大きくなっていることが挙げられる。


 2001年にRCX用のC言語ライクなプログラム言語NQCの解説を「中学生のためのNQC入門」として書いたがNQCではタスクは10個までという制限があった。ハードウェアの規模が大きくなったことで,NXT対応のNBCでは,255のスレッドとサブルーチンの組み合わせを許可している。それだけ,複雑なプログラムを作ることができるのだ。


また,ちょっとしたコードの固まりを準備しておく別な方法として,マクロ(macro)がある。


#define TURN_TIME 500という定数定義の下の,#define turn_around以降がマクロ定義である。バックスラッシュで行を継続したコードの固まりがマクロになる。つまり,バックスラッシュを書かないとその行でマクロは終わりになるのだ。


 スレッドはprecedesで,サブルーチンはcallで呼び出すが,マクロはマクロ名だけで呼び出すことができる。

つづく