在上一篇文章中 ,我谈到了IoT(物联网)以及将物理对象(“物”)连接到Internet。 我已经讨论了Mongoose OS (一种用于IoT的开源操作系统)如何使新手和专业开发人员都能轻松地使用JavaScript编程微控制器。

您可能想知道为什么使用JavaScript,以及JavaScript引擎如何装入微控制器的有限内存中。 有许多旨在将脚本编写在微控制器上的项目,其中包括其他JavaScript项目,包括Duktape , Espruino , Jerryscript , MuJS和V7 。 还有其他脚本语言,例如MicroPython和Lua 。

这些项目共享的一件事是尝试将整个语言规范与完整的标准库一起实现。 有优点也有缺点。 优点很明显,但是缺点是什么?

缺点

首先,没有一种流行的脚本语言最初是针对嵌入式环境设计的。 它们沿一些晦涩的构造拖延,这些构造占用宝贵的空间,但在嵌入式上下文中几乎没有实际用途。

其次,要将特定于硬件的功能导出到脚本环境(例如某个传感器API或某个LCD显示API)中,您需要编写粘合代码。 而且,您需要维护该粘合代码,这会占用宝贵的空间并增加整体复杂性。

为了解决这些问题,引入了新JavaScript引擎。

mJS

mJS是Mongoose OS的一部分,采用了截然不同的方法:

  1. 它并没有实现整个语言,而是一个有限的子集。
  2. 它没有标准库。
  3. 它没有胶水代码。

这些功能使mJS可以容纳约25K的闪存空间,并且不到1K的RAM。 很难被击败。 但是,如果没有标准库又没有任何胶合代码,如何进行开发? mJS的答案是可以直接调用C SDK(软件开发工具包)功能。

如何直接调用C SDK函数

外部功能接口(FFI)可以直接加载和调用C函数。 要执行这些步骤,mJS必须知道两件事:C函数的地址和C函数的签名。 然后将JavaScript参数编组为C值,并将它们放到ABI(应用程序二进制接口)的位置 要求(例如,在CPU堆栈上),然后跳转到函数的地址。 实际上,它看起来像这样:


let f = ffi ( 'int gpio_write(int, int)' ) ;   f ( 2 , 1 ) ;    

此代码段加载C SDK函数gpio_write(int引脚,int值)并调用它,将GPIO引脚2设置为高电压电平。 就这样。 是否需要SDK或第三方库的其他功能? 只需按需加载即可。 您甚至可以执行以下操作:


let malloc = ffi ( 'void *malloc(int)' ) ;   let mem = malloc ( 10 ) ; 

不是说您应该 ,但是可以 。 同样,您可以封送C回调:


let Timer = {     set : ffi ( 'void timer(int, void (*)(int, userdata), userdata)' ) } ;  Timer. set ( 100 , function ( time ) {     print ( 'Time now: ' , time ) ; } , true ) ; 

您需要嵌入API吗? 不,你没有。 您也不需要任何粘合代码。 而且您也不需要标准库。

查看如何在我们的Mongoose OS示例固件中使用mJS。 而且,您可以将其与任何C / C ++软件一起使用,例如特定的固件。 有关更深入的介绍, 请参见mJS GitHub存储库以获取嵌入示例。

在我们的开发者论坛上提问或向我们发送消息 。

翻译自: https://opensource.com/article/17/4/mjs-JavaScript-engine

使用mJS进行物联网嵌入式脚本和开发的新方法相关推荐

  1. 在windowsXP上建立Qt Creator开发环境新方法(Qt被NOKIA卖掉给digia公司之后)

          前几天在windowsXP上想安装Qt Creator上好久,不得要领.总是配置不好,首先安装工具链时提示安mingw,但是我另外从网上下载的mingw安装好之后,又提示版本不对,最后终于 ...

  2. 嵌入式之NB-IoT开发与应用01【移动通信网络发展概述、NB-IoT应用案例、物联网生态系统-解决方案、智慧消防项目需求分析及系统设计】

    学习网址: 嵌入式之NB-IoT开发与应用 目   录 P1 1.01-01 NB-IoT课程介绍(P1) NB-IoT是什么? NB-IoT能够干什么? 1.移动通信网络发展概述 移动通信网络-1G ...

  3. JAVA的嵌入式脚本开发(上)

    Java是一种静态类型的编程语言.Java代码中的每个变量的类型都需要显示地进行声明,所以所有的变量.方法的参数以及返回值等在程序运行前,它们的类型都是已经确定的.这种静态类型特性使编译器可以在编译时 ...

  4. 嵌入式端音频开发(实战篇)之 4.2 把很多音频合成一个bin文件并统计每个音频文件的大小的方法(内含转换脚本)

    查看本系列全部文章请点击:嵌入式端音频开发系列汇总(持续更新) 查看本文全部内容:嵌入式端音频开发(实战篇)之 4.2 把很多音频合成一个bin文件并统计每个音频文件的大小的方法(内含转换脚本) 文件 ...

  5. esp32语音控制_乐鑫发布针对物联网嵌入式设备AI语音麦克风阵列开发板

    乐鑫信息科技(股票代码:688018)发布 AI 语音麦克风阵列开发板 ESP32-Korvo .这是一款针对物联网嵌入式设备的 AI 语音开发板,基于乐鑫的旗舰芯片 ESP32,搭载多麦克风阵列,能 ...

  6. JAVA的嵌入式脚本开发(中)

    本文将分以下几个小节来学习: Java的JavaScript脚本引擎 脚本开发中涉及到的类和接口简介 开发步骤 脚本与java数据传递 脚本执行上下文 作用域 方法的调用 编译脚本 脚本与java数据 ...

  7. 浅析工业级物联网项目的快速开发

    浅析工业级物联网项目的快速开发 发表于2015-11-10 15:01| 1567次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCTO讲堂物联网工业级刘洪峰叶帆 width=&q ...

  8. 嵌入式AI应用开发对操作系统的要求与挑战[转]

    还是看视频有感觉!大概几个月前看的直播,觉得讲的特别好,把讲话内容转过来! https://www.sohu.com/a/412765418_115978?_trans_=000014_bdss_dk ...

  9. 《Linux嵌入式实时应用开发实战(原书第3版)》——第2章 安装Linux2.1 发行版...

    本节书摘来自华章计算机<Linux嵌入式实时应用开发实战(原书第3版)>一书中的第2章,第2.1节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区"华章计算机& ...

  10. 《Linux嵌入式实时应用开发实战(原书第3版)》——3.5 Linux文件系统

    本节书摘来自华章计算机<Linux嵌入式实时应用开发实战(原书第3版)>一书中的第3章,第3.5节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区"华章计算机& ...

最新文章

  1. trigger() --工作中问题nav样式
  2. OpenFlow: Enabling Innovation in Campus Networks
  3. 基于Xml 的IOC 容器-分配路径处理策略
  4. POJ - 1381 Secret Code(dfs+高斯整数)
  5. eclipse启动tomcat 404
  6. 信息学奥赛一本通(1189:Pell数列)
  7. SecureCRT终端仿真程序下载及安装使用
  8. 支付业务与技术架构学习总结(3)——账务系统
  9. 利用Diskgen找回分区破坏前的资料
  10. 让Office无处不在——Office Web App初体验
  11. DeepFake技术--辅助工具
  12. matlab 2010 win10,win10系统运行matlab2010找不到指定的程序的教程介绍
  13. DSP 2812: 使用C++封装SCI
  14. 计算机说课教案模板,初中信息技术说课稿通用模板大全
  15. 微信养号技巧及防封攻略(微信养号防封大全)
  16. RandomUtils 随机生成中文姓名,性别,Email,手机号,住址
  17. Java通过月份获取当月工作日
  18. django慢学日常
  19. 什么是智能dns解析
  20. 答应了邮件offer还能反悔吗?

热门文章

  1. postfix 测试邮件服务器,搭建Postfix邮件服务器
  2. Classic界面chatter中的子选项卡配置
  3. 项目管理过程 工作绩效数据,信息和报告
  4. kafka消费策略 随笔
  5. book--Unix Linux大学教程
  6. android 豁免的广播及广播白名单,浅谈BLE地址、隐私机制、白名单、定向广播
  7. 从零开始制作一款打卡类小程序
  8. JAVA家庭记账软件
  9. 共享单车被带到乡下私用,警方:或涉嫌盗窃
  10. Unity3dC#分布式游戏服务器ET框架介绍-组件式设计