2010年06月24日

Interactive PyMite

前回の続きです。

Interactive PyMite (ipm) のドキュメント (pymite-08/docs/html/InteractivePyMite.html) を読みました。

ipm は、基本的には通常の Python (CPython) の Interactive Mode と同じようなものですが、ホスト上で動く対話的インタフェース部 (ipm-host) と、ターゲット上で動くコード実行部 (ipm-target) が分離されているのが特徴のようです。



もともと Python (の標準実装 CPython)は、標準ライブラリで、バイトコードをファイルにアウトプットするなどの言語サービスモジュールを提供しています。

Python v2.6.5 documentation > The Python Standard Library > 31. Python Language Services > 31.10. py_compile > Compile Python source files

これを利用して、REPL やコンパイラなどのインタフェース部と、VM やライブラリなどの実行部をホスト/ターゲットで分離するというアイデアは賢いなと思いました。このやり方ならば、リソースに制限がある組み込みシステムの開発であっても、通常の PC 上のスクリプト言語による開発と同様に、対話的に効率的に行える可能性が出てきます。Python 以外の言語にも応用できそうです。

以下は、ドキュメントを参考に自分なりにまとめてみたものです。(内容は無保証です。)

● ipm-host の設計

ホストコンピュータ(今のところ Mac OS X、 Linux、MS-Windows)上で動きます。起動すると、指定された方法で ipm-target とセッションを張り、プロンプトを表示します。Ctrl+C で中断、Ctrl+Dで終了します。

プロンプトからユーザが入力した Python ソースコードは、src/tool/pmImgCreator.py というツールでコードイメージに変換されてターゲットに送られます。その後 ipm-host は、終端バイトに達するまでターゲット側から送られてくるバイト列を表示し続けます。

● ipm-target の設計

ターゲットデバイス上で動きます。ipm-target は PyMite の標準ライブラリ ipm モジュールにより実装されます。ターゲットプログラムは ipm-target を適切に初期化する必要があります。

ipm-target はコードイメージが送られてくるまで待機します。そして送られてきたコードイメージをコードオブジェクトに変換し、組み込み関数 eval() を呼びます。実行終了後は終端バイトを送り、再び待機状態になります。

● 実際の様子

・ホスト側

PC 上で host も target も動かす場合は、前回のように make ipm か、src/tools に移動して

C:\work\pymite\pymite-08\src\tools>path c:\Python26\;%path%

C:\work\pymite\pymite-08\src\tools>ipm.py -d
PyMite is Copyright 2002 Dean Hall.  See LICENSE for details.
This software is licensed under the GNU GPL Version 2 with NO WARRANTY.
Type the Python code that you want to run on the target device.
If you see no prompt, type two consecutive returns to exit multiline mode.
Type Ctrl+C to interrupt and Ctrl+D to quit (or Ctrl+Z <enter> on Win32).
ipm>

で良いのですが、通常は host と target は別々になります。

$ ipm.py -s <port> <baud>

あるいは

$ ipm.py --serial=<port> --baud=<baud>

のようにしてシリアルポートを指定するようです。

・ターゲット側

ターゲット側は src/platform/mmb103 のように、ターゲット上で動く ipm-target プログラムを実装して動かします。

待機状態になっている ipm-target を動かすためには、ipm-host 側から、最低以下のようなプログラムを入力する必要があります。2 行目は VM が終了するまで動き続けます。

import ipm
ipm.ipm()

実際に動かしたわけではないのでこれだけではまだよくわからない部分も多いのですが、とりあえず概念と雰囲気はわかったような気がします。



トラックバックURL

コメント一覧

1. Posted by hik   2010年06月25日 13:52
ベタですが、bye code は compress して download という idea が
あるかもしれませんね、target の footprint の余裕にもよりますが、

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード