73

我正在寻找通用编程语言

  • 有一个交互式(实时编码)提示
  • 单独使用 32 KB RAM 或编译器托管在单独机器上时使用 8 KB
  • 在总共只有 8-32 KB RAM(没有 MMU)的微控制器上运行。

以下是我到目前为止的清单,我错过了什么?

  • PythonPyMite VM需要 64K 闪存、8K RAM。以 8K 或更多分辨率为目标的 LPC、SAM7 和 ATmegas。托管。
  • LuaeLua FAQ 推荐 256K 闪存,64K RAM。
  • FORTH : amforth在 ATmega 上需要 8K 闪存、150 字节 RAM、30 字节 EEPROM。
  • Scheme : armpit Scheme最小的目标是带有32K Flash、4K SRAM的LPC2103。
  • C : Interactive C在 68HC11 上运行,没有闪存和 32K SRAM。托管。
  • C : picoc一个开源的、交叉编译的、交互式的 C 系统。为 AVR 编译时,需要 63K 闪存、8K RAM。可以通过努力将表保存在闪存中来减少 RAM。
  • C++AngelScript是一种开源的、基于字节码的、类似 C/C++ 的脚本语言,具有简单的本地调用。
  • TclTinyTCL在 DOS 上运行,60K 二进制文件。看起来很容易移植。
  • BASIC : TinyBasic : 用 64K 堆初始化,可能是可调的。
  • 语言
  • PostScript:(我还没有找到低内存的 FOSS 实现)
  • Shell : bitlash : Arduino (ATmega) 的交互式命令外壳。另请参见AVRSH
4

16 回答 16

9

一个自制的 Forth 运行时确实可以在很少的内存中实现。我知道有人在 1970 年代在 Cosmac 上制造了一个。核心运行时只有 30个字节。

于 2009-07-04T20:04:09.053 回答
8

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

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

于 2009-12-24T17:58:52.307 回答
5

我会推荐 LUA(或 eLUA http://www.eluaproject.net/)。不久前,我已经将 LUA“移植”到了 Cortex-M3。在我看来,它的闪存大小为 60~100KB,需要大约 20KB 的 RAM 才能运行。我确实精简了基本要素,但根据您的应用程序,这可能就足够了。仍有优化的空间,尤其是关于 RAM 要求,但我怀疑你能否在 8KB 中舒适地运行它。

于 2009-07-06T14:09:56.473 回答
5

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

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

于 2012-01-02T02:22:57.380 回答
2

你可以看看非常强大的 AvrCo Multitasking Pascal for AVR。您可以在http://www.e-lab.de尝试一下。MEGA8/88版本是免费的。有大量带有 JTAG 调试器的驱动程序和模拟器,以及所有标准设备(LCDCHAR、LCDGRAPH、7SEG、14SEG、LEDDOT、KEYBOARD、RC5、SERVO、STEPPER...)的实时或模拟可视化。

于 2010-10-28T13:56:14.807 回答
2

您是否考虑过Tiny Basic的 C中的端口?或者,也许将UCSD Pascal p 机器从 Z-80 重写为您的架构?

不过说真的,JavaScript 会成为一种很好的嵌入式脚本语言,但我不知道 VM + GC 的最低内存要求是多少,也不知道删除操作系统依赖项有多么困难。前段时间我玩过NJS,它可能满足你的需求。这个很有趣,因为编译器是用 JavaScript(自托管)编写的。

于 2009-07-08T14:25:39.667 回答
1

您缺少 EmbedVM、此处的主页此处的 svn存储库。记得查看首页上的两个 [ 1 , 2 ] 视频;)

从主页:

EmbedVM 是一个小型可嵌入式虚拟机,用于具有类 C 语言前端的微控制器。它已经过 GCC 和 AVR 微控制器的测试。但由于虚拟机相当简单,因此应该很容易将其移植到其他架构。

VM 模拟一个 16 位 CPU,可以访问高达 64kB 的内存。它只能对 16 位值以及 16 位和 8 位值的数组进行操作。不支持复杂的数据结构(结构、对象等)。一个函数最多可以有 32 个局部变量和 32 个参数。

除了 VM 的内存、保存 VM 状态的小型结构和 EmbedVM 函数在堆栈上所需的合理内存量之外,VM 没有额外的内存需求。特别是 VM 不依赖于任何动态内存管理。

EmbedVM 针对大小和简单性进行了优化,而不是执行速度。VM 本身在 AVR 微控制器上占用大约 3kB 的程序存储器。在以 16MHz 运行的 AVR ATmega168 上,VM 每毫秒可以执行大约 75 条 VM 指令。

VM 完成的所有内存访问都是使用用户回调函数进行的。因此,可以在外部存储设备、闪存等上拥有部分或全部 VM 内存,或者将“内存映射”硬件功能用于 VM。

编译器是一个 UNIX/Linux 命令行工具,它读取 *.evm 文件并生成各种格式的字节码(二进制文件、intel hex、C 数组初始化程序和特殊的调试输出格式)。它还生成一个符号文件,可用于从主机应用程序访问 VM 内存中的数据。

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

于 2013-02-07T02:19:06.427 回答
1

我会推荐MY-BASIC,运行至少 8 KB RAM,并且易于移植。

于 2015-04-20T04:40:12.167 回答
1

还有 JavaScript,通过Espruino

这是专门为微控制器构建的,并且有针对各种不同芯片(主要是 STM32)的构建,可将整个系统安装到低至 8kB 的 RAM 中。

于 2015-08-14T10:09:21.700 回答
0

您是否考虑过简单地使用busybox/bin/sh 提供的?还是他们推荐的较小的脚本语言?

于 2009-07-04T19:31:22.830 回答
0

序言 - http://www.gprolog.org/

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

于 2009-09-17T18:37:31.283 回答
0

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

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

对我来说,执行速度远没有易于构建和集成以及与 C 互操作重要,因为我的用例主要只是按顺序调用一些 C 函数。

于 2018-09-17T09:05:54.383 回答
-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

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

于 2009-07-04T19:48:22.937 回答
-1

我建议使用python。但是现在唯一的问题是内存开销对吗?因此,对于以后可能会遇到此问题的人,我有个好主意。

首先,编写一个 bf 解释器(或者只是从某个地方获取源代码)。口译员将非常小。bf 也是图灵完备的语言。现在您需要在 python 中编写代码,然后使用 bfpy(https://github.com/felko/bfpy/blob/master/README.md)将其转译为 bf。我已经为您提供了开销最少的解决方案,而且我很确定 bf 解释器将轻松保持在 10KB 的 ram 使用量以下。

于 2018-02-28T08:17:17.430 回答
-2

二郎 - http://erlang.org/

它可以容纳2MB

http://www.experts123.com/q/is-erlang-small-enough-for-embedded-systems.html

于 2009-09-17T18:42:16.827 回答