跳到主要内容

Script Engine

概述

ElenaOS 的表盘与应用程序统一由脚本引擎(Script Engine)驱动,底层基于 JerryScript 对 JavaScript 代码进行编译与执行。

JerryScript 是一个轻量级的 JavaScript 引擎,旨在在资源受限的设备上运行,例如微控制器:

  • 引擎可用的 RAM 很少(<64 KB RAM)
  • 引擎代码的 ROM 空间受限(<200 KB ROM)

该引擎支持设备上的编译、执行,并提供 JavaScript 访问外设的功能。

开源地址:https://github.com/jerryscript-project/jerryscript

JerryScript LOGO

系统架构

脚本引擎(Script Engine)是 ElenaOS 的核心模块,负责表盘与应用程序的运行。

脚本引擎的架构如下:

Realm

在 ElenaOS 中,每个脚本运行在独立的 ECMAScript Realm 中。Realm 是 ECMAScript 语言规范中的一个概念,用于实现 JavaScript 的多线程执行环境。Realm 是一个完整的 JavaScript 运行时环境,包括全局对象、内建对象、状态和 API。Realm 的作用是隔离不同脚本之间的运行环境,确保脚本之间不会互相干扰。系统将公共 API 挂载到每个 Realm 上,使脚本能够安全地访问 UI、系统服务和硬件接口,同时保持全局对象、内建对象和状态的隔离性,从而实现可靠、安全的多脚本运行时环境。

脚本状态管理

脚本状态管理模块负责管理脚本的运行状态,包括脚本的创建、运行、停止等。

脚本的状态有:

状态名称描述
SCRIPT_STATE_STOPPED停止:脚本已停止并释放资源
SCRIPT_STATE_RUNNING运行:脚本正在运行
SCRIPT_STATE_SUSPEND挂起:脚本运行完成,等待回调
SCRIPT_STATE_STOPPING停止中:正在停止脚本
SCRIPT_STATE_ERROR错误:脚本执行出错

script_state_t定义的脚本状态枚举类型,用于描述脚本的运行状态。

JS API 绑定层

JS API 层是脚本引擎(Script Engine)与底层硬件资源(如 UI 绘制、传感器、外设)的交互层,负责将底层硬件资源转换为 JS API,并绑定到 Realm 中。

JS API 目录

  1. ElenaOS 系统 API:ElenaOS
  2. LVGL UI API:LVGL