拖拽图形化编程在单片机上实现,全部源码,另附虚拟机

admin 2020-12-3 1769

图形化编程很早以前就有了,比如Matlab里面的simulink,比如RPG游戏的开发工具RPG Maker。现在广为人知的图形化编程工具大概就是Google开源的Blockly以及他的衍生产品,比如scratch,以及国内一大票修修改改过来的各种工具。
说实在话,图形化编程制约很大,我这个也是从Google Blockly上面修修改改过来的,连定义局部变量都不会-_-||
找到一门脚本语言,然后搞到单片机。直接解释脚本语言似乎还有点大,那么就做成虚拟机,编译成字节码,这样就小了,1~2KB甚至几百字节ROM几十字节RAM就够了。那就祭出我以前写的基于C4的虚拟机吧,在这里

首先是图形化工具,就是这个样子。因为要做一个很小的虚拟机,很多功能被我砍掉了,比如for循环就没有了,只有一个while了,而且还不能break、continue。

生成的C代码:因为局部变量不会搞,只好全局了,坑货。嫌麻烦就不吝啬括号了,呵呵。

把C代码复制下来保存为C文件,然后用我那个C4的编译器编译一下,得到bin文件,下载到单片机里面就可以运行了。

源代码在这里,因为是源码,所以没法直接在网页上编译生成bin,非得命令行一下。打包成exe后这个问题就不是问题了。
把design.html拖到浏览器中就可以用了,C4本来就很受制约,这个就更受制约了。做了这个工具以后,我决定我家小孩以后绝对不能学习这类图形化的少儿编程,还是要有码的。


前几天发布了Google Blockly生成C代码的工具,再接再厉,直接生成汇编代码,从汇编代码生成bin文件就很简单了,然后在单片机上跑个虚拟机,全部无符号1字节数据的话51单片机上几百字节就搞定了,RAM占用几十字节足够了。
这个版本还是只支持整型数据,代码生成时数值计算直接优化出结果而不是傻愣愣的去计算。生成的汇编代码使用了一个较小的指令集,使得有些简单操作迂回实现(比如取相反数),跳转大量使用标号,函数还是没有实现局部变量(太麻烦了)因此不能递归调用(可以尾递归)。虚拟机指令还是根据C4改动,进一步精简了,结果就是效率更高,代码更短,功能有强(循环允许break/continue)有弱(没有局部变量)。效率终于超过lua了哈哈。
源代码在这里: 

数值计算的优化:

生成代码

生成代码:

上传的附件:
最新回复 [0]
返回