jerryscript 读取 javascript 脚本并解析
开发环境
- Win10 64位
- Keil MDK 5.30
- ART-Pi 开发板:STM32H750XBH6开发板
- 工程:最小RT-Thread 系统,版本:RT-Thread v4.1.0 released
功能描述
- 嵌入的产品,底层一般是C、C++实现,上层的javascript脚本,需要解析执行,所以放在文件系统里,执行javascript脚本的逻辑,需要读取文件,并解析执行
- 这里开发板需要开启文件系统,最好开启USB U盘等文件传输的功能,开启方法可以看前几篇文章
- 测试代码如下,这里基于RT-Thread 串口shell导出了两个命令,一个是
js_demo2_init
初始化 jerryscript,一个是:js_parse_file
用于解析js文件
#include <rtthread.h>#include <jerryscript.h>
#include <jerry_util.h>extern void jerry_port_set_default_context(jerry_context_t *context);static void *context_alloc(size_t size, void *cb_data_p)
{return rt_malloc_align(size, 32);
}void js_demo2_init(void)
{/* JERRY_ENABLE_EXTERNAL_CONTEXT */jerry_port_set_default_context(jerry_create_context(PKG_JMEM_HEAP_SIZE * 1024, context_alloc, NULL));/* Initialize engine */jerry_init(JERRY_INIT_EMPTY);/* Register 'print' function from the extensions *///jerryx_handler_register_global((const jerry_char_t *)"print", jerryx_handler_print);js_util_init();
}MSH_CMD_EXPORT(js_demo2_init, js_demo2_init);int js_parse_file(int argc, char **argv)
{char *script_test;size_t length;rt_kprintf("%s : enter\r\n", __func__);if (argc != 2){rt_kprintf("error : need %s js_file\r\n");return -1;}length = js_read_file((const char*)argv[1], &script_test);printf("jerry read file : %s\n", (const char*)argv[1]);if (length > 0){jerry_value_t parsed_code2 = jerry_parse (NULL, 0, (jerry_char_t *)script_test,rt_strlen (script_test), JERRY_PARSE_NO_OPTS);if (jerry_value_is_error(parsed_code2)){rt_kprintf("jerry parse failed!\n");}else{jerry_value_t ret2 = jerry_run(parsed_code2);rt_kprintf("%s : jerry_run ret=%d\n", __func__, ret2);}/* Parsed source code must be freed */jerry_release_value(parsed_code2);rt_free(script_test);return 0;}return -1;
}
MSH_CMD_EXPORT(js_parse_file, js_parse_file);
验证方法
- 准备js(javascript)脚本文件,内容可以是 hellowrod
var str2 = "hello"
var num = 3.1415console.log("helo world!!");
console.log("helo jerryscript run ok!!");
console.log("helo js engine!!");
console.log("helo world!!" + str2);
console.log("num=" + num);
console.log("[hello world] end");
- 复制文件到 开发板中,这里通过U盘挂载的方式,操作方法见之前的文章,放置路径如下
msh /hello>ls
Directory /hello:
hello.js 394
hello_world.js 247
hello_get.js 114
hello_set.js 98
msh /hello>
运行
- 注意先运行 jerryscript的初始化:
- 运行效果显示,js脚本成功的运行了
小结
- javascript 脚本,一般使用模块(module)的方式,下一篇开始研究 jerryscript 实现 js module的方法
- 学习使用文件的读写操作,这里并没有对jerryscript的【内存管理】【多文件】进行描述,后面随着学习的深入,再一一细化
jerryscript 读取 javascript 脚本并解析相关推荐
- 读取javascript脚本的正则表达式
以前dudu给了一个 string regexstr=@"(?i)<script([^>])*>(\w|\W)*</script([^>])*>" ...
- 如何优化JavaScript脚本的性能
随着网络的发展,网速和机器速度的提高,越来越多的网站用到了丰富客户端技术.而现在Ajax则是最为流行的一种方式.JavaScript是一种解释型语言,所以能无法达到和C/Java之类的水平,限制了它能 ...
- JavaScript运行原理解析
写在前面的话: 发现使用了那么长时间的Javascript,但是对其运行原理还是不清晰,今天特意总结一下,把大神们的理论和自己的总结都记录到下面: 1. 什么是JavaScript解析引擎? 简单地说 ...
- mysql读取sql脚本_Pandas直接读取sql脚本的方法
之前有群友反应同事给了他一个几百MB的sql脚本,导入数据库再从数据库读取数据有点慢,想了解下有没有可以直接读取sql脚本到pandas的方法. 解析sql脚本文本文件替换成csv格式并加载 我考虑了 ...
- Thymeleaf——使用模板动态生成JavaScript脚本文件
官方文档 JavaScript和CSS模板:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#natural-javasc ...
- c 运行js脚本语言,Javascript脚本语言
Javascript脚本语言 本教程不对Javascript详细讲解,与WebGL相关的会进行简单总结.Javascript语言可以开发前端,可以开发网站后端,也可以和Python.C语言一样开发客户 ...
- javascript脚本语言_10分钟快速掌握Javascript核心特性
JavaScript的历史版本 其中ES5个人认为是使用时间最长也是最稳定的版本.基于该版本衍生出来的很多经典框架诸如ext,propertype.js,jquery,easyUI都是这个时代的杰作. ...
- JavaScript重难点解析6(Promise)
JavaScript重难点解析6(Promise 概念 为什么要使用Promise Promise 的状态 Promise 对象的值 Promise工作流程 基本用法 Promise其他方法 asyn ...
- JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))
JavaScript重难点解析5(对象高级.浏览器内核与事件循环模型(js异步机制) 对象高级 对象创建模式 Object构造函数模式 对象字面量模式 工厂模式 自定义构造函数模式 构造函数+原型的组 ...
最新文章
- Keras Bug 解决方法 Exception ignored in: bound method BaseSession.__del__ of
- windows10 中 安装 ffmpeg
- 阿里云推荐码:8N6TBT
- 逻辑心理测试题:三囚分汤
- mongodb索引生成HTML页面,MongoDB高级索引
- python程序运行时间计时软件_python中的计时器timeit的使用方法
- php pecl memcached,php – 安装PECL Memcached错误
- D0rado与javascript
- 青铜到王者:AIOps 平台在腾讯的升级之路
- 数智时代下 IT终端部署如何赋能高校构建智慧教育新模式
- 产品心经:产品经理应该知道的60件事
- 机器学习系列(九)【最大熵模型】
- 大年初一连夜带娃改bug:CTO把代码写成这鬼样子,被害惨了!
- eclipse Android开发——布局查看
- [PTA C语言]冒泡法排序
- 深入浅出、通俗易懂的讲解CAN bus。
- 编程都是人上人,果不其然!2020年度十大高薪岗位,程序员独领风骚!
- 几何与导数——微分几何初步(二)
- 人家这才叫软件测试工程师,你那只是混口饭吃(附HR面试宝典)
- 今天一篇文章告诉你Python 自动化测试 必会模块 Unittest