在微小内存中运行的可用交互式语言有哪些?

时间:2009-07-04 18:29:51

标签: programming-languages embedded microcontroller interactive

我正在寻找

的通用编程语言
  • 有一个互动(实时编码)提示
  • 单独使用32 KB的RAM,或者在单独的计算机上托管编译器时使用8 KB
  • 在一个总共只有8-32 KB RAM的微控制器上运行(没有MMU)。

到目前为止,下面是我的清单,我缺少什么?

  • Python PyMite VM需要64K闪存,8K RAM。目标LPC,SAM7和ATmegas 8K或更多。主办。
  • Lua eLua常见问题解答推荐256K闪存,64K RAM。
  • FORTH amforth在ATmega上需要8K闪存,150字节RAM,30字节EEPROM。
  • 方案armpit Scheme最小的目标是LPC2103,带有32K闪存,4K SRAM。
  • C Interactive C在68HC11上运行,没有闪存和32K SRAM。主办。
  • C picoc一个开源,交叉编译,交互式C系统。编译为AVR时,需要63K闪存,8K RAM。可以减少RAM,努力使表格保持闪存。
  • C ++ AngelScript一个开源的,基于字节码的,类似C / C ++的脚本语言,可轻松进行原生调用。
  • Tcl TinyTCL在DOS上运行,60K二进制。看起来很容易移植。
  • BASIC TinyBasic:使用64K堆初始化,可能是可调整的。
  • Lisp的
  • PostScript :(我还没有找到低内存的FOSS实现)
  • Shell bitlash:Arduino(ATmega)的交互式命令shell。另请参阅AVRSH

16 个答案:

答案 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)

答案 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。请务必在首页查看[12]个视频;)

从主页:

  

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)