marunomaruno-memo

marunomaruno-memo

Lego Mindstomes NXT - NXC プログラミング (7) - コマンドライン

2008年01月29日 | Weblog
開発環境の BricxCC を使うだけではなく、ちょっと目先を変えて、コマンドラインベー
スで使ってみましょう。

BricxCC のエディッタには多少の不満があるので、コマンドラインベースででも開発でき
ると便利。

本当は、Eclipse で開発できると便利なんだけど、まだ、leJOS に対するものしかなさそ
う。(★)

LDT - leJOS Development Toolset
http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-306.html

これも、機会があれば、そのうち試してみたい。


■ 環境変数 PATH の設定

まず、BricxCC のパスをシステムの環境変数 PATH に追加します。

デフォルトのままインストールしたのであれば、「C:\Program Files\BricxCC」にインス
トールされているので、これを環境変数 PATH の最後にセミコロン(;)をつけて、その後
につけます。


■ コマンド nbc

NXC プログラムをコンパイルしたり、ダウンロードするのは、nbc コマンドを用います。

オプション -help で、どのようなコマンドのシンタックスを見てみましょう。

---
> nbc -help
Next Byte Codes Compiler version 1.0.1.b34 (1.0.1.34, built Sun Nov 25 20:14:23 CST 2007)
     Copyright (c) 2006, John Hansen
Syntax: nbc [options] filename [options]

   -S=<portname>: specify port name (COMn or usb), resource name, or alias
   -BT: use bluetooth
   -d: download program
   -b: treat input file as a binary file (don't compile it)
   -q: quiet
   -n:  prevent the system file from being included
   -D=<sym>[=<value>]: define macro <sym>
   -x: decompile program
   -Z[1|2]: turn on compiler optimizations
   -O=<outfile> : specify output file
   -E=<filename> : write compiler errors to <filename>
   -I=<path>: search <path> for include files
   -nbc=<filename> : save NXC intermediate NBC code to <filename>
   -L=<filename> : generate code listing to <filename>
   -Y=<filename> : generate symbol table to <filename>
   -w[-|+] : warnings off or on [default is off]
   -EF : enhanced firmware
   -safecall: NXC will wrap all function calls in Acquire/Release
   -api: dump the API to stdout
   -help : display command line options
---



■ コンパイルと NXT へのダウンロード

プログラム Bumper01.nxc をコンパイルしてダウンロードしてみます。

---
C:\_docs\Lego\Bricx_NXC>nbc -S=usb -d Bumper02.nxc
---


コンパイルエラーのときは、以下のように表示されます。今回は、19 行目の
Off(OUT_BC)
文のセミコロンを抜かしました。

---
C:\_docs\Lego\Bricx_NXC>nbc -S=usb -d Bumper02.nxc
# Error: ';' expected
File "C:\_docs\Lego\Bricx_NXC\Bumper02.nxc" ; line 20
#    unsigned
#----------------------------------------------------------
---



■ 目的ファイルの生成

目的ファイルをファイルとして残す場合は、-O オプションを使います。このとき、この
実行ファイルの拡張子は「.rxe」を指定しておきます。
---
> nbc -O=Bumper02.rxe Bumper02.nxc
---

そうすると、Bumper02.rxe というファイルができます。これが、コンパイル後の目的フ
ァイルです。-O オプションで目的ファイル名を指定しないと、どうやら NULL に出力さ
れるようです。(★)


■ 逆コンパイル

この目的ファイルを逆コンパイルするには、-x オプションを使います。
逆コンパイル結果は、標準出力に出ます。

---
C:\_docs\Lego\Bricx_NXC>nbc -x Bumper02.rxe
---

逆コンパイルした結果は、NBC のコードです。
NBC のコードについては、BricxCC をインストールしたフォルダーのサブフォルダーに
Documentation フォルダーがあり、そのなかにガイドとチュートリアルがありますので、
参考にしてください。
C:\Program Files\BricxCC\Documentation


■ NBC ファイルの生成

わざわざ、逆コンパイルしなくても、NBC ファイルを生成するオプションもあります。
NBC ファイルを生成するには、-nbc オプションを使います。

逆コンパイルした結果と、-nbc オプションで生成したファイルを比較しても面白いかも
しれません。

---
C:\_docs\Lego\Bricx_NXC>nbc -nbc=Bumper02.nbc Bumper02.nxc
---


■ NeXTTool - USB & Bluetooth NXT communication utility

NXT と通信をするユーティリティ。

これで取得できる情報や、操作も、ほとんどは BricxCC の [Tools] メニューから取得で
きるので、あまり使うことはないかも。

まずは、オンラインヘルプ。

---
C:\_docs\Lego\Bricx_NXC>nexttool -help
NeXTTool version 1.0 (1.0.10.1, built Mon Nov 5 13:15:27 CST 2007)
     Copyright (c) 2006 John Hansen
Usage: NeXTTool [options] [actions]
Options:
   /COM=port: specify port name (COMn, usb, resource string, or alias)
   /BT[=name]: use bluetooth (selects the first brick found or the named brick)
   /HEX: use hexidecimal for numeric output
   /Duration=<n>: specify the tone duration for the playtone action
   /Inbox=<n>: use inbox number n when sending or reading a message
   /Loop: loop when playing sound files
   /Relative: reset output position relative
   /Empty: empty mailbox when reading
   /Bin[=filename]: dump data output as binary to a file (nxt.bin)
Actions:
   -init : initialize nxt.dat file
   -listbricks : list resource names of all found NXT bricks
   -clear : erase all items on the brick
   -battery : return the battery level
   -input=<N> : read input N (0-3)
   -output=<N> : read the status of output N (0-2)
   -mute : stop playing sounds
   -playtone=<frequency> : play a tone for the specified duration
   -run=<filename> : run the specified program
   -runningprogram : return the name of the currently running program
   -stop : stop the currently running program
   -playfile=<filename> : play the specified sound file
   -firmware=<filename> : download firmware
   -download=<filename> : download the specified file to the NXT
   -upload[=<pattern>] : upload the specified file(s) from the NXT (or *.*)
   -listfiles[=<pattern>] : list the files matching the pattern (or *.*)
   -listmodules[=<pattern>] : list the modules matching the pattern (or *.*)
   -delete=<filename> : delete the specified file from the NXT
   -datalog | -datalog_full: upload datalog (_full == verbose)
   -eeprom=<n> | -eeprom_full: upload eeprom block (_full == all blocks)
   -memory=<n> | -memory_full: upload 128 bytes of memory (_full == all memory)
   -map: upload memory map
   -keepalive : return the current sleep time limit
   -sleep=<timeout> : set NXT sleep timeout (in minutes)
   -msg=<string> : send the specified message to the NXT
   -readmsg=<box> : read the message from the specified box
   -resetoutputposition=<port> : reset the position for the specified port
   -resetinputsv=<port> : reset the input scaled value for the specified port
   -setname=<new_name> : set the name of the NXT
   -getname : return the name of the NXT
   -versions : return the NXT firmware and protocol versions
   -deviceinfo : return all NXT device information
   -freemem : return the amount of free memory
   -lsstatus=<port> : return the low speed status for the specified port
   -boot : reset the NXT into SAMBA mode (usb only)
   -btreset : reset the NXT bluetooth to factory settings (usb only)
   -defrag : defragment the NXT filesystem
General:
   -help : display command line options
---



/COM オプションで接続ポートを指定する。

メモリーに入っているファイルのリストを表示するのは、 -listfiles アクション。= の
後は、バイト数(と思われる★)
また、この出方からいうと、プログラム名は 15 文字以内かな。(★)

---
C:\_docs\Lego\Bricx_NXC>nexttool /COM=usb -listfiles
Test01.rxe=748
Trybot02.rxe=1744
Bumper02.rxe=714
Bumper01.rxe=676
Sensor01.rxe=1796
HelloWorld01.rxe=542
Trybot01.rxe=1642
TouchSensor01.rxe=444
UltrasonicSenso.rxe=1664
TouchSensor02.rxe=710
Random02.rxe=1366
TrunRight05.rxe=528
Random01.rxe=710
Spiral01.rxe=508
TrunRight04.rxe=516
TrunRight03.rxe=524
TrunRight02.rxe=482
TurnRight01.rxe=468
ForwardAndBackw.rxe=6040
LineTracer01.rxe=11522
NVConfig.sys=1
RPGReader.sys=14346
Demo.rxe=9436
Try-Touch.rtm=3788
Try-Light.rtm=4456
Try-Sound.rtm=6864
Try-Ultrasonic.rtm=3756
Try-Motor.rtm=2630
Woops.rso=4699
faceopen.ric=316
faceclosed.ric=316
! Startup.rso=8161
! Click.rso=451
! Attention.rso=1755
---



バッテリーレベルなどの情報の表示。

---
C:\_docs\Lego\Bricx_NXC>nexttool /COM=usb -battery -versions -deviceinfo
7076
Protocol version = 1.124
Firmware version = 1.03
Brick name = NXT
Bluetooth Address = 00:12:AB:34:CD:56
Bluetooth signal strength = 0,0,0,0
Free memory = 34000
---


バッテリーレベルの単位は mV のようだ。(★)


以上