开发环境

  • 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 脚本并解析相关推荐

  1. 读取javascript脚本的正则表达式

    以前dudu给了一个 string regexstr=@"(?i)<script([^>])*>(\w|\W)*</script([^>])*>" ...

  2. 如何优化JavaScript脚本的性能

    随着网络的发展,网速和机器速度的提高,越来越多的网站用到了丰富客户端技术.而现在Ajax则是最为流行的一种方式.JavaScript是一种解释型语言,所以能无法达到和C/Java之类的水平,限制了它能 ...

  3. JavaScript运行原理解析

    写在前面的话: 发现使用了那么长时间的Javascript,但是对其运行原理还是不清晰,今天特意总结一下,把大神们的理论和自己的总结都记录到下面: 1. 什么是JavaScript解析引擎? 简单地说 ...

  4. mysql读取sql脚本_Pandas直接读取sql脚本的方法

    之前有群友反应同事给了他一个几百MB的sql脚本,导入数据库再从数据库读取数据有点慢,想了解下有没有可以直接读取sql脚本到pandas的方法. 解析sql脚本文本文件替换成csv格式并加载 我考虑了 ...

  5. Thymeleaf——使用模板动态生成JavaScript脚本文件

    官方文档 JavaScript和CSS模板:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#natural-javasc ...

  6. c 运行js脚本语言,Javascript脚本语言

    Javascript脚本语言 本教程不对Javascript详细讲解,与WebGL相关的会进行简单总结.Javascript语言可以开发前端,可以开发网站后端,也可以和Python.C语言一样开发客户 ...

  7. javascript脚本语言_10分钟快速掌握Javascript核心特性

    JavaScript的历史版本 其中ES5个人认为是使用时间最长也是最稳定的版本.基于该版本衍生出来的很多经典框架诸如ext,propertype.js,jquery,easyUI都是这个时代的杰作. ...

  8. JavaScript重难点解析6(Promise)

    JavaScript重难点解析6(Promise 概念 为什么要使用Promise Promise 的状态 Promise 对象的值 Promise工作流程 基本用法 Promise其他方法 asyn ...

  9. JavaScript重难点解析5(对象高级、浏览器内核与事件循环模型(js异步机制))

    JavaScript重难点解析5(对象高级.浏览器内核与事件循环模型(js异步机制) 对象高级 对象创建模式 Object构造函数模式 对象字面量模式 工厂模式 自定义构造函数模式 构造函数+原型的组 ...

最新文章

  1. Keras Bug 解决方法 Exception ignored in: bound method BaseSession.__del__ of
  2. windows10 中 安装 ffmpeg
  3. 阿里云推荐码:8N6TBT
  4. 逻辑心理测试题:三囚分汤
  5. mongodb索引生成HTML页面,MongoDB高级索引
  6. python程序运行时间计时软件_python中的计时器timeit的使用方法
  7. php pecl memcached,php – 安装PECL Memcached错误
  8. D0rado与javascript
  9. 青铜到王者:AIOps 平台在腾讯的升级之路
  10. 数智时代下 IT终端部署如何赋能高校构建智慧教育新模式
  11. 产品心经:产品经理应该知道的60件事
  12. 机器学习系列(九)【最大熵模型】
  13. 大年初一连夜带娃改bug:CTO把代码写成这鬼样子,被害惨了!
  14. eclipse Android开发——布局查看
  15. [PTA C语言]冒泡法排序
  16. 深入浅出、通俗易懂的讲解CAN bus。
  17. 编程都是人上人,果不其然!2020年度十大高薪岗位,程序员独领风骚!
  18. 几何与导数——微分几何初步(二)
  19. 人家这才叫软件测试工程师,你那只是混口饭吃(附HR面试宝典)
  20. 今天一篇文章告诉你Python 自动化测试 必会模块 Unittest

热门文章

  1. kettle的连接与使用——从SQL sever中抽取数据至MYSQL
  2. 细说FL Studio中的Wasp合成器功能
  3. 《28天玩转TensorFlow2》第7天:TensorFlow2构建数据管道—Numpy array格式
  4. jQuery页面刷新的一些方法
  5. Android 加载超长大图(长度超过4096)的解决方案和处理办法
  6. 蓝牙运动耳机哪个牌子最专业、最专业的蓝牙运动耳机品牌排行
  7. java实现TCP通信服务器群发给用户
  8. 百度手机助手存储资源优化实践
  9. 龙脑香凉亭的制作工序
  10. 多普达X01HT UCWEB 6.7正式版CAB格式下载