$30 off During Our Annual Pro Sale. View Details »

MCU 與 Lightweight javascript engine 的邂逅

blue chen
April 26, 2016

MCU 與 Lightweight javascript engine 的邂逅

blue chen

April 26, 2016
Tweet

More Decks by blue chen

Other Decks in Business

Transcript

  1. MCU 與 Lightweight Javascript engine 的邂逅

    View Slide

  2. Blue
    IT/EAS1  -­‐  Javascript  重度使⽤用者  
    Github:  github/iamblue  
    Email:  po-­‐[email protected]

    View Slide

  3. 前情提要
    2015/12  開售  
    LinkIt  Smart  7688  完整  support  Javascript

    https://speakerdeck.com/iamblue/linkit-­‐smart-­‐7688-­‐yu-­‐node-­‐dot-­‐js-­‐de-­‐xie-­‐hou  

    View Slide

  4. Why Javascript for IoT?
    從  程式語⾔言  Community  及語⾔言話題討論相關數據分析來看  
    從  LinkIt  Smart  7688  使⽤用  Node.js  推廣⾄至社群經驗來看  
    JavaScript is well-suited to embedded device programming

    View Slide

  5. https://redmonk.com/sogrady/2015/01/14/language-­‐rankings-­‐1-­‐15/
    1  JavaScript  
    2  Java  
    3  PHP  
    4  Python  
    5  C#  
    5  C++  
    5  Ruby

    View Slide

  6. Active  Repositories  and  total  pushes  -­‐>  Javascript  is  no.1  

    View Slide

  7. 從  程式語⾔言  Community  及語⾔言話題討論相關數據分析來看  
    從  LinkIt  Smart  7688  使⽤用  Node.js  推廣⾄至社群經驗來看  
    JavaScript is well-suited to embedded device programming
    Why Javascript for IoT?

    View Slide

  8. 從去年  12  ⽉月⾄至今年  7  ⽉月  
    10000+  Unique  vistors  
    10  contributors  
    3  language  support  
    (English/  ZH-­‐tw  /  ZH-­‐cn)  
    本書成為各社群及國中⼩小  
    ⽼老師參考教學教材之⼀一  

    View Slide

  9. ⼀一共有來⾃自  74+  個國家  Javascript  開發者閱讀

    View Slide

  10. 過去⾼高階語⾔言在  IoT  裝置上開發遇到的痛點:  
    要考量各架構    MIPS  ,  ARM  的  Cross  compile    
    晶⽚片廠幾乎沒有出模擬器,需實際在裝置上跑⼀一回  
    站在喜歡⽤用⾼高階語⾔言開發(Node.js)的⾓角度來貢獻程式碼分享經典⽂文章如下:  
    • mt7688-­‐抗痛寧-­‐遠端掛載檔案系統開發-­‐node-­‐js-­‐應⽤用程式  
    • mt7688-­‐抗痛寧-­‐交叉編譯-­‐node-­‐js-­‐原⽣生模組  
    • 沒有板⼦子也可以玩-­‐7688,如何使⽤用  mt7688  模擬器  
    在社群上發酵的例⼦子:Makercup community
    幫助  MTK  補⾜足在社群上提供對開發者親近的⼯工具之重⼤大貢獻

    View Slide

  11. 從  程式語⾔言  Community  及語⾔言話題討論相關數據分析來看  
    從  LinkIt  Smart  7688  使⽤用  Node.js  推廣⾄至社群經驗來看  
    JavaScript is well-suited to embedded device programming
    Why Javascript for IoT?

    View Slide

  12. Javascript  語⾔言特性  
    1.事件驅動  
    2.Non  Blocking  /  Async      
    3.JSON  parser    
    4.弱型別語⾔言    
    5.Node  package  management    (  龐⼤大的  community  社群  )
    JavaScript is well-suited to embedded device programming

    View Slide

  13. JavaScript is well-suited to embedded device programming
    特別是事件驅動設計
    監聽  GPIO2  變化
    監聽  GPIO1  變化
    監聽  GPIO3  變化
    觸發A
    觸發B
    觸發C

    View Slide

  14. JavaScript is well-suited to embedded device programming
    特別是事件驅動設計
    監聽  GPIO2  變化
    監聽  GPIO1  變化
    監聽  GPIO3  變化
    觸發A
    觸發B
    觸發C

    View Slide

  15. JavaScript is well-suited to embedded device programming
    特別是事件驅動設計
    監聽  GPIO2  變化
    監聽  GPIO1  變化
    監聽  GPIO3  變化
    觸發A
    觸發B
    觸發C
    GPIO2  有變化了
    發⽣生事件

    View Slide

  16. JavaScript is well-suited to embedded device programming
    特別是事件驅動設計
    監聽  GPIO2  變化
    監聽  GPIO1  變化
    監聽  GPIO3  變化
    觸發A
    觸發B
    觸發C
    GPIO2  有變化了
    發⽣生事件

    View Slide

  17. JavaScript is well-suited to embedded device programming
    特別是事件驅動設計
    監聽  GPIO2  變化
    監聽  GPIO1  變化
    監聽  GPIO3  變化
    觸發A
    觸發B
    觸發C
    GPIO2  有變化了
    發⽣生事件

    View Slide

  18. JavaScript is well-suited to embedded device programming
    特別是事件驅動設計
    在    IOT  應⽤用場景中絕⼤大多數邏輯都跟事件封裝有關

    View Slide

  19. Javascript  語⾔言特性  
    1.事件驅動  
    2.Non  Blocking  /  Async      
    3.JSON  parser    
    4.弱型別語⾔言    
    5.Node  package  management  
    JavaScript is well-suited to embedded device programming
    特別是寫  C  常遇到的  Internet  request    Blocking
    不需要再花⽽而外⼒力氣去  parse  JSON
    不需負擔太多學習成本
    龐⼤大的  community  

    View Slide

  20. 從  程式語⾔言  Community  及語⾔言話題討論相關數據分析來看  
    從  LinkIt  Smart  7688  使⽤用  Node.js  推廣⾄至社群經驗來看  
    JavaScript is well-suited to embedded device programming
    Why Javascript for IoT?

    View Slide

  21. IoT  device  市場上常⾒見應⽤用場景

    View Slide

  22. IoT  device  市場上常⾒見應⽤用場景

    View Slide

  23. IoT  device  市場上常⾒見應⽤用場景
    Lightweight  ,  省電  
    (MCU)
    gateway,  powerful    
    (MPU)
    Lightweight  ,  省電  
    (MCU)

    View Slide

  24. IoT  device  市場上常⾒見應⽤用場景
    Lightweight  ,  省電  
    (MCU)
    gateway,  powerful    
    (MPU)
    Lightweight  ,  省電  
    (MCU)

    View Slide

  25. IoT  device  市場上常⾒見應⽤用場景
    Lightweight  ,  省電  
    (MCU)
    gateway,  powerful    
    (MPU)
    Lightweight  ,  省電  
    (MCU)
    缺少這個

    View Slide

  26. http://ec.wpgo2o.com/getAdDetailPage?AdId=46&Catg=C&ItemId=3086999&ParentId=45
    開發板
    •ARM  Cortex-­‐M4F  MCU  (192MHz).  
    •1x1  802.11b/g/n  Wi-­‐Fi  subsystem  
    designed  for  power  efficiency  and  
    robust  connectivity.  
    •Versatile  peripheral  connectivity,  
    including  UART,  I2C,  SPI,  I2S,  PWM,  
    IrDA  and  auxiliary  ADC.  
    •  256KB  RAM  
    •Embedded  SRAM/ROM  and  2MB  
    serial  flash  in  package.  
    •Integrated  security  engine  (AES  
    and  3DES/SHA).  
    •8  x  8mm  68-­‐pin  QFN  package.
    2016/4 release MT7687

    View Slide

  27. Porting  Javascript  engine  on  MCU  device  ⾮非常新奇  
    但  ….  困難重重

    View Slide

  28. Node.js 現況問題
    以實際使⽤用⾯面來看  (  以當初  porting  LinkIt  smart  7688  為例  )

    View Slide

  29. 先從⼀一般基本跑得動 Node.js 情境來談
    Node.js
    OS  
    Applicaton
    想像⼀一下各位現有的  server  如何跑  Node.js?  
    規格
    架構
    Linux,  openWRT…etc
    硬碟⾄至少要  1X  mb,  RAM  建議⾄至少要  64  mb
    Reference:  Node.js  與  LinkIt  smart  7688  的邂逅

    View Slide

  30. • MT7688
    • 128MB DDR2
    • 32MB Flash
    • Chip Antenna (default)
    • IPEX Ext Antenna
    • microSD
    • USB Host
    • JTAG
    LinkIt Smart 7688
    Reference:  Node.js  與  LinkIt  smart  7688  的邂逅

    View Slide

  31. http://ec.wpgo2o.com/getAdDetailPage?AdId=46&Catg=C&ItemId=3086999&ParentId=45
    開發板
    •ARM  Cortex-­‐M4F  MCU  (192MHz).  
    •1x1  802.11b/g/n  Wi-­‐Fi  subsystem  
    designed  for  power  efficiency  and  
    robust  connectivity.  
    •Versatile  peripheral  connectivity,  
    including  UART,  I2C,  SPI,  I2S,  PWM,  
    IrDA  and  auxiliary  ADC.  
    •  256KB  RAM  
    •Embedded  SRAM/ROM  and  2MB  
    serial  flash  in  package.  
    •Integrated  security  engine  (AES  
    and  3DES/SHA).  
    •8  x  8mm  68-­‐pin  QFN  package.
    2016/4 release MT7687
    因此在這應硬體需求下,需要去設計
    更  Lightweight  的  javascript  engine

    View Slide

  32. Lightweight Javascript engine 技術趨勢

    View Slide

  33. Community 最早盛⾏行的 Javascript Engine: Tiny.js
    •First  Run  on  STM32  javascript  engine  
    •Extremely  Simple  (~2000  line)  javascript  interpreter    
    •Github:  https://github.com/gfwilliams/tiny-­‐js  
    •原理:  邊  parse  邊解析(不構成  AST)  https://www.zhihu.com/question/36674924
    基於 Tiny.js 做出來的產品 Espruino

    View Slide

  34. 除了是稍早較著名輕量  Javascript  Engine  外  
    同時也是第⼀一個將  Javascript  community  所熟悉的技術帶⼊入  Embeded  board  開發之中
    使⽤用  Javascript  新穎的技術來解決開發  Embeded  board  關鍵問題
    Tiny.js Javascript Engine 給我最⼤大的啟思

    View Slide

  35. 基於 Tiny.js 做出來的產品 Espruino 周邊 support - WebIDE
    •良好的介⾯面  (  純  web  開發出來  )  
    •Chrome  extension  app  (  解決跨平
    台問題  )  
    •Support  USB  存取權限  (  基於  
    chrome  app  )  因此可以直接⽤用  
    chrome  app  來燒錄/debug  ⾄至  
    device.
    Microchip,  TI  也跟他們學習類似的⽅方式擴充⾃自⼰己的  cloud  IDE  幫助開發者

    View Slide

  36. Tessel 的起源 (2011-2012)
    先把  Javascript  在電腦上  
    編譯成  Lua  VM  的  Bytecode
    User’s  computer Tessel  1
    •因當時  js  interpreter  Engine  選
    擇太少,作者提出⽤用當時相對
    較佳效能的  LuaVM  來輔助  
    •Javascript  Code  調教成  LuaVM  
    Bytecode  ⾮非常耗費⼈人⼒力  
    support.  
    •Tessel2  代捨棄  MCU  ,改⽤用  
    MPU  (跑  Node.js)  ,MPU  也是
    使⽤用  MediaTek  solution  (MT  
    7620  ,  7688  的前⾝身)  
    Reference:  https://tessel.io/

    View Slide

  37. • ⾼高通  (Allseen  聯盟):  alljoyn.js  (duktape)  
    • Samsung  (OIC  聯盟):  IoT.js  (jerryscript)  
    • ESP:  Espruino,  V7
    2012 年各家晶⽚片⼤大廠研究 porting Lightweight Javascript
    engine on MCU 議題
    贊助開發
    ⾃自主研發
    社群贊助,但  ESP  8266  由於硬體資源不⾜足,⺫⽬目前⼤大家習慣是  lua  開發

    View Slide

  38. Alljoyn.js ( Duktape engine )
    Alljoyn  (AllSeen  聯盟)    
    在  module  佈局廣主打這塊
    Source  code  :  https://git.allseenalliance.org/cgit/core/alljoyn-­‐js.git/  
    Reference:  https://wiki.allseenalliance.org/_media/training/programming_alljoyn.js.pdf

    View Slide

  39. Duktape Javascript engine
    •  The  first  full  support  ES5  javascript  engine  
    •  Run  time  memory  suggestion:  96  KB    
    •  Flash  space  suggestion:  256KB  
    •  提供各種  RAM  or  ROM  build  機制選項  
    •  把  build  ,  debugger  機制給考慮進  engine  之中  
    •  較好的跨平台  Build  機制
    • 當時時空背景:wifi  +  MCU  市場尚未起來  
    • AllSeen  聯盟主推較  powerful  的  MCU  
    • 因此較低的  RAM/ROM  不是  Duktape  engine  設計初衷
    除此之外

    View Slide

  40. Smart.js ( v7 engine )
    Reference:  Smart.js  官⽅方網站
    •  support  ES5  Javascript  engine  
    •  專⾨門給較⼩小  RAM/ROM  device  
    設計    
    •  轉  bytecode  部分是針對  AST  優
    化  
    (效能不錯,但耗的  RAM  較
    ⾼高)  

    View Slide

  41. Samsung IoT.js ( Jerryscript engine )
    Reference:  Jerryscript  官⽅方網站
    •設計初期⺫⽬目標:針對  <100KB  之  RAM/ROM  
    chip  設計的  engine  
    •⼤大幅針對  interpreter  js  engine  常⾒見的通病:

    String  (Duktape  最弱的地⽅方),  bytecode,  
    memory  效能改進  
    •No  AST,  directly  produce  bytecode

    View Slide

  42. Jerryscript Architecture
    Reference:  Jerryscript  官⽅方網站

    View Slide

  43. Jerryscript Architecture (for Example : String parser優化)
    Reference:  Jerryscript  官⽅方網站

    View Slide

  44. Jerryscript Architecture (for Example : String parser優化)
    Reference:  Jerryscript  官⽅方網站

    View Slide

  45. 實作 benchmark
    LICENSE
    ECMA 5

    (leverage
    node.js
    community
    Native
    binding
    api
    RAM

    (Run time
    memory
    usage)
    ROM

    (binary
    size)
    CM4

    support
    Jerryscript Apache2 y (100%) y 10~70KB <100KB y
    v7 GPL y ( 80%) n 30~100KB 40-200KB n (CM3)
    Duktape MIT y(100%) y ~96KB
    200~256
    K
    n

    View Slide

  46. 實作 benchmark ( 先⽐比較 ECMA 與 LICENSE)
    LICENSE
    ECMA 5

    (leverage
    node.js
    community
    Native
    binding
    api
    RAM

    (Run time
    memory
    usage)
    ROM

    (binary
    size)
    CM4

    support
    Jerryscript Apache2 y (100%) y 30~70KB <100KB y
    v7 GPL y ( 80%) n 50~120KB 40-200KB n (CM3)
    Duktape MIT y(100%) y ~96KB
    200~256
    K
    n

    View Slide

  47. 實作 benchmark (⽐比較 RAM 與 ROM)
    LICENSE
    ECMA 5

    (leverage
    node.js
    community
    Native
    binding
    api
    RAM

    (Run time
    memory
    usage)
    ROM

    (binary
    size)
    CM4

    support
    Jerryscript Apache2 y (100%) y 30~70KB <100KB y
    v7 GPL y ( 80%) n 30~100KB 40-200KB n (CM3)
    Duktape MIT y(100%) y ~96KB
    200~256
    K
    n
    關鍵

    View Slide

  48. 光有 Javascript engine
    這樣還不夠...

    View Slide

  49. • MCU  build  tool  環境各家不⼀一致  
    •    Debug/  Download  code  各家不⼀一樣  
    •    LICENSE  問題:⼤大部份廠商  SDK  皆有  dis-­‐contribute  規範  
    •    沒有共同的  sharing  project  標準  
    • 現成的  Js  total  solution  不夠輕量,不符合效能接近  C  的需求  
    • freeRTOS  設計,沒有  filesystem  設計
    這樣還不夠 ….

    View Slide

  50. • MCU  build  tool  環境各家不⼀一致  
    •    Debug/  Download  code  各家不⼀一樣  
    •    LICENSE  問題:⼤大部份廠商  SDK  皆有  dis-­‐contribute  規範  
    •    沒有共同的  sharing  project  標準  
    • 現成的  Js  total  solution  不夠輕量,不符合效能接近  C  的需求  
    • freeRTOS  設計,沒有  filesystem  設計
    這樣還不夠 ….

    View Slide

  51. 現成的 Js total solution 不夠輕量,不符合效能接近 C 的需求
    市場上同級的  Wifi  MCU  競品規格  
    •RAM:  128~512KB  
    •flash:  2mb  居多,不然就是可額外掛載  
    •OS:  各家分佈不⼀一,但⼤大多數皆有  support  freeRTOS  
    Samsung  IoT.js  的問題  
    •致⼒力為成為  IoT  版的  Node.js  ,Native  API  與  Node.js  ⼀一致  
    Image  肥⼤大介在  4  mb  之間  
    •因為要符合跨  OS  需求,因此從新設計  libuv    
    有些  api  RTOS  本⾝身就已具備,且效能也⽐比較快

    View Slide

  52. Microlattice.js
    Github:  https://github.com/iamblue/microlattice
    Gitbook:  https://www.gitbook.com/book/iamblue/microlattice-­‐js-­‐for-­‐linkit-­‐rtos/details/zh-­‐TW

    View Slide

  53. Microlattice.js 設計精神
    設計理念  
    •真正為  IoT  device  所設計的  IoT  版的  Node.js.  
    •針對  Javascript  community  所熟悉的  coding  style  追求接近  C  的效能  
    •每⼀一個細節包含  tool,  module,  engine  core  都是可以拆分重組
    • 中⽂文意思:微晶格  
    • 英⽂文意思:世界上最⼩小最輕且⾮非常堅固的⾦金屬材料

    View Slide

  54. Node.js
    v8  Javascript  engine
    libuv  (async,  event  emitter,  OS  handle  …)
    JS  binding
    Npm
    與 Node.js 架構相較
    使⽤用  RTOS  API    (初期專注  freeRTOS  )
    Jerryscript  engine
    Node.js  提供了接近  20  種  api  ,  但是  
    Microlattice  設計  parser    機制每⼀一種  
    Native  API  都要⽤用到才會被  compile  
    進  image

    View Slide

  55. FreeRTOS
    Jerryscript
    Microlattice.JS
    Microlattice.js Architecture
    MT7687 MT2523 MT7697
    C
    Javascript
    *.npm
    Network Event I/O
    Jerryscript  binding FreeRTOS  binding
    Microlattice  App
    support  chip:
    Async,  no-­‐blocking  (  without  libuv  )

    View Slide

  56. • MCU  build  tool  環境各家不⼀一致  
    •    Debug/  Download  code  各家不⼀一樣  
    •    LICENSE  問題:⼤大部份廠商  SDK  皆有  dis-­‐contribute  規範  
    •    沒有共同的  sharing  project  標準  
    • 現成的  Js  total  solution  不夠輕量,不符合效能接近  C  的需求  
    • freeRTOS  設計,沒有  filesystem  設計
    這樣還不夠 ….

    View Slide

  57. 關於 Build tools
    使⽤用 Microlattice.js cli 來客製化需求

    View Slide

  58. Microlattice.js CLI
    • ml  create    
    • ml  burn      (Mass  storage)  
    • ml  debugger  (OpenOCD)  
    https://github.com/iamblue/ml-­‐mt7687-­‐config/blob/master/index.js
    • ml  init:7687  
    • ml  install:gcc  
    • ml  install:sdk  
    • …  
    基本款通⽤用的  command  line
    廠商可以客製化⾃自⼰己的  cli  ,  包在  ml-­‐XXX-­‐
    config  之中  
    以  7687  為例,全包在  ml-­‐mt7687-­‐config  中

    View Slide

  59. Microlattice.js ⼀一般燒 code 流程 ( npm 化 )
    Writing  Javascript  (on  index.js)
    Build  js  file  (ml  build:js)
    Build  Image  (ml  build:bin)
    Auto  download  image  to  device.
    npm  run  build

    View Slide

  60. LiveReload 功能,藉由 MCS 輔助 ( 隨 3.1.0 SDK release )
    npm  run  watch
    耗時約  3s  內  
    Restart  JS  
    runtime
    Writing  Javascript  (on  index.js)

    View Slide

  61. • MCU  build  tool  環境各家很不⼀一致  
    •    Debug/  Download  code  各家皆不⼀一樣  
    •    LICENSE  問題:⼤大部份廠商  SDK  皆有  dis-­‐contribute  規範  
    •    沒有共同的  sharing  project  標準  
    • 現成的  Js  total  solution  不夠輕量,不符合效能接近  C    
    • freeRTOS  設計,沒有  filesystem  設計
    這樣還不夠 ….

    View Slide

  62. •Microlattice  預設會在  project  下有⼀一個  sdk  folder  
    建議各家將⾃自⼰己的  sdk  放在這路徑下去  build  出  image  
    •MT7687  做法  
    https://iamblue.gitbooks.io/microlattice-­‐js-­‐for-­‐linkit-­‐rtos/content/zh-­‐TW//intro/create.html  
    關於 LICENSE 問題 - 讓各家在 command line ⾃自⾏行去定義

    View Slide

  63. • MCU  build  tool  環境各家很不⼀一致  
    •    Debug/  Download  code  各家皆不⼀一樣  
    •    LICENSE  問題:⼤大部份廠商  SDK  皆有  dis-­‐contribute  規範  
    •    沒有共同的  sharing  project  標準  
    • 現成的  Js  total  solution  不夠輕量,不符合效能接近  C    
    • ⼤大部份  RTOS  設計,沒有  filesystem  設計
    這樣還不夠 ….

    View Slide

  64. Sharing project 參考
    https://github.com/iamblue/microlattice-­‐gpio-­‐example
    •Microlattice  gpio  example  project  for  MT7687

    View Slide

  65. • MCU  build  tool  環境各家不⼀一致  
    •    Debug/  Download  code  各家不⼀一樣  
    •    LICENSE  問題:⼤大部份廠商  SDK  皆有  dis-­‐contribute  規範  
    •    沒有共同的  sharing  project  標準  
    • 現成的  Js  total  solution  不夠輕量,不符合效能接近  C    
    • freeRTOS  設計,沒有  filesystem  設計
    這樣還不夠 ….

    View Slide

  66. • freeRTOS  設計,沒有  filesystem  設計  (  在  build  過程設計  require  module  機制  )  
    • Native  api  binding  瘦⾝身,⽤用到即載⼊入  
    • 針對    npm  加強使⽤用  Native  binding  時的效能優化
    現成的  Js  total  solution  不夠輕量,不符合效能接近  C    

    View Slide

  67. 關於 npm , module management 效能優化

    View Slide

  68. global  mode
    Microlattice.js    
    有設計輕量級的  require  module  
    機制,可以在開發階段跟熟悉的
    語法⼀一樣  require  node  module  

    View Slide

  69. global  mode
    Microlattice.js    
    有設計輕量級的  require  module  
    機制,可以在開發階段跟熟悉的
    語法⼀一樣  require  node  module  
    但由於效能上的考量  (  特別是  256  
    KB  的  RAM  之中  )    
    不建議每個  hal  層  api  都須經由  
    require  封裝後載⼊入  (  RAM  存取這
    些封裝函數也很吃重  )  

    View Slide

  70. Require  mode
    global  mode
    __XXX  為  binding  api,  可以直接  call  
    __XXX  (or  global.__XXX)  來對  C  
    binding  api  保有最佳的效能操作  

    View Slide

  71. Support Javascript API List
    • I/O  
    Pinmux  
    GPIO  
    ADC  
    PWM  
    Uart  
    •WIFI  
    AP/STATION/REAPTER  mode  
    • Encryptor    
    MD5  
    SHA  
    AES  (TBD)  
    DES  (TBD)  
    •Internet  protocol  
    MQTT  
    TCP  
    UDP  
    HTTP  
    HTTPS  (TBD)  
    MQTTs  (TBD)  
    HTTP2    (TBD)  
    •Event  
    Event  emitter  
    •Tools  
    Timer  (setTimeout/  setInterval  /  …    )  
    Utils    
    Fota  
    Wdt  
    RebootScript  
    https://iamblue.gitbooks.io/microlattice-­‐js-­‐for-­‐linkit-­‐rtos/content/zh-­‐TW//api/pinmux.html

    View Slide

  72. Demo

    View Slide

  73. FreeRTOS
    Jerryscript
    Microlattice.JS
    Microlattice.js Architecture
    MT7687 MT2523 MT7697
    C
    Javascript
    *.npm
    Network Event I/O
    Jerryscript  binding FreeRTOS  binding
    Microlattice  App
    support  chip:
    Async,  no-­‐blocking  (  without  libuv  )

    View Slide

  74. •  RAM  使⽤用率  
    •SDK  v3.0.0:  Free  heap  -­‐>  ~80KB  
    •SDK  v.3.1.0~3.3.1:  Free  heap  -­‐>  ~  105  KB  (有含  wifi)  
    •SDK  v.3.1.0~3.3.1:  Free  heap  -­‐>  ~  150  KB  (不含  wifi)  
    •  每個  Native  API  最多瞬間佔⽤用  20  KB  RAM  
    •  ROM  使⽤用率:  Basic  MTK  SDK  (iot_sdk)  +  Microlattice.js  ~600KB  
    Microlattice.js benchmark

    View Slide

  75. 當前不⾜足之處改進

    View Slide

  76. •  Jerryscript  Engine  處理某些  String  效能不彰  
    •  Image  too  heavy  
    •  module  豐富度
    Microlattice.js 當前⼀一些問題

    View Slide

  77. Microlattice.js 當前⼀一些問題
    FreeRTOS
    ml-­‐gpio ml-­‐pwm ml-­‐wifi ml-­‐mqtt
    JS  binding
    現在:  基於  SDK  疊加    
    JS  binding

    View Slide

  78. Microlattice.js 當前⼀一些問題
    FreeRTOS
    ml-­‐gpio ml-­‐pwm ml-­‐wifi
    JS  binding
    現在:  基於  SDK  疊加    
    JS  binding
    Total  size  還是很⼤大  
    且還有很多  dependency  問題

    View Slide

  79. Microlattice.js 當前⼀一些問題
    FreeRTOS
    Unikernel  概念
    ml-­‐gpio
    ml-­‐pwm
    ml-­‐gpio ml-­‐pwm ml-­‐wifi ml-­‐mqtt
    ml-­‐wifi ml-­‐mqtt …
    JS  binding
    JS  binding
    driver+  hal
    現在:  基於  SDK  疊加    
    JS  binding

    View Slide

  80. •  Jerryscript  Engine  處理某些  String  效能不彰  
    •  Image  too  heavy  
    •  module  豐富度
    Microlattice.js 當前⼀一些問題

    View Slide

  81. Microlattice.js RoadMap
    Unikernel
    Fulfill  all  the  HAL  api
    Async,  event  emitter    
    performance  Optimization
    porting  arduino/  grove    
    module
    Debug/  Download    
    cloud  IDE/  tool  support

    View Slide

  82. http://ec.wpgo2o.com/getAdDetailPage?AdId=46&Catg=C&ItemId=3086999&ParentId=45
    Module:  $  4.9  
    開發板
    •ARM  Cortex-­‐M4F  MCU  (192MHz).  
    •1x1  802.11b/g/n  Wi-­‐Fi  subsystem  
    designed  for  power  efficiency  and  
    robust  connectivity.  
    •Versatile  peripheral  connectivity,  
    including  UART,  I2C,  SPI,  I2S,  PWM,  
    IrDA  and  auxiliary  ADC.  
    •Embedded  SRAM/ROM  and  2MB  
    serial  flash  in  package.  
    •Integrated  security  engine  (AES  
    and  3DES/SHA).  
    •8  x  8mm  68-­‐pin  QFN  package.
    HDK:  $  19.9  
    MT7687 Datasheet

    View Slide

  83. •E-­‐Book:  
    https://www.gitbook.com/book/iamblue/microlattice-­‐js-­‐for-­‐linkit-­‐rtos  
    •Github:  
    https://github.com/iamblue/microlattice  
    About Microlattice.js

    View Slide

  84. Make it big with something small

    View Slide

  85. 特別感謝所有參與技術諮詢的所有同仁和朋友
    RD:  Anthony,  KC(KengChu/有⼒力⼈人⼠士),  Pablo,  smallp,  Vincent  
    Microlattice.js  命名:  Rosalind  
    ⽂文件翻譯:  Angie

    View Slide

  86. One more thing ….

    View Slide

  87. 對  BU  ⽽而⾔言  
    因為是傳統⼤大客⼾戶,花了⼀一組⼈人  support  
    約莫  240  萬台幣
    內建  7688  的終端產品

    View Slide

  88. 1.  軟體按照全世界標準開源  
    2.  良好的  HW  reference  design
    Partner  ⽣生產量產模塊
    打開更多有別於  BU  既有市場的潛⼒力市場
    把  SW  +  HW  +  module  產線弄到標準.  完整

    View Slide

  89. 很⼤大機會衝破  30  萬鎂  (1000  萬台幣)
    對  BU  ⽽而⾔言  
    1.做到全球市場⽣生意  
    2.⾮非常⾮非常少的⼈人⼒力  support  
    3.繫節到龐⼤大的  community  
    4.幫助既有  SW  maintain  resource

    View Slide