在微型内存中运行的可用交互式语言是什么?

我正在寻找通用编程语言,它

  • 有一个交互式(实时编码)提示符
  • 当编译器驻留在一台单独的机器上时,它可以单独在32KB 的 RAM 中工作,也可以在8KB 的 RAM 中工作
  • 运行在一个只有8-32 KB 内存的微控制器上(没有 MMU)。

到目前为止,下面是我的列表,我错过了什么?

  • Python : PyMite VM需要64K 闪存、8K 内存。目标 LPC、 SAM7和 ATmegas 需要8K 或更多。托管。
  • Lua : 埃卢阿 FAQ 建议使用256K 闪存、64K 内存。
  • FORTH : 在 ATmega 上,Amforth需要8K 闪存,150字节 RAM,30字节 EEPROM。
  • Scheme : 腋窝计划最小的目标是 LPC2103,具有32K 闪存和4K SRAM。
  • C : 交互式 C在68HC11上运行,没有闪存和32K SRAM。
  • C : 皮科克一个开源、交叉编译、交互式的 C 系统。当为 AVR 编译时,它需要63K 闪存,8K 内存。通过努力保持表处于闪存状态,可以减少 RAM。
  • C + + : 天使脚本是一个开源的、基于字节码的、类似于 C/C + + 的脚本语言,具有简单的本机调用。
  • Tcl : TinyTCL运行在 DOS 上,60K 二进制文件。
  • 用64K 堆初始化,可以调整。
  • 口齿不清
  • PostScript : (我还没有找到针对低内存的 FOSS 实现)
  • Shell : 贱人: Arduino (ATmega)的交互式命令 Shell。
19378 次浏览

你有没有考虑过简单地使用 多管闲事提供的 /bin/sh? 或者他们推荐的 更小的脚本语言

我一直在使用在我以前的工作中的 Busybox 上的黑鳍。

我们为它编译了 perl + php,在更改了 s/fork/vfork/g 之后,它工作得非常好... 或多或少。没有 MMU 可不是个好主意。内存碎片会很容易地杀死服务器。我只是:

for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done

当我走向我的老板并告诉他服务器将在生产中死去的时候,它死了:)

一个自制的 Forth 运行时确实可以在很小的内存中实现。我认识一个人在70年代用 Cosmac 做了一个。核心运行时仅为30 字节。

我建议使用 LUA (或 eLUA http://www.eluaproject.net/)。我之前把 LUA“移植”到了 Cortex-M3。从我的头顶有一个60 ~ 100KB 的闪存大小,需要大约20KB 的内存运行。我只说了最基本的东西,但根据你的应用程序,这可能就足够了。仍然有优化的空间,特别是关于 RAM 需求,但我怀疑您可以在8KB 中舒适地运行它。

你考虑过 Tiny BasicC 端口吗? 或者,也许从 Z-80重写 加州大学圣迭戈分校帕斯卡尔分校 p-machine 到你的架构?

说真的,虽然 JavaScript 可以作为一个很好的嵌入式脚本语言,但是我不知道 VM + GC 的最低内存需求是多少,也不知道移除操作系统依赖性有多难。我打了一段时间的 NJS,这可能适合你的需要。这一点很有趣,因为编译器是用 JavaScript (自托管)编写的。

Prolog-http://www.gprolog.org/

根据谷歌搜索“ prolog small”,可执行文件的大小可以通过避免链接内置谓词而变得相当小。

我听说 CHIP-8、 XPL0、 PicoC 和 Objective Caml 已经被移植到图形计算器上了。 维基百科上的“乐高头脑风暴”文章列出了一系列据称运行在乐高 RCX 或者乐高 NXT 平台上的编程语言。 它们中的任何一个符合你的“实时编码”标准吗?

你可能想在 Forthwiki 上查看其他微控制器 Forths。它至少列出了 Atmel AVR 的4个四分位数: amforth (你已经提到过了)、 PFAVR、 avrforth 和 ByteForth。
(这些解释器的链接,以及这个 StackOverflow 问题,都包含在“ 嵌入式系统”wikibook 中)。

你可以看看非常强大的 AVR 的 AvrCo 多任务 Pascal。你可以在 http://www.e-lab.de试试。MEGA8/88版本是免费的。有大量的驱动程序和模拟器与 JTAG 调试器和漂亮的现场或模拟可视化的所有标准设备(lCDCHAR,LCDGRAPH,7SEG,14SEG,LEDDOT,键盘,RC5,SERVO,STEPPER...)。

Wren 符合您的标准——默认情况下,它被配置为仅使用4k RAM。AFAIK 没有看到任何实际应用,因为我为之编写它的那个家伙决定,他毕竟不需要一个完全在目标系统上运行的解释器。

语言受 ML 和 Forth 的影响最为明显。

你错过了 EmbedVM,主页 给你,svn repo 给你。请记住在首页查看这两个[ 12]视频;)

网页:

嵌入式虚拟机是一种用于微控制器的小型可嵌入虚拟机 它已经通过了 GCC 和 AVR 的测试 微控制器。但由于虚拟机相当简单 应该很容易将其移植到其他体系结构。

虚拟机模拟一个16位 CPU,可以访问64kB 的内存 只能操作16位值和16位和8位值的数组。 不支持复杂的数据结构(结构、对象、, 一个函数最多可以有32个局部变量和32个 争论。

除了 VM 的内存,还有一个保存 VM 状态的小结构 以及 EmbedVM 函数在 堆栈对虚拟机没有额外的内存需求。 特别是虚拟机不依赖任何动态内存管理。

EmbedVM 是为了大小和简单性而优化的,而不是为了执行速度 虚拟机本身在 AVR 上占用大约3kB 的程序内存 在16兆赫的 AVR ATmega168上,虚拟机可以 每毫秒执行大约75条 VM 指令。

VM 完成的所有内存访问都使用用户回调进行格式化 因此,可以将部分或全部 VM 内存打开 外部存储器设备,闪存等或“内存映射”硬件 对虚拟机的函数。

编译器是一个 UNIX/Linux 命令行工具,读入一个 * . evm 生成不同格式的字节码(二进制文件,英特尔十六进制, 数组初始化器和一个特殊的调试输出格式) 生成一个符号文件,该文件可用于访问 VM 中的数据 来自主应用程序的内存。

类 C 语言如下所示: http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm

我会推荐 我的基本功,运行在最低8 KB 内存,并容易移植。

还有通过 Espruino提供的 JavaScript。

这是专门为微控制器而设计的,有各种不同的芯片(主要是 STM32)可以将一个完整的系统安装到8kB 内存中。

我建议用巨蟒。但现在唯一的问题是内存开销,对吗?因此,我有一个伟大的想法,为人们谁可能陷入这个问题以后。

首先,编写一个 bf 解释器(或者只是从某个地方获取源代码)。翻译会很小。也是一种图灵完全语言。现在您需要用 python 编写代码,然后使用 bfpy (https://github.com/felko/bfpy/blob/master/README.md)将其传输到 bf。我给你的解决方案开销最小,我非常肯定一个 bf 解释器将很容易停留在10KB 以下的内存使用。

问题和答案中列出的语言都不能满足超级简单的编译和集成到现有微控制器项目中的要求(披露: 我实际上并没有尝试所有的建议)。

相反,我发现 小手稿是一个单独的 .c + .h文件,它与我项目中的其他源文件一起编译,唯一需要的额外配置是提供一个 void outchar(int c),如果你不需要脚本输出,它可以是空的。

对我来说,执行速度远不如构建、集成和与 C 互操作的简单性重要,因为我的用例主要是按顺序调用一些 C 函数。