本帖最后由 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,打开后可以写脚本代码,并且控制运行和停止。
|