JerryScript
开源、面向小型嵌入式设备的 JavaScript 引擎¶
简介¶
JerryScript 是三星开源的一个非常轻量的 JavaScript 引擎,主要面向资源受限的物联网设备,可在 小于 64KB RAM 64KB 和 200KB ROM 的微控制器上运行。
JavaScript 是现在非常流行的编程语言之一,大量前端开发者对它非常熟悉,将物联网设备和 web 生态系统相互配合,对于构建物联网生态系统来说是个明智的选择,这也正是三星开发 JerryScript 的初衷。
另一方面,JavaScript 在嵌入式设备开发中是非常便利的。它支持异步函数回调和异步 I/O,这对基于事件驱动的硬件编程是非常有用的。
JerryScript 具备以下关键特性:
- 完全兼容 ECMAScript 5.1
- 若采用 ARM Thumb-2 指令集编译,仅需 160KB 空间
- 注重内存优化,减少内存消耗
- 使用 C99 编写,可移植性强
- 为预编译 JavaScript 源码提供快照支持
- 提供成熟的 C API,调用方便
了解更多细节,可以访问 JerryScript 官方仓库。
快速入门¶
以下内容将介绍如何快速编译、运行 JerryScript。
搭建编译环境¶
编译 JerryScript 引擎之前,需要配置好开发环境,安装以下工具:
gcc
或 其他 C99 编译器 (本地或交叉编译器,例如:arm-none-eabi)cmake
>=2.8.12.2
bash
>=4.3.11
cppcheck
>=1.61
vera++
>=1.2.1
python
>=2.7.6
另外确保以下命令行工具可用:
awk
bc
find
sed
从官方仓库克隆 JerryScript 源码:
$ git clone https://github.com/jerryscript-project/jerryscript.git
基于 Zephyr 编译 JerryScript¶
这里我们基于 Zephyr 来编译 JerryScript 引擎,你也可以基于 Arm Mbed OS 进行编译。
Zephyr 开发环境配置请参考:搭建 Zephyr 开发环境。
配置 Zephyr 环境变量:
$ cd zephyr $ source zephyr-env.sh
编译运行 JerryScript¶
接下来,你可以开始编译下载 JerryScript 引擎:
$ cd jerryscript $ make -f ./targets/zephyr/Makefile.zephyr BOARD=nrf52832_mdk flash
打开串口工具,JerryScript 将以 REPL 模式运行:
***** BOOTING ZEPHYR OS v1.10.99 - BUILD: Mar 2 2018 22:19:04 ***** JerryScript build: Mar 2 2018 22:19:03 JerryScript API 1.0 Zephyr version 1.10.99 js>
尝试运行下面比较简单的脚本:
js> var test=0; for (t=100; t<1000; t++) test+=t; print ('Hi JS World! '+test); Hi JS World! 494550 undefined
或者更复杂的:
js> function hello(t) {t=t*10;return t}; print("result"+hello(10.5)); result105 undefined
提示
我们提供预编译好的固件 jerryscript_v1.0_for_zephyr.hex
, 该固件位于 ./nrf52832-mdk/firmware/jerryscript/
目录。
更多示例¶
JerryScript 引擎目前还没有直接支持 nRF5 SoC,相信在社区开发者的努力下,很快会完成这部分移植工作。
目前 Intel 基于 Zephyr 已经做大量移植工作,这个项目就是 Zephyr.js,对 Arduino 101 支持比较好,对于 nRF52 还有一些功能需要添加,你可以保持关注,更多功能会逐渐加入。
参考资源¶
问题反馈¶
如果在开发过程遇到任何问题,可以通过 GitHub Issue 反馈。