Embedded Luaを略してeLuaと呼ばれています。
従来、スクリプト言語をマイコンに移植する場合、機能を削減した仕様で実装されることが多いのですが、eLuaは「フル実装」が一つの特徴になっています。
これによって例えば、パソコン上である程度の機能を実装した後で、ターゲットデバイス上で最終的なデバッグをするなど、様々な開発スタイルをとることもできます。
今回はeLuaをソースコードからコンパイルして実行させてみることにしました。
ホストの環境はUbuntu 10.10を使用しました。
まずはソースコードをSubversionリポジトリから取り出します。
svn checkout svn://svn.berlios.de/elua/trunk
ビルドにはmakeではなく、sconsを使います。
Ubuntu 10.10でsudo apt-get install sconsを試みましたが、私の環境ではパッケージのインストールができませんでした。
そこでhttps://launchpad.net/ubuntu/maverick/+source/scons/2.0.0-1からscons_2.0.0.orig.tar.gzをダウンロードしてインストールします。
sudo python setup.py install
sconsはツールチェインを自動的に見つけてコンパイルしてくれるので楽ちんです。
(うまく行くときは。)
ちなみにcpu=lpc1768とした場合、ターゲットボードはmbedが選択されるようになっています。
scons cpu=lpc1768
上記でビルドが完了すると思います。
elfができますので、binに変換します。
arm-none-eabi-objcopy -O binary elua_lua_lpc1768.elf elua_lua_lpc1768.bin
これで準備完了。
まずはmbed LPC1768にコピーして試してみます。
ターミナルにはminicomを使用しました。
eLua側の通信速度設定はデフォルトで115200になっています。
minicomもこれに合わせます。
mbedのリセットボタンを押して以下のような表示が出てくれば動作しています。
eLua v0.8 Copyright (C) 2007-2011 www.eluaproject.net
eLua#
試しにlsと打ってみてください。
eLua# ls /rom Total on /rom: 0 bytes /semi MBED.HTM 340 bytes ELUA_L~1.BIN 189860 bytes LIFE.LUA 2684 bytes Total on /semi: 192884 bytes eLua#
/romと/semiというディレクトリが見えます。
/semiはmbedのローカルファイルシステムです。
LIFE.LUAはライフゲームのスクリプトです。
試しに実行してみます。
eLua# lua /semi/LIFE.LUA
テキストベースのライフゲームが実行されます。
このライフゲームは2000世代までになると終了するようになっています。
LPCXpresso LPC1768上には外付けのフラッシュストレージは存在しません。
先程の/semiに該当する部分です。
そこでプラットフォーム設定からこれを除外します。
先程の/semiに該当する部分です。
そこでプラットフォーム設定からこれを除外します。
trunk/src/platform/lpc17xx/platform_conf.hの#define BUILD_SEMIFSをコメントアウトします。
実行したいファイルはtrunk/romfsに予めコピーしておきます。
// #define BUILD_SEMIFS
実行したいファイルはtrunk/romfsに予めコピーしておきます。
再度コンパイルを実行して書き込みます。
出来上がったバイナリはLPCXpressoの128KB制限を超えてしまいます。
そこでここではJTAGKey2P + OpenOCDで書き込みます。
それでは確認してみましょう。
出来上がったバイナリはLPCXpressoの128KB制限を超えてしまいます。
そこでここではJTAGKey2P + OpenOCDで書き込みます。
shinta@greenpad:~$ telnet localhost 4444Trying ::1...Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.Open On-Chip Debugger> halt> flash probe 0flash 'lpc2000' found at 0x00000000> flash write_image erase /home/shinta/Projects/elua/trunk/elua_lua_lpc1768.binauto erase enabledwrote 196608 bytes from file /home/shinta/Projects/elua/trunk/elua_lua_lpc1768.bin in 28.987883s (6.623 KiB/s)
それでは確認してみましょう。
と思いましたが・・・
LPCXpressoのデバッガとターゲットを切り離してJTAGKey2Pを接続したのでシリアルが使えません。
LPCXpressoのデバッガとターゲットを切り離してJTAGKey2Pを接続したのでシリアルが使えません。
あ、なるほど。
LPCXpressoのデバッガとターゲット間が切り離し辛いにも関わらず2.54mmピッチの間隔しかあいていません。
かといって、安易に切り離してしまうと、シリアル経由で何かやりたい時に不便です。
これを考えると、半田ジャンパを取り除いた後で2列ピンヘッダを立てると良いかもしれません。
書き込み時はジャンパを取り除いて他のツールでできるし、デバッグはジャンパを付けてシリアル経由でできます。
それでもジャンパを付けたり取ったりするのは面倒ですね。
やっぱりシリアルインターフェースを付けますかね。
LPCXpressoのデバッガとターゲット間が切り離し辛いにも関わらず2.54mmピッチの間隔しかあいていません。
かといって、安易に切り離してしまうと、シリアル経由で何かやりたい時に不便です。
これを考えると、半田ジャンパを取り除いた後で2列ピンヘッダを立てると良いかもしれません。
書き込み時はジャンパを取り除いて他のツールでできるし、デバッグはジャンパを付けてシリアル経由でできます。
それでもジャンパを付けたり取ったりするのは面倒ですね。
やっぱりシリアルインターフェースを付けますかね。
You don't need the arm-none-eabi-objcopy line.
返信削除Just add the "prog" word to the scons line:
scons cpu=lpc1768 prog
and it will generate the .bin for you =)
Hi. Thiago-san
返信削除Oh. Sounds great.
Thank you for your comments.
Shin. :)