PowerPoint Presentation

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "PowerPoint Presentation"

Transcription

1

2 MCU 與 Lightweight Javascript Engine 的邂逅

3 Blue Github: github/iamblue

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

5 IoT device 市場上常見應用場景

6 IoT device 市場上常見應用場景

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

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

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

10 IoT device 市場上常見應用場景 Lightweight, 省電 (MCU) gateway, powerful (MPU) Lightweight, 省電 (MCU) 兩者體驗上的差異在哪?

11 2016/4 release MT7687 ARM Cortex-M4F MCU (192MHz). 1x b/g/n Wi-Fi. Real-Time OS (freertos) 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.

12 Porting Javascript engine on MCU device 非常新奇 但. 困難重重

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

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

15 2016/4 release MT7687 ARM Cortex-M4F MCU (192MHz). 1x b/g/n Wi-Fi Real-Time OS (freertos) 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). 因此在這應硬體需求下, 需要去設計 更 Lightweight 的 javascript engine 8 x 8mm 68-pin QFN package.

16 Lightweight Javascript engine 技術趨勢

17 Community 最早盛行的 Javascript Engine: Tiny.js First Run on STM32 javascript engine Extremely Simple (~2000 line) javascript interpreter Github: 原理 : 邊 parse 邊解析 ( 不構成 AST) 基於 Tiny.js 做出來的產品 Espruino

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

19 Alljoyn.js ( Duktape engine ) Alljoyn (AllSeen 聯盟 ) 在 module 佈局廣主打這塊 Source code : Reference:

20 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 設計初衷

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

22 Samsung IoT.js ( Jerryscript engine ) 設計初期目標 : 針對 <100KB 之 RAM/ROM chip 設計的 engine 大幅針對 interpreter js engine 常見的通病 : String (Duktape 最弱的地方 ), bytecode, memory 效能改進 No AST, directly produce bytecode Reference: Jerryscript 官方網站

23 Jerryscript Architecture Reference: Jerryscript 官方網站

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

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

26 實作 benchmark LICENSE ECMA 5 (leverage node.js community) Native bindin g api RAM (Run time memory usage) ROM (binary size) CM4 support Jerryscrip t Apache2 y (100%) y 10~70KB <100KB y v7 GPL y ( 80%) n 30~100KB KB n (CM3) Duktape MIT y(100%) y ~96KB 200~256K n

27 實作 benchmark ( 先比較 ECMA 與 LICENSE) LICENSE ECMA 5 (leverage node.js community) Native bindin g api RAM (Run time memory usage) ROM (binary size) CM4 support Jerryscrip t Apache2 y (100%) y 30~70KB <100KB y v7 GPL y ( 80%) n 50~120KB KB n (CM3) Duktape MIT y(100%) y ~96KB 200~256K n

28 實作 benchmark ( 比較 RAM 與 ROM) 關鍵 LICENSE ECMA 5 (leverage node.js community) Native bindin g api RAM (Run time memory usage) ROM (binary size) CM4 support Jerryscrip t Apache2 y (100%) y 30~70KB <100KB y v7 GPL y ( 80%) n 30~100KB KB n (CM3) Duktape MIT y(100%) y ~96KB 200~256K n

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

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

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

32 現成的 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 本身就已具備, 且效能也比較快

33 Microlattice.js Github: Gitbook:

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

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

36 Microlattice.js Architecture Microlattice.JS Jerryscript FreeRTOS

37 Microlattice.js Architecture Microlattice.JS Jerryscript 可換成其他不同的 Light weight Js engine FreeRTOS 可換成其他不同的 Real-Time OS

38 Microlattice.js Architecture Microlattice.JS Microlattice App *.npm Javascript Jerryscript Network Event I/O C FreeRTOS Jerryscript binding FreeRTOS binding Async, no-blocking ( without libuv )

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

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

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

42 Microlattice.js CLI ml create ml burn (Mass storage) 基本款通用的 command line ml debugger (OpenOCD) ml init:7687 ml install:gcc ml install:sdk 廠商可以客製化自己的 cli, 包在 ml-xxxconfig 之中以 7687 為例, 全包在 ml-mt7687-config 中

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

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

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

46 關於 LICENSE 問題 - 讓各家在 command line 自行去定義 Microlattice 預設會在 project 下有一個 sdk folder 建議各家將自己的 sdk 放在這路徑下去 build 出 image MT7687 做法

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

48 Sharing project 參考 Microlattice gpio example project for MT7687

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

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

51 關於 npm, module management 效能優化

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

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

54 Require mode XXX 為 binding api, 可以直接 call XXX (or global. XXX) 來對 C binding api 保有最佳的效能操作 適合較小 RAM 的 Device 開發 global mode

55 適合較小 RAM device 適合較大 RAM device

56 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

57 Demo

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

59 Microlattice.js benchmark 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

60 當前不足之處改進

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

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

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

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

65 MT7687 Datasheet Module: $ 4.9 ARM Cortex-M4F MCU (192MHz). 1x b/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 HDK: $ 19.9 and 3DES/SHA). 8 x 8mm 68-pin QFN package.

66 About Microlattice.js E-Book: Github:

67 Make it big with something small

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

69 Thank you