博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用mJS进行物联网嵌入式脚本和开发的新方法
阅读量:2526 次
发布时间:2019-05-11

本文共 1375 字,大约阅读时间需要 4 分钟。

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

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

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

缺点

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

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

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

mJS

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

  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吗? 不,你没有。 您也不需要任何粘合代码。 而且您也不需要标准库。

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

在我们的上提问或 。

翻译自:

转载地址:http://czpzd.baihongyu.com/

你可能感兴趣的文章
Hive实现oracle的Minus函数
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
RocketMQ配置
查看>>
vs code调试console程序报错--preLaunchTask“build”
查看>>
蚂蚁金服井贤栋:用技术联手金融机构,形成服务小微的生态合力
查看>>
手机通话记录统计分析
查看>>
富文本编辑器比较
查看>>
端口号大全
查看>>
机器学习基石笔记2——在何时可以使用机器学习(2)
查看>>
POJ 3740 Easy Finding (DLX模板)
查看>>
MySQL 处理重复数据
查看>>
关于typedef的用法总结(转)
查看>>
hibernate could not resolve property
查看>>
【strtok()】——分割字符串
查看>>
Linux下安装rabbitmq
查看>>
曹德旺
查看>>
【转】判断点在多边形内(matlab)
查看>>
java基础之集合:List Set Map的概述以及使用场景
查看>>
Python 线程 进程 协程
查看>>
骨牌覆盖问题
查看>>