打印

VSF中的虚拟机环境----10K级别脚本系统

[复制链接]
2340|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vsf|  楼主 | 2018-3-4 13:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 vsf 于 2018-4-16 12:37 编辑

最近项目需要在MCU中跑一个虚拟机,可以让用户二次开发,看了几个开源的脚本开发环境,包括squirrel 3、micropython、elua,只有一个赶脚就是。。。用不起,基本对flash的资源要求都差不多是百K以上的,而且还不包括我们需要的应用扩展。

所以就自己做了一个迷你型的脚本环境(编译器+虚拟机)。主要特点就是小,当然,语法上也做了不少精简。不过还是有一些比较有意思的特性的:
1. 支持类:
var i = gpio_create(0,1);
i.config(GPIO_OUTPP);
上面就是新建一个gpio实例,并且调用config接口设置GPIO模式。
2. 资源自动释放(通过引用计数):
gpio_create(0, 1).config(GPIO_OUTPP).set();
gpio_set(gpio_create(0, 0));
上述代码运行完后,gpio_create生成的实例会自动释放(因为执行完后引用计数为0)。
3. 支持协作式多线程,支持IPC,当然,都是基于VSF的多线程实现
4. 支持JIT,用户输入一行代码,编译一行,执行一行
5. 虚拟机支持垃圾回收,回收时间用户控制
6. 虚拟机支持调试,可以下断点

当然,最重要的资源占用,CortexM3/4上,虚拟机核心占用3K多flash,ram占用看脚本,一般小型脚本几百字节ram占用。编译器资源占用要多一些,大概10K多flash,ram占用4K左右,当然复杂的脚本占用会更多,编译完成后,所有资源都释放。再加上一些扩展,这个规模算是可以在一些低端32位MCU上运行了。

PC上运行的JIT环境:


多线程:


MCU上运行:

MCU模拟一个U盘和一个CDC调试串口,U盘里有一个Python做的ide.py,打开后可以写脚本代码,并且控制运行和停止。

使用特权

评论回复

相关帖子

沙发
所长| | 2020-2-24 17:25 | 只看该作者

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

vsf

27

主题

60

帖子

6

粉丝