2010年9月19日 星期日

LEGO MINDSTORMS另一個開發工具-NXC

上回說明LEGO MINDSTORMS的開發工具時,提到會進一步說明如何使用NXC,趁今天颱風天,把這部份的心得整理出來。

熟悉C語言開發的玩家,都知道C編譯器是命令列工具,不管是編譯或連結,都必須在命令列視窗鍵入指令,NXC當然也不例外。
 
 


命令列工具的麻煩就是要記一堆參數,比如-O, -c...等等(大小寫還有分喔),常用當然沒問題,不常用時,往往要用時就要查說明,看了半天可能還不知道怎麼下,如果專案裡有好幾百個原始檔案,那更是雪上加霜。因為這樣,就有神人發明了make指令,將產生專案執行檔所需做的工作都寫在makefile內,不過由於make要求的彈性太大,造成make檔的語法也成了神才能瞭解的語言,現在的工程師大概10個裡面只有壹個才能瞭解make檔,而仟個裡面只有壹個才能自己寫出makefile吧^^

自從Borland(現在還有人記得這家公司嗎?)出了Turbo Pascal時,讓使用者可以在整合環境裡用壹個快捷鍵就完成編譯並產生執行檔後,整合環境就蔚為風行,從Visual C++到Visual Studio....,程式設計師不再需要時時考驗自己的記憶能力,而對於NXC而言,也有一套整合環境叫做BricxCC(Bricx Command Center)

怎麼安裝與使用BricxCC這裡不多說,有興趣使用的玩家可以去閱讀機器人新視界 NXC&NXT這本書,裡面第二章,第十一章與附錄B講解的十分詳細。不過BricxCC只有Windows版本,目前尚未移植到Mac OSX上,所以我這裡對於Mac上如何使用NXC作個補充。

雖然BricxCC尚未porting到Mac OSX,但是其作者(John Hansen)已經將BricxCC內的一些小工具移植到Mac上,而且將這些工具整合在壹個環境內(稱作NeXT Tools for Mac OS X),這個工具雖然不提供編譯功能,但仍舊是開發LEGO MINDSTORMS不可或缺的工具(即使你不用NXC)。

雖然Mac沒有BricxCC,但是在作者(John Hansen)的熱心協助下,其實在Mac上也可以很輕易的完成編譯,首先到NXC的官方網站http://bricxcc.sourceforge.net/nbc/下載NBC/NXC開發工具,目前最新的版本是1.2.1 r3,下載完成後,將其解到壹個目錄內,裡面有doc, NXT與tests三個目錄,doc目錄內的Readme檔案有NXC的說明與API列表,tests目錄內有壹個strut.nxc範例程式,你可以使用這個檔案測試NXC是否安裝妥當,最後在NXT目錄內有壹個nbc執行檔,這個檔案就是NXC的編譯工具檔案(類似UNIX下的cc),把這個檔案放到你覺得適合的目錄內即可(我是在Application(應用程式)內建立壹個Mindstorms目錄存放這個檔案),接著就可以在命令列視窗下

./nbc -Z1 test.nxc -O=test.rxe

就可以將test.nxc編譯成test.rxe(rxe是LEGO NXT上的執行檔附檔名,請一定要用這個附檔名,不然檔案放上去,NXT可是不會執行它的)

NXT目錄內還有壹個nxtcom_scripts.zip檔案,將其解開後,有個nxtcom執行檔,可編譯成功後的執行檔傳到NXT上,如上面步驟將nxtcom放到nbc所在的目錄內,用下列指令將檔案透過USB線傳到NXT上

./nxtcom test.rxe

詳細的nxtcom支援參數列於下
-v : verbose mode
-q : quiet (no confirmation sound)
-S= : use specified comm_port
-U[=] : use USB connection

如果你是OSX 10.6的玩家,就不用命令列視窗了,nxtcom_scripts.zip檔案內有三個app檔(NBC Compile And Download via USB.app, NBCCompile.app, NXT Download via USB.app),將這三個檔案也拷貝到nbc所在目錄,然後將其拖到Mac桌面的docker內,以後如果要編譯,就在finder內把nxc原始程式檔案拖到NBCCompile.app的icon上就可以完成編譯,如果要將執行檔上傳到NXT上,在finder內將執行檔拖到NXT Download via USB.app的icon上即可,不需要在打一堆指令了。

那如果要編譯後立即上傳呢?當然就是把原始程式檔拖到NBC Compile And Download via USB.app的icon上囉。注意,這三個檔案都是Apple Script檔,所以直接點擊它執行是沒有作用的喔。

作者提供的Script檔都是透過USB上傳,每次上傳後要執行都要把USB線拆掉,要上傳又要接上USB線,反覆下來很是麻煩,其實也可以透過藍芽把檔案傳上NXT的,打開Compile And Download via USB.app,將

 
do shell script "/Applications/Mindstorms/nxt/nxtcom \"" & name_ & ".rxe\""

換成

do shell script "/Applications/Mindstorms/nxt/nxtcom -S=/dev/tty.NXT-DevB \"" & name_ & ".rxe\""

就大功告成(注意:tty.NXT-DevB是我的電腦上NXT device driver 檔案,這個名稱要隨你的電腦上NXT device名稱換掉
 
但是透過藍芽上傳的速度,可是比用 USB線慢許多的,方便與時間的取捨,就看個人需求了。


沒有留言:

張貼留言