在微型内存中运行的可用交互语言是什么?[关闭]


73

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

  • 具有交互式(实时编码)提示
  • 单独在32 KB的RAM中工作,或者在单独的计算机上托管编译器时,工作8 KB
  • 在总共只有8-32 KB RAM(不带MMU)的微控制器上运行。

到目前为止,这是我的清单,我想念的是什么?

  • PythonPyMite VM需要64K闪存,8K RAM。针对LPC,SAM7和8K或更高的ATmegas。托管。
  • LuaeLua常见问题解答建议使用256K闪存,64K RAM。
  • FORTHamforth在ATmega上需要8K闪存,150字节RAM,30字节EEPROM。
  • 方案腋下方案最小的目标是具有32K闪存,4K SRAM的LPC2103。
  • CInteractive C在68HC11上运行,没有闪存和32K SRAM。托管。
  • Cpicoc一个开源,交叉编译的交互式C系统。为AVR编译时,它需要63K闪存,8K RAM。可以通过将表保持在闪存中来减少RAM。
  • C ++AngelScript是一种开放源代码,基于字节码的C / C ++,类似于脚本语言,可轻松进行本地调用。
  • TclTinyTCL在DOS上运行,二进制为60K。看起来很容易移植。
  • BASICTinyBasic:初始化为64K堆,可能是可调整的。
  • Lisp
  • PostScript:(我还没有找到用于内存不足的FOSS实现)
  • Shellbitlash:Arduino(ATmega)的交互式命令Shell。另请参阅AVRSH

2
您提到的第四个系统似乎只需要8k的闪存,但您将其列为128k。我想念什么吗?
SingleNegationElimination

1)FORTH impl的闪存/ RAM编号。用于指定的处理器。2)我不知道stackoverflow中的社区Wiki。我会调查一下。
dwhall

Tcl有许多版本可用于嵌入式编程:wiki.tcl.tk/1363
ars

2
一个有趣的问题。作为嵌入式程序员,我很好奇您为什么要在嵌入式系统上运行交互式提示。除了“ neato”因素之外,那就是。只要我的嵌入式系统连接到PC,我就会尝试在PC中进行尽可能多的处理,并且在嵌入式设备中使用最少的代码。通常,在PC上用代码实现特定功能比在嵌入式系统中更容易。
克雷格·麦昆

2
我在大学期间进行机器人选修时使用了InteractiveC。与整个C实验室学期相比,我在6周内通过交互式提示了解了有关C的更多信息。自1996年以来,我一直在进行Python编程,并且它的交互式提示让我在2天内学习了该语言(达到了我需要做的事情)。因此,我认为交互式语言非常适合学习和快速制作原型。最后,我是PyMite的首席开发人员,所以我正在寻找对等语言的示例并从中学习所有知识。
dwhall

Answers:


9

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


1
FORTH已被列出。这是评论,不是答案。
dwhall

8

我听说CHIP-8,XPL0,PicoC和Objective Caml已移植到图形计算器。Wikipedia的“ Lego Mindstorms”文章列出了一系列据称在Lego RCX或Lego NXT平台上运行的编程语言。他们是否符合您的“实时编码”标准?

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


5

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


谢谢,但是eLua项目已经在我的清单上了(请参阅问题中的第二个项目符号)。
dwhall

5

5

Wren符合您的条件-默认情况下,它配置为仅使用4k RAM。AFAIK尚未见任何实际用途,因为我为之编写的那个人决定他根本不需要完全在目标系统上运行的解释器。

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


2

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

虽然说真的,JavaScript会成为一种很好的嵌入式脚本语言,但是我不知道VM + GC的最低内存要求是多少,也不清楚如何删除OS依赖项。我前一段时间与NJS玩过,这可能适合您的需求。这一点很有趣,因为编译器是用JavaScript(自托管)编写的。


2

您可以看一下功能强大的AVR AvrCo多任务Pascal。您可以在http://www.e-lab.de上尝试。MEGA8 / 88版本是免费的。带有JTAG调试器的大量驱动程序和模拟器,以及所有标准设备(LCDCHAR,LCDGRAPH,7SEG,14SEG,LEDDOT,键盘,RC5,SERVO,STEPPER ...)的实时显示或模拟显示。


1

你错过EmbedVM,网页这里,svn的位置。记住检查出这两个[ 12 ]在头版视频;)

从首页:

EmbedVM是用于具有C语言前端的微控制器的小型可嵌入虚拟机。已通过GCC和AVR微控制器测试。但是由于虚拟机非常简单,因此应该很容易将其移植到其他体系结构。

VM模拟了一个16位CPU,该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十六进制,C数组初始化程序和特殊的调试输出格式)。它还会生成一个符号文件,该文件可用于从主机应用程序访问VM内存中的数据。

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



1

通过Espruino也有JavaScript 。

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


0

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


3
我正在寻找在没有MMU的微控制器上运行的语言,并且具有如此小的RAM(8K-32K),以至于OS不合理。我将编辑问题以使其更清楚。
dwhall

ucLinux没有MMU,可以在微控制器上运行。它使用busybox。
杰·阿特金森

@DoxaLogos:感谢您全力以赴,但我认为ucLinix不会在这么小的内存空间中运行。(我一开始没有读。留下答案,因为它可能对其他人有用。)一个人知道您可以编写支持BB的操作系统多么小吗?
dmckee ---前主持人小猫,


0

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

相反,我发现tinyscript是一个.c+.h文件,它与项目中的其余源文件一起编译,唯一需要进行的附加配置是提供a void outchar(int c),如果您不需要脚本的输出,则可以为空。

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


-1

我以前在BlackFin上的工作忙碌盒中一直在使用。

我们为它编译了perl + php,更改了s / fork / vfork / g后,效果还是不错的……或多或少。没有MMU不是一个好主意。内存碎片将很容易杀死服务器。我所做的就是:

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

它在我走向老板并告诉他该服务器将在生产中死亡时死了:)


由于Perl和PHP不能在少于32 KB的RAM中运行,因此无法接受此答案。没有MMU是必需的。我正在深度嵌入式系统上工作;32 KB是系统中的RAM总量
dwhall

-1

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.