2011年02月13日

eLua: Ver0.8 出る

2011/02/02にeLua: Ver0.8がリリースされていました。

eLuaもsvnからgitに変更するとアナウンスされていました。(Forumで)
(https://lists.berlios.de/pipermail/elua-dev/2011-February/001991.html)
自分が遭遇したプロジェクトが「DVCS(分散型バージョン管理システム)」に
次々に移行していく様(さま)を目の当たりにしているのだった。
PyMite → Mercurial(2010/10)
SCons → Maybe Mercurial(2011〜)
eLua → git(2011/03/01) : https://github.com/elua/elua
オープンソース界の大潮流になっていることは間違いなさそうだ。

で、eLua: Ver0.8
http://www.eluaproject.net/
リリースしてまだ10日くらいで、発見したのが昨日なので
アレだけど、ざっくり書くと

1,リモートファイルシステム(RFS)
  パソコン上のファイルをUART経由でマイコンからアクセスできる機能。
  "eLuaスクリプト"をPC上のエディタで普通のファイルとして
  編集すると、それがそのままマイコンからファイルとして
  "アクセス、実行"ができるようだ。
  編集・uploadがシームレスにできる感じ。
  Good Job !

2,シリアル通信の多重化利用(serial multiplexer)
  一つのシリアルポート(UART)を複数のシリアルポートとして
  使ってしまおうという機能。
  上のRFSを使うときに必要。
  これも便利そう。標準出力・標準エラー出力で出力先を
  分けたり、いろんな用途に使えそう。
  パソコン側に支援ツールが必要(com0com等)

3,Luaレベル・C言語レベルの割込みハンドラサポート
  詳しく読めてないけど、優先順位付きで割込みがキューに
  貯まって、そのキューを"バイトコード2つ処理する毎に"
  見に行って処理するらしい。

4,LPC1768/mbedボード・サポート
  mbedボードが正式対応になった。
  2011年中には「LPCXpresso」も対応になると予想するも、
  128kbyte制限があるので無視される可能性も。(爆

  AVR32 UC3Bにも対応したようだ。

5,eLua shellにヒストリ機能が付いた。
  この機能、前からほしいと思っていたので、Nice Job !
  便利になるね。

と、上記は試したわけじゃないので、使い勝手やパフォーマンスは不明。

でもeLuaプロジェクトってパワーあるね。
どんどん便利になっていく。


Web Builderにも「mbed」が追加されている。
http://builder.eluaproject.net/
mbedの場合はファイルシステムとして「Semi FS」が使えるようだ。
あと、選択できないものの、
「Netduino」も思わせぶりに選択肢に存在した。
Netduinoボードでひとまず動かすのは簡単そうな気がする。(オントカヨ
(AT91SAM7X256は対応済みだから)

http://wiki.eluaproject.net/Boards
↑のページによるとLPCXpressoは今後のサポート候補にあがっている。

Netduinoは現在インポート進行中のようだ。
http://elua-development.2368040.n2.nabble.com/Porting-elua-to-the-Netduino-dev-board-td5842340.html

LeafLabs - Maple Native も候補にある。
Maple miniはいまのところない。





参考:

eLua フォーラム:
http://elua-development.2368040.n2.nabble.com/eLua-Development-f2368040.topics.html
posted by Copyright (C) avrin All Rights Reserved. at 12:00| Comment(0) | eLua | このブログの読者になる | 更新情報をチェックする

2010年11月07日

ARM: eLuaでマイコン制御(1)

ARM: eLuaでマイコン制御(1)
*eLuaでマイコン制御(1)
  LPC1768(ARM/Cortex-M3)/mbed 
  SCons:
  クラウド型の実験:これはスゴイ
  チュートリアル:
  Demoビデオ:

 付録のLPC2388基板をクラウドでサクッとeLuaマシンにする
 LPC2388の日本語マニュアル



*eLuaでマイコン制御
以前はPyMite(Python)言語でしたが今回はLua言語です。

eLuaもPyMite(Python)と同じ無料で使えるスクリプト言語(高級言語)です。
Luaという軽量の言語を採用しています。
Basic言語同様「型宣言」が不要なので分かり易い言語です。
「Lua言語でマイコン制御」できるのが組み込み用の

「eLua - Embedded Lua」です。

eLuaホーム
http://www.eluaproject.net/

PyMiteがAVRやPICの小物系のマイコンも視野に入れるため
言語仕様を一部省略しているのに対し
eLuaの場合、

「言語仕様はオリジナルのまま実装する。一切妥協しない。」

ということです。
そのためFlash容量的にAVRやPICなどの小物系のマイコンは
対象外となります。

対象CPU:
http://www.eluaproject.net/en_status.html
上が正式にリリースされているCPU群(プラットフォーム)。

LPC1768(ARM/Cortex-M3)/mbed 
自分が持っているCPU用(LPC1768/LPC2388(付録))がないので最初は
スルーしていましたがよくよく調べてみるとLPC2468というのが
LPC2388にそっくりでした。

PyMiteで導入した

「バージョン管理ツール: Subversion」
(現在はTortoiseHg/Mercurialがイチ押しでお勧めです。
クローンで取得出来ます。)

が使えるので試しに「svnコマンド」でソース群を一式取得してみました。
現在はgitのリポジトリも使えます。

git://github.com/elua/elua.git
(これもTortoiseHg/Mercurialで簡単に取得できます。)

正式リリースされていないものの「LPC1768」のツリーがありました。
ハードウエアは「mbed」を想定していますがオフラインの
gcc(Codesourcery G++ Lite for ARM等)でコンパイルできます。
従ってmbedボードはもちろん汎用のlpc1768ボードならほぼそのまま動作可能です。

トライしてみると
> svn checkout svn://svn.berlios.de/elua/trunk
> cd trunk
> scons cpu=lpc1768
の「3手」でコンパイルが成功しました。(実質1手) この「SCons」というツールがgccのツールチェインを自動判別して 「arm-none-eabi-gcc」でコンパイルを開始するスグレモノです。 「自動判別」したのは初めて見ました。
trunk> arm-none-eabi-size elua_lua_lpc1768.elf
   text    data     bss     dec     hex filename
 202928     644    9772  213344   34160 elua_lua_lpc1768.elf
そのままFlashに書き込んだらコンソールからサクッと 「Luaスクリプト」が動いてビックリしました。 「仕様に妥協がない」のでパソコン用「Luaサンプルスクリプト」 がそのまま動いてます。 (コンソールはUART0/115200bps/s1/none parity) しかも、romfs(ROMファイルシステム)組み込み済み。 以下のように「ls ( or dir) コマンド」で内蔵luaスクリプトが一覧できます。(注2)
eLua trunk pos0.7  Copyright (C) 2007-2010 www.eluaproject.org
eLua# ls

/rom
bisect.lua                     646 bytes
hangman.lua                    3378 bytes
hello.lua                      23 bytes
info.lua                       134 bytes
led.lua                        1708 bytes
pwmled.lua                     1038 bytes
dualpwm.lua                    932 bytes
life.lua                       2662 bytes
adcscope.lua                   2200 bytes
adcpoll.lua                    1557 bytes
MBED.lua                       793 bytes

Total on /rom: 15071 bytes

/semi

Total on /semi: 0 bytes

eLua# lua /rom/life.lua
最後の行のようにコンソール上で実行させたいLuaスクリプトを指定して eLua# lua /rom/life.lua と入力すると「ライフゲーム」がサクッと動いたりします。(注1)
-------------------------O------
--------------------------------
--------------------------------
--------OO---O-OO---------------
-------OOO-OO---O--------O------
------OO---OO----O------O-O-----
-------O-O---O-OOO------O-O-----
--------OO-----------O---O------
---------O----------OO----------
-----------------------------OO-
----------------------------O--O
-----------------------------OO-
--------------------------------
---------OOO-------------O------
------------------------O-O-----
------------------------O-O-----
Life - generation 41, mem 38.1 kB
eLua#
正式リリースには名前もないLPC1768(ARM/Cortex-M3)ですが イメージ的にはかなり好印象です。 さらに追加機能としてファイルシステム(ROMFS,MMC)ネットワーク対応 などのモジュールもあるようです。 SCons:SCons」はPythonベースのコンパイルシステム(makeと同じ)なので 事前にインストールする必要があります。scons-2.0.1.win32.exe SConsのインストールの前にPython(ActivePython-2.6.6.15-win32-x86.msi)のインストールが必要です。 「SConsシステム」はPyMiteでも採用されています。 Pythonスクリプトなのでmakeの代わりに何でも出来るということです。 クラウド型の実験:これはスゴイ mbedのようにWebコンパイルができるような実験も開始されています。 http://builder.eluaproject.net elua-cloud-build.gif 上は実際に登録してWeb上でコンパイルオプションを設定している画面です。 コンパイルオプションが各種選択出来ます。 自作のLuaスクリプトをアップロードして(複数可能)、 ROMファイルシステムにセットアップ後コンパイルされます。 任意のLuaスクリプトを起動時の「auto runスクリプト」に指定出来ます。 コンパイル結果をダウンロードしてFlashに焼けばLuaスクリプトを ROMファイルシステムとして読み出し、実行が出来ます。 従って「開発環境不要」となり非常に興味深いシステムだと思います。 注意点:コンパイル結果は「elfファイル」なので場合によってはHEXファイル等に変換 する必要があります。 Web上のコンパイル時間は結構速い気がします。 以下のオプションのWebコンパイルが「20秒」で終わります。 $ scons board=ET-STM32 toolchain=codesourcery romfs=verbatim 同じオプションで自分のPCでコンパイルすると「55秒」かかりました。 結構、ショックです。 うちのPCは現在「AthlonII x2 250 3.0GHz 2次キャッシュ1MBx2」で スーパーπ104万桁は27秒のマシンですが? それより2.75倍も速いです。orz まぁスピードより値段と電力で選んだからアレだけど。 (2010/12) コンパイルスピードを劇的に高速化する方法がありました。 すっかり忘れていましたが「make」にも「scons」にも「-j n 」オプションがあります。 CPUがマルチコアなので「-j 2 」とすればスピードアップ出来ます。 実際に以下でコンパイルすると「35秒」で終了しました。 20秒(1.5倍速)もコンパイル時間が短縮されました。 $ scons -j 2 board=ET-STM32 toolchain=codesourcery romfs=verbatim マルチコアな人はお試しあれ。
>arm-none-eabi-size elua_lua_stm32f103re.elf
   text    data     bss     dec     hex filename
 206720    1400    1632  209752   33358 elua_lua_stm32f103re.elf
コンパイルサイズは200kバイトとそれなりに大きいですが 最近はFlash容量512KbのCPUが安く手にはいるのでOKでしょう。(オントカヨ チュートリアル *基本的な使い方がざっと分かります。  http://wiki.eluaproject.net/Tutorials *各種のサンプル、モジュールの説明があります。  MIDI制御、LCDライブラリなど。  http://wiki.eluaproject.net/Projects Demoビデオ クラシカルなゲームですがLuaスクリプトで書かれています。 eLua Spaceship http://wiki.eluaproject.net/Spaceship eLua Snake http://wiki.eluaproject.net/Snake eLua Pong (OLED display) http://wiki.eluaproject.net/Pong テトリス風 (音量注意) http://wiki.eluaproject.net/TetrIves 付録のLPC2388基板をクラウドでサクッとeLuaマシンにする IF誌付録のLPC2388基板が部品箱に眠っている人も多いと思います。(爆 上で出てきたeLua正式対応のLPC2468というCPUはLPC2388と95%くらいは 同じハードウエアなんです。(データシートのブロック図参照) 従ってターゲットボード上の水晶発振子(周波数)が同じなら 無変更で動作する可能性が高いのです。 調べてみると12MHzなので付録基板と同じです。 http://wiki.eluaproject.net/PUCeLuaDemoBoard http://kumikomi.typepad.jp/interface_2009arm/download/NXP_ARM_pub.pdf 結論から言えばWeb上でコンパイルした実行ファイルを付録LPC2388基板に焼くだけで eLuaシステムがサクッと動いちゃいました。 Webコンパイルの「Target Platform 名」は「ELUA-PUC」を選択します。 と、実は、LPC2388基板で こんなに簡単に(ソースも何も無変更で)動作すると思っていなかったので(オイ 意表を突かれた形で、とまどい気味だったり。(爆爆 Luaスクリプト書いてみるぞと。 LPC2388の日本語マニュアル は、ないけど上で出てきたLPC2388にそっくりな 「LPC2468の日本語マニュアルがありました」 http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc24xx.jp.pdf これはなかり助かる。 (注1)ライフゲームを起動すると終了できないので注意。 (注2)CPUがLPC1768でmbed以外の場合(自分の汎用ボード)以下の変更が必要でした。 src/semifs.cの__semihost(int reason, void * arg)関数を変更します。
diff --git a/src/semifs.c b/src/semifs.c
--- a/src/semifs.c
+++ b/src/semifs.c
@@ -35,6 +35,7 @@ static inline int
 __semihost(int reason, void * arg)
 {
   int value;
+  return -1;
   asm volatile ("mov r0, %1; mov r1, %2; " AngelSWIInsn " %a3; mov %0, r0"
        : "=r" (value) /* Outputs */
        : "r" (reason), "r" (arg), "i" (AngelSWI) /* Inputs */
上のようにデバッガ用のセミホスト機能をキャンセルしないと「lsコマンド」実行で semifs(セミファイルシステム)を必ずアクセスするのでハングアップします。
posted by Copyright (C) avrin All Rights Reserved. at 10:05| Comment(0) | eLua | このブログの読者になる | 更新情報をチェックする