「NBC(Next Byte Code)はその名の通りバイトコード(中間コード)なので,アセンブラ・ライクなコーディングができるようだ。NXC(Not eXactly C)はNQC互換の単純化されたC言語ライクなコンパイラだ。」
283話「NBCとNXC」に,上記のようにMindStorms用のプログラミング言語NBCとNXCのことを書いたが,アセンブラ・ライクなNBCとC言語ライクなNXCは実はとても似ている。NXCのコードはいったん,NBCに変換されてから,MindStorms NXTが理解できるコードにコンパイルされるようだ。
NXCの特徴は,変数や関数の種類が豊富なことである。特にNXTからモーターがサーボモーターになったので,モーター関係の関数が充実している。
今回はNXCの変数の種類について説明したい。ちなみに,2001年に「中学生のためのNQC入門」を書いたのだが,NQCでは変数のデータ型は16ビットの整数型だけだった。それに比べて,NXCのデータ型は本当に豊富なのだ。
小さなデータ型から紹介すると,真偽を表すブール型,8ビットのバイト型やchar型があり,整数型には16ビットのint型,32ビットのlong型がある。
ほかには,文字列を記憶するstring型や配列型(Arrays),そして構造体を作るstructまであるのだ。「NXCのデータ型=標準的なC言語のデータ型-ポインタ型」と言ってもよいほどの充実ぶりだ。
NBC,NXCの開発環境であるBrick Command Centerで,変数の値を表示するプログラムを作ってみた。
このプログラムは,変数宣言とtask main()で始まるメイン・タスクで構成される。メイン・タスクの処理の内容は,変数に値を入れ,NXTのモニタに表示することである。
まず,変数の宣言部分から紹介する。
-------------------------------------------------------------- bool bFlg; byte byNum; int iNum; long lNum; string strMess; int arylNum[]; struct robot { long left_motor; long right_motor; }; robot robot_car; --------------------------------------------------------------
ブール型bFlg,バイト型のbyNum,16ビット整数型のiNum,long型のlNumと宣言している。続けて,string型のstrMess,NXCではシングル・バイトの文字しか使えないので,string型はバイト型の配列となる。また,NXCでは[ ]を使って配列を宣言することができる。int arylNum[]とint型の配列を宣言している。
そして,struct robotと複数の変数を持つ構造体を作成し,robot robot_carと構造体型変数を宣言して使用することができる。
当然のことだが,プログラムはメイン・タスクから始まる。長いので半分に分けて説明する。
-------------------------------------------------------------- task main() { bFlg=true; NumOut(0,LCD_LINE1,bFlg); bFlg=false; NumOut(49,LCD_LINE1,bFlg); byNum=255; NumOut(0,LCD_LINE2,byNum); byNum+=1; NumOut(49,LCD_LINE2,byNum); iNum=32767; NumOut(0,LCD_LINE3,iNum); iNum+=1; NumOut(0,LCD_LINE4,iNum); lNum=2147483647; NumOut(0,LCD_LINE5,lNum); --------------------------------------------------------------
ブール型bFlgにはbFlg=trueのようにtrueとfalseを代入することができる。
この実行結果を次のページに示す。