我正在寻找
的通用编程语言到目前为止,下面是我的清单,我缺少什么?
答案 0 :(得分:8)
自制的Forth运行时确实可以在很少的内存中实现。我知道有人在20世纪70年代在Cosmac上创造了一个。核心运行时只有30个字节。
答案 1 :(得分:7)
我听说CHIP-8,XPL0,PicoC和Objective Caml已被移植到图形计算器中。 维基百科“Lego Mindstorms”文章列出了一系列据称在Lego RCX或Lego NXT平台上运行的编程语言。 他们中的任何一个符合你的“实时编码”标准吗?
您可能想要查看Forth wiki上的其他微控制器Forths。它列出了Atmel AVR至少4个Forth:amforth(你已经提到过),PFAVR,avrforth和ByteForth。 (这些解释器的链接以及此StackOverflow问题都包含在“Embedded Systems”wikibook中。
答案 2 :(得分:5)
我会推荐LUA(或eLUA http://www.eluaproject.net/)。我曾经将LUA“移植”到Cortex-M3上。从我的头顶开始,它的闪存大小为60~100KB,运行时需要大约20KB的RAM。我确实剥离了最基本的东西,但根据你的应用,这可能就足够了。仍然有优化的空间,特别是关于RAM的要求,但我怀疑你能以8KB的速度运行它。
答案 3 :(得分:4)
一些AVR解释器/虚拟机:
答案 4 :(得分:4)
Wren符合您的标准 - 默认情况下,它配置为仅使用4k的RAM。 AFAIK它没有看到任何实际用途,因为我写的那个人决定他毕竟不需要完全在目标系统上运行的解释器。
语言受ML和Forth影响最明显。
答案 5 :(得分:2)
您是否考虑过port in C Tiny Basic?或者,也许从Z-80将UCSD Pascal p-machine重写为你的架构?
但是,严肃地说,JavaScript会成为一种优秀的嵌入式脚本语言,但我不知道VM + GC的最低内存要求是什么,也不清楚删除操作系统依赖项的难度。我曾经和NJS玩过一段时间,这可能符合您的需求。这个很有趣,因为编译器是用JavaScript编写的(自托管)。
答案 6 :(得分:2)
你可以看看AVR非常强大的AvrCo Multitasking Pascal。您可以在http://www.e-lab.de处尝试。 MEGA8 / 88版本是免费的。有大量的JTAG调试器驱动程序和模拟器,以及所有标准设备(LCDCHAR,LCDGRAPH,7SEG,14SEG,LEDDOT,KEYBOARD,RC5,SERVO,STEPPER ......)的实时或模拟可视化效果。
答案 7 :(得分:1)
您缺少EmbedVM,主页here,svn repo here。请务必在首页查看[1,2]个视频;)
从主页:
EmbedVM是一款适用于微控制器的小型可嵌入虚拟机 与C语言前端。它已经过GCC和AVR的测试 微控制器。但由于虚拟机相当简单 应该很容易将其移植到其他架构。
VM模拟一个16位CPU,可以访问高达64kB的内存。它 只能在16位值和16位和8位值的数组上运行。 不支持复杂的数据结构(struct,objects, 等等。)。一个函数最多可以有32个局部变量和32个局部变量 参数。
除VM的内存外,还有一个保持VM状态的小结构 以及EmbedVM功能需要的合理内存量 堆栈没有VM的额外内存要求。 特别是VM不依赖于任何动态内存管理。
EmbedVM针对大小和简单性而非执行速度进行了优化。该 VM本身在AVR上占用大约3kB的程序存储器 微控制器。在运行速度为16MHz的AVR ATmega168上,VM可以 每毫秒执行大约75个VM指令。
VM完成的所有内存访问都是使用用户回调进行的 功能。因此可以打开部分或全部VM内存 外部存储设备,闪存等或“存储器映射”硬件 VM的功能。
编译器是一个UNIX / Linux命令行工具,它读入* .evm 文件并生成各种格式的字节码(二进制文件,英特尔十六进制, C数组初始值设定项和特殊的调试输出格式)。它也是 生成可用于访问VM中数据的符号文件 来自主机应用程序的内存。
类C语言如下所示:http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm
答案 8 :(得分:1)
我建议使用MY-BASIC,运行至少8 KB RAM,并且易于移植。
答案 9 :(得分:1)
还有JavaScript,来自Espruino。
这是专门为微控制器而构建的,并且有各种不同芯片(主要是STM32)的版本,可以将整个系统安装到8kB RAM中。
答案 10 :(得分:0)
您是否考虑过使用busybox提供的/bin/sh
?或者他们推荐的smaller scripting languages?
答案 11 :(得分:0)
Prolog - http://www.gprolog.org/
根据谷歌搜索“prolog small”,可以通过避免链接内置谓词来使可执行文件的大小变得非常小。
答案 12 :(得分:0)
我建议使用python。但现在唯一的问题是内存开销对吗?所以我很想知道以后可能会遇到这个问题的人。
首先,首先编写一个bf解释器(或者从某个地方获取源代码)。口译员会非常小。另外,bf是图灵完整语言。现在你需要在python中编写代码,然后使用bfpy(https://github.com/felko/bfpy/blob/master/README.md)将其转换为bf。我已经为您提供了开销最小的解决方案,而且我非常确定bf解释器很容易使用不到10 KB的内存。
答案 13 :(得分:0)
问题或答案列表中没有一种语言被证明能满足超级容易地编译和集成到现有微控制器项目中的要求(公开:我实际上并没有尝试每一个建议)
我发现tinyscript是单个.c
+ .h
文件,它与项目中的其余源文件一起编译,唯一需要进行的附加配置是提供{ {1}},如果您不需要脚本输出,则可以为空。
对我来说,执行速度远不如易于构建和集成以及与C互操作重要,因为我的用例主要是按顺序调用某些C函数。
答案 14 :(得分:-1)
我一直在使用BlackFin上我以前的工作busybox。
我们为它编译了perl + php,在更改s / fork / vfork / g之后它工作得很好......或多或少。没有MMU不是一个好主意。内存碎片很容易杀死服务器。我所做的只是:
for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done
当我走向老板告诉他服务器将要停产时,它就死了。)
答案 15 :(得分:-2)