Mbed2013

890 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
890
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mbed2013

  1. 1. mbed fest 2013 - Nagoya, Yokohama, Sapporo JPN 13年9月17日火曜日
  2. 2. 軽量Java VMで動かす Cortex-M0+とその利点 13年9月17日火曜日
  3. 3. • プロセッサ非依存開発環境 • インタプリタを自作すると良い事ひとつも無い • 主要なVM紹介 • JVMで動くのはJavaだけ? • RaVem JVM • 競合するJVM比較 • バイトコードの概要 • メモリ管理とガーベジコレクション • マルチスレッドに対応する • オリジナル関数(メソッド)追加方法 Agenda 13年9月17日火曜日
  4. 4. • プロセッサ非依存開発環境 • インタプリタを自作すると良い事ひとつも無い • 主要なVM紹介 • JVMで動くのはJavaだけ? • RaVem JVM • 競合するJVM比較 • バイトコードの概要 • メモリ管理とガーベジコレクション • マルチスレッドに対応する • オリジナル関数(メソッド)追加方法 Agenda 13年9月17日火曜日
  5. 5. • プロセッサ非依存開発環境 • インタプリタを自作すると良い事ひとつも無い • 主要なVM紹介 • JVMで動くのはJavaだけ? • RaVem JVM • 競合するJVM比較 • バイトコードの概要 • メモリ管理とガーベジコレクション • マルチスレッドに対応する • オリジナル関数(メソッド)追加方法 Agenda Java VMの仕組みとmbed上での動作確認 13年9月17日火曜日
  6. 6. • プロセッサ非依存開発環境 • インタプリタを自作すると良い事ひとつも無い • 主要なVM紹介 • JVMで動くのはJavaだけ? • RaVem JVM • 競合するJVM比較 • バイトコードの概要 • メモリ管理とガーベジコレクション • マルチスレッドに対応する • オリジナル関数(メソッド)追加方法 Agenda 13年9月17日火曜日
  7. 7. • 事の発端 • FPGA + コプロセッサ + 他のシステム Processor-independent devel environment FPGA Co-processor CAM x Command Config CameraLink™ CPU + PowerVR 64bit bus Peripheral 13年9月17日火曜日
  8. 8. • 事の発端 • FPGA + コプロセッサ + 他のシステム Processor-independent devel environment FPGA Co-processor CAM x Command Config CameraLink™ CPU + PowerVR 64bit bus Peripheral C/C++ HDL + Simulink Java / .net CF 13年9月17日火曜日
  9. 9. • 低レイヤーの開発環境を持っていない • 上位層のテストの為だけにコード変更… • 単体テスト∼システムテストまで終わっている • コードを見せたくない or 触らせたくない • プロセッサ非依存開発環境 Processor-independent devel environment 13年9月17日火曜日
  10. 10. • プロセッサ非依存開発環境 • インタプリタを自作すると良い事ひとつも無い • 主要なVM紹介 • JVMで動くのはJavaだけ? • RaVem JVM • 競合するJVM比較 • バイトコードの概要 • メモリ管理とガーベジコレクション • マルチスレッドに対応する • オリジナル関数(メソッド)追加方法 Agenda 13年9月17日火曜日
  11. 11. my own interpreter • 三重苦 • 文字列認識(対話)型 or 中間コード生成方式 • エラー発生 • 単なるコードエラー? • 仕様の想定を超えていた? • 仕様から作り直しだよksg • 独自インタプリタの使い方を教える必要 • もうだめぽ 13年9月17日火曜日
  12. 12. my own interpreter • すでにあるVM規格のある言語仕様を活用 Language for embedded requirements Python P14P(ex.PyMite) Flash:55kB~,RAM:8kB~ Lua eLua Flash:256kB~,RAM:64kB~ Ruby mruby Flash:512kB,RAM:1MB? Java Java ME and so on... Flash:130kB,RAM:8kB 13年9月17日火曜日
  13. 13. VM • すでにあるVM規格のある言語仕様を活用 Java VB Python JavaScript Ruby Perl ※VMの実装がある言語に限った 13年9月17日火曜日
  14. 14. VM • すでにあるVM規格のある言語仕様を活用 54% 13% 12% 7% 7% 7% 人気のある言語(Tiobe Programming Community調べ,Aug 2013) Java VB Python JavaScript Ruby Perl ※VMの実装がある言語に限った 13年9月17日火曜日
  15. 15. Variants Java VM • Java for embedded JVM System requirements Oracle Java ME Embedded for STM32F Flash :130kB~ RAM: ? Binary only uJ Flash :64kB~ RAM:192bytes~ thread,runnable,GC, original String type nanoVM Flash :8kB~ RAM: 1kB~ for AVR Single thread RaVem Flash :5kB~ RAM: 256bytes~ thread,runnable, Integer only 13年9月17日火曜日
  16. 16. • 開発はC言語だけど、それぞれのCPU用のコンパイラが 必要 C compiler ARM intel AVR PIC Applica tion 13年9月17日火曜日
  17. 17. • 開発はC言語だけど、それぞれのCPU用のコンパイラが 必要 C compiler Compiler Compiler Compiler Compiler ARM intel AVR PIC Applica tion 13年9月17日火曜日
  18. 18. • Java:一度VMをマイコンに実装すればデバイス非依存 • Java managed code ARM intel AVR PIC VM 13年9月17日火曜日
  19. 19. • Java:一度VMをマイコンに実装すればデバイス非依存 • Java managed code ARM intel AVR PIC VM device-independent 13年9月17日火曜日
  20. 20. • Java:一度VMをマイコンに実装すればデバイス非依存 • Java managed code ARM intel AVR PIC VM device-independent write once run anywhere 13年9月17日火曜日
  21. 21. VM • バイトコードを解釈する機構を実装 •バイトコードって何が書いてあるの? 13年9月17日火曜日
  22. 22. byte code • バイトコードの中身 • 定数プール(constant pool) • 命令(Code Attribute) • 例外(Exception) • big endian CA FE BA BE........ ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... 13年9月17日火曜日
  23. 23. byte code • バイトコードの中身 • 定数プール(constant pool) • 命令(Code Attribute) • 例外(Exception) • big endian CA FE BA BE........ ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... 13年9月17日火曜日
  24. 24. byte code • バイトコードの中身 • 定数プール(constant pool) • 命令(Code Attribute) • 例外(Exception) • big endian CA FE BA BE........ ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... 13年9月17日火曜日
  25. 25. byte code • バイトコードの中身 • 定数プール(constant pool) • 命令(Code Attribute) • 例外(Exception) • big endian CA FE BA BE........ ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... 13年9月17日火曜日
  26. 26. byte code • 具体例(hello world) • 例:定数プール(20)→”hello world” • 命令 • 定数プール20番をスタック • printlnメソッドを呼び出せ cp[1]=........ ........ cp[20]=”hello world” ........ load cp[20],stack call “println” System.out.println(“hello world”); 13年9月17日火曜日
  27. 27. byte code • 具体例(hello world) • 例:定数プール(20)→”hello world” • 命令 • 定数プール20番をスタック • printlnメソッドを呼び出せ cp[1]=........ ........ cp[20]=”hello world” ........ load cp[20],stack call “println” 13年9月17日火曜日
  28. 28. stack • スタック(Operand Stack) • 積み木(順番に積み上げて、上から取る) 13年9月17日火曜日
  29. 29. stack • スタック(Operand Stack) • 積み木(順番に積み上げて、上から取る) data1 data2 data3 13年9月17日火曜日
  30. 30. stack • スタック(Operand Stack) • 積み木(順番に積み上げて、上から取る) data1 data2 data3 13年9月17日火曜日
  31. 31. example: add • 具体例(加算) int x, y, z; x = 10; y = 20; z = x + y; System.out.println(z); 13年9月17日火曜日
  32. 32. example: add • 具体例(加算) 13年9月17日火曜日
  33. 33. example: add • 具体例(加算) 10 20 13年9月17日火曜日
  34. 34. example: add • 具体例(加算) 30 13年9月17日火曜日
  35. 35. Java VM • Java VMは • 定数プールを引用する仕組み • スタックを管理する仕組み • 命令を実行する仕組み があれば作れてしまう 13年9月17日火曜日
  36. 36. Java VM • Java VMは • 定数プールを引用する仕組み • スタックを管理する仕組み • 命令を実行する仕組み があれば作れてしまう なのでCortex-M0+でJavaVM作ってみた 13年9月17日火曜日
  37. 37. RaVem JVM RaVemRaVem Rapid VM embbededRapid VM embbeded • Flash 5kbytes~ • RAM 128bytes • int type only • all code written in C (about 700 sloc) • github (for LPC812) • https://github.com/lynxeyed-atsu/RaVem • port on mbed • http://mbed.org/users/lynxeyed_atsu/code/FRDM_RaVem_JVM 13年9月17日火曜日
  38. 38. blink LEDs with JVM • GPIOを操作するメソッド: portWrite(bit, value) • 一定時間でLEDをon/offするコードを書く • 上記を4-thread化 13年9月17日火曜日
  39. 39. blink LEDs with JVM • GPIOを操作するメソッド: portWrite(bit, value) • 一定時間でLEDをon/offするコードを書く • 上記を4-thread化mbed.portWrite(port_bit, 0); Thread.sleep(time); mbed.portWrite(port_bit, 1); Thread.sleep(time); 13年9月17日火曜日
  40. 40. blink LEDs with JVM • GPIOを操作するメソッド: portWrite(bit, value) • 一定時間でLEDをon/offするコードを書く • 上記を4-thread化mbed.portWrite(port_bit, 0); Thread.sleep(time); mbed.portWrite(port_bit, 1); Thread.sleep(time); BlinkLED LED1 = new BlinkLED(0, 90); BlinkLED LED2 = new BlinkLED(1, 100); ...... Thread th1 = new Thread(LED1); Thread th2 = new Thread(LED2); ...... th1.start(); th2.start(); 13年9月17日火曜日
  41. 41. blink LEDs with JVM • mbedにRaVem JVMのVM(.bin)ファイルを書き込み • javaコードをjavacでコンパイル • .classファイル生成(byte code) • Test.claにリネーム • mbedにコピー • リセット後スタート public static void main(){int a, b;........ } CA FE BA BE 00 00 00 32 00 22 07 00 02 01 00 05 48 65 6c 6c 6f 07 00 04 01 00 10 6a javac copy 13年9月17日火曜日
  42. 42. まとめ • Java VMをmbedやLPC81xに移植した • mbed:D&DでJavaのバイトコードをコピー、実行 • others:バイトコードを配列にしてコンパイル • 利点:デバイス依存なC環境が用意できない環境でも Javaである程度の開発ができる • ブログ: • http://lynxeyed.hatenablog.com/ 13年9月17日火曜日
  43. 43. ご清聴ありがとうございました 13年9月17日火曜日
  44. 44. ここから質疑応答用スライド 13年9月17日火曜日
  45. 45. RaVem JVM • 新しいメソッドfoobarの追加 • invokestatic_callFunction (in ravem.c) • if(strncmp(func_name,"foobar",6) == 0){.... } • クラスファイルにフェイクでメソッドを追加 • 実動作は書かなくてよい(戻り値あるなら適当に return NULLとでも) 13年9月17日火曜日
  46. 46. byte code • バイトコードの中身 • 命令(Code Attribute) • main method • run method in thread • RaVem JVMでは以下を管理 • vm_object • start address • end address • num. of stack • local registor • thread number CA FE BA BE........ ........................... ........................... ........................... ........................... ........................... ........................... ........................... ........................... 13年9月17日火曜日
  47. 47. rights of Java VM • Copyright law does not confer ownership over any and all ways to implement a function or specification, no matter how creative the copyrighted implementation or specification may be. • The Act confers ownership only over the specific way in which the author wrote out his version. Others are free to write their own implementation to accomplish the identical function, for, importantly, ideas, concepts and functions cannot be monopolized by copyright. -- William Alsup, the judge Google v. Oracle. 13年9月17日火曜日

×