|
主题 为了让LED亮起来,编写一个小JavaScript脚本,整个过程主要通过ARM mbed C HAL函数的交互实现的。 同时也适用于ARM mbed支持的其他系统。 前提 在嵌入式MCU中添加脚本功能的原因有很多。 这次主要是想把JavaScript VM嵌入到他们现有的C固件,以便于快速定制核心业务逻辑,而不必重新包装设备。 这次我选择的嵌入式JavaScript VM是V7,这款是我和我在Cesanta的队友共同开发的。 V7库仅作为两个文件分发:V7 .c和V7 .h,你只需在项目中导入这两个文件就可以了。 V7是用可移植的C编写的,因此很容易从c++中使用。同时v7的平太是独立的,方便我们展示如何将其嵌入到ARM mbed项目中,以及如何在STM32F4设备上构建它,当然它也可以用于其他系统。 下面是完整的源代码: #include "mbed.h" 你可以直接在ARM mbed在线编译器或命令行工具中复制这个代码,打开:http://developer.mbed.org/teams ... javascript_blinker/ 我们将逐步展示如何安装以及注意事项。 先看看如果没有脚本的话会是什么样子: #include "mbed.h" 可以在mbed在线编译器中编译这段代码,或者也可以使用mbed-cli工具。 进入JavaScript让我们首先添加V7库。 我已经将v7.c和v7.h文件打包在mbed代码库中,这样更方便。
或者,如果直接使用命令行工具: 现在,库已经被构建到固件中,但还需要它的数据头: #include "v7.h" 然后,在主函数中创建一个虚拟机的实例: struct v7 *v7 = v7_create(); 这个v7变量保存整个VM状态,在调用v7 API函数时需要传递,那如何运行脚本? v7_exec(v7, "print('hello from javascript')", NULL); v7_exec的最后一个参数用于获取JavaScript表达式的结果。这点我们容易忘记。 JavaScript和设备 现在部份JavaScript代码已经成功运行了! 但是,我们如何让JavaScript代码在设备上做一些有用的事情呢?V7只是一个通用的JS VM库,它不知道任何关于你的嵌入式板,它的API等。 让我们先写一个简单的JS脚本,使用两个简单的函数,我们要从我们的设备的SDK导出: while(true) { 我们可以使用v7_exec内联调用它,或者从闪存上的文件加载它,或者从网络下载它: v7_exec(v7, 现在注册几个函数使他可以与SDK进行交互: v7_set_method(v7, v7_get_global(v7), "setLed", &js_set_led); 这段代码注册了两个全局JavaScript函数setLed和wait,可以像调用本地函数一样从脚本中调用它们。 它们的实现是用c语言编写的。让我们仔细看看js_wait是如何实现的,看看它是如何工作的: enum v7_err js_wait(struct v7 *v7, v7_val_t *res) { v7_arg(v7,0):获取传递给wait()的第一个参数。它返回一个v7_val_t值,该值表示一个通用JavaScript值。 v7_get_double(v7, val):从v7_val_t中提取C双浮点值 一个物联网固件开发框架。支持单片机:ESP32, ESP8266, CC3220, CC3200, STM32F4, STM32L4, STM32F7。亚马逊AWS物联网、微软Azure、谷歌物联网核心集成。用C或JavaScript编写的代码。——阅读更多 http://mongoose-os.com
mongoose-os-master.zip
(2.2 MB, 下载次数: 13)
|
| 学习一下 |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版