mruby/c in tokyorubykaigi#11
TRANSCRIPT
mruby/c
Kazuaki Tanaka
Kyushu Institute of Technology
自己紹介
• 九州工業大学 Kyutech, Fukuoka
• Lectures
– Programming
– Algorithms and data structures
– Database
– Robot sensor processing
Joint research project
• Digital signage devices
mruby軽量Ruby
• Ruby for embedded systems
– Small, Lightweight
– Portable
– Configurable
• METI project work
mrubyLightweight
• < 400KB
• One chip microprocessor
ARM Coretex-M4 168MHz1MB SRAM, 1MB Flash
enzi mruby board,http://enzi.cc/
mrubyPortable
• Executing mruby bytecode using mruby VM
SourceCode
program.rb
ByteCode
program.mrb
mrbc
Device A
Execute
mruby VM
Device B
Execute
mruby VM
PC
Execute
mruby VM
mrubyConfigurable
• mrbgems
– VM configuration
• Add one line in build_config.rb
conf.gem :github => 'iij/mruby-socket’
http://mruby.org/libraries/
mruby/c project
• mruby for more smaller device
• Concurrent mruby execution without OS
• “/c” stands for compact and concurrent
ARM Coretex-M3 80MHz64KB SRAM, 256KB Flash
PSoC5LP,http://cypress.com/
Demomruby/c
PSoC5LPARM Coretex-M3 80MHz64KB SRAM, 256KB Flash
Detailsmruby/c
• GC
• Concurrency
• Boot
GCmruby/c
No GC
How it works?
• Small mruby/c program only supported
• When a program ended, memory initialized
• How to support long term execution?
– Use concurrency
Concurrencymruby/c
• mruby/c is for Non-OS environment
• But expect multiple programs execution
VM dispatches
mruby programs
Concurrencymruby/c
OP_LOAD
OP_ADDI
OP_JMP
・・
OP_LOADI
OP_SEND
OP_LOAD
・・
mruby VM
One Instruction
One Instruction
Execute
Program A
Program B
Reg.Stack
Program Awork
Reg.Stack
Program Bwork
SymbolClassMethodGlobal
Shared
Demomruby/c, concurrency
i = 100
while i<200 do
puts i
i = i + 1
end
i = 1000
while i<1100 do
puts i
i = i + 1
end
Demomruby/c, concurrency
$lock = true
i = 1
while i<10 do
puts i
i = i + 1
end
$lock = false
while $lock do
end
i = 100
while i<110 do
puts i
i = i + 1
end
Using spinlock without mutual exclusion >_<
Boot
• Boot process =
+ Initialize VM work
+ Create classes
+ Register all the methods to classes
1. Create entry point to a method2. Get symbol of a method3. Add a element to hash table
for all methods
Bootmruby/c
• Simple Registration, using linked list.
[s]
Loop count
GET mruby and mruby/c
• mruby
• mruby/c
https://github.com/mrubyc/mrubyc
https://github.com/mruby/mruby
http://forum.mruby.org/
http://www.s-itoc.jp/activity/research/mruby/
良いことづくめ?
• mruby/cは,多くの制約があります
– クラス,メソッド不足
– Fixnum だけ,だからあふれます
– Arrayは線形リスト,だから…
– メソッドは線形リストで管理,だから…
– メモリは静的に確保します
まだまだ開発途上ですご協力ください!