在小内存中运行的可用交互式语言是什么?
我正在寻找通用编程语言
- 有一个交互式(实时编码)提示
- 当编译器托pipe在一台单独的机器上时,本身可以在32 KB的RAM中工作,或者在8 KB的情况下工作
- 运行在微控制器上,总共只有8-32KB RAM(没有MMU)。
下面是我的列表到目前为止,我错过了什么?
- Python : PyMite VM需要64K闪存,8K RAM。 目标LPC,SAM7和ATmegas与8K或更多。 托pipe。
- Lua : eLua FAQbuild议使用256K闪存,64K RAM。
- FORTH : amforth在ATmega上需要8K闪存,150字节RAM,30字节EEPROM。
- Scheme : armpit Scheme最小的目标是具有32K闪存,4K SRAM的LPC2103。
- C : Interactive C运行在68HC11上,没有闪存和32K SRAM。 托pipe。
- C : picoc是一个开源,交叉编译,交互式的C系统。 编译为AVR时,需要63K闪存,8K RAM。 内存可以减less,努力保持闪存表。
- C ++ : AngelScript是一种开源的,基于字节码的,C / C ++像脚本语言,简单的本地调用。
- Tcl : TinyTCL在DOS上运行,60K二进制。 看起来很容易移植。
- BASIC : TinyBasic :初始化一个64K的堆,可能是可调的。
- 口齿不清
- PostScript :(我还没有find低内存的FOSS实现)
- Shell : bitlash :Arduino(ATmega)的一个交互命令shell。 另见AVRSH 。
embedded式编程有许多版本的Tcl:
我听说CHIP-8,XPL0,PicoC和Objective Caml已经被移植到graphics计算器上。 维基百科“Lego Mindstorms”文章列举了一些涉嫌在Lego RCX或Lego NXT平台上运行的编程语言。 他们中的任何一个是否符合您的“实时编码”标准?
您可能想要查看Forth wiki上的其他微控制器。 它至less列出了Atmel AVR的4个Forth:amforth(您已经提到),PFAVR,avrforth和ByteForth。
(链接到这些解释器,以及这个StackOverflow的问题,都包含在“ embedded式系统 ”wikibook)。
一个自制的Forth运行时确实可以在很less的内存中实现。 我知道有人在20世纪70年代在Cosmac公司做过一个人。 核心运行时只有30 个字节。
我会build议LUA(或eLUA http://www.eluaproject.net/ )。 我已经把LUA移植到了Cortex-M3。 从头开始,它的闪存大小为60〜100KB,需要大约20KB的RAM来运行。 我没有去掉基本要素,但根据您的应用程序,这可能就足够了。 还有优化的空间,尤其是关于RAM的要求,但是我怀疑你可以在8KB的时候运行它。
一些AVR口译员/ VM:
- http://www.cqham.ru/tbcgroup/index_eng.htm
- http://www.jcwolfram.de/projekte/avr/chipbasic2/main.php
- http://www.jcwolfram.de/projekte/avr/chipbasic8/main.php
- http://www.jcwolfram.de/projekte/avr/main.php
- http://code.google.com/p/python-on-a-chip/
- http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=688&item_type=project
- http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=626&item_type=project
- http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=460&item_type=project
- http://www.harbaum.org/till/nanovm/index.shtml
W fits符合你的标准 – 默认情况下它被configuration为只使用4k的RAM。 AFAIK它没有看到任何实际的用途,因为我写的这个人决定他毕竟不需要翻译完全在目标系统上运行。
语言受ML和Forth的影响最为明显。
你有没有考虑过Tiny Basic 中的C端口 ? 或者,也许从Z-80改写UCSD Pascal p-machine到你的架构?
但是,严肃地说,JavaScript会制作出一个很好的embedded式脚本语言,但是我不知道VM + GC的最低内存要求是多less,也不清楚操作系统依赖关系是多么的困难。 我和NJS一起玩,这可能会适合你的需求。 这一点很有趣,因为编译器是用JavaScript编写的(自主托pipe)。
你可以看看非常强大的AvrCo Multitasking Pascal AVR。 你可以在http://www.e-lab.de上试试。; MEGA8 / 88版本是免费的。 有大量的驱动程序和模拟器与JTAGdebugging器和好所有标准设备(LCDCHAR,LCDGRAPH,7SEG,14SEG,LEDDOT,键盘,RC5,SERVO,STEPPER …)的现场或模拟可视化。
你想念EmbedVM,主页在这里 ,svn回购在这里 。 记得看看头版上的[ 1,2 ]video;)
从主页:
EmbedVM是一个embedded式C语言前端微控制器的小型embedded式虚拟机。 已经使用GCC和AVR微控制器进行了testing。 但是,由于虚拟机相当简单,因此应该很容易将其移植到其他架构。
VM模拟一个16bit的CPU,可以访问多达64kB的内存。 它只能操作16位值和16位和8位值的数组。 不支持复杂的数据结构(结构,对象等)。 一个函数最多可以有32个局部variables和32个参数。
除了虚拟机的内存之外,一个小型的结构保存了虚拟机的状态以及embedded式虚拟机function所需的合理的内存数量,而不需要额外的内存。 特别是虚拟机不依赖任何dynamic内存pipe理。
EmbedVM针对大小和简单性进行了优化,而不是执行速度。 VM本身在AVR微控制器上占用大约3kB的程序存储空间。 在运行频率为16MHz的AVR ATmega168上,虚拟机每毫秒可执行大约75条VM指令。
所有由虚拟机执行的内存访问均使用用户callback函数进行处理。 所以有可能在外部存储设备,闪存等等的部分或全部虚拟机内存或虚拟机的“内存映射”硬件function。
编译器是一个UNIX / Linux命令行工具,它读入一个* .evm文件,并以各种格式(二进制文件,intelhex,C数组初始化器和一个特殊的debugging输出格式)生成字节码。 它还生成一个符号文件,可用于从主机应用程序访问VM内存中的数据。
类似C的语言如下所示: http : //svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm
我会推荐MY-BASIC ,使用至less8 KB RAM运行,并且易于移植。
你有没有考虑简单地使用busybox提供的/bin/sh
? 还是他们推荐的小脚本语言 ?
我一直在使用我之前在BlackFin上的busybox。
我们编译了perl + php,换了s / fork / vfork / g之后,效果还是不错的…或多或less。 没有MMU不是一个好主意。 内存碎片会很容易地杀死服务器。 我所做的只是:
for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done
它死了,而我走到我的老板,并告诉他,服务器将在生产中死亡:)
Prolog – http://www.gprolog.org/
根据谷歌search“prolog small”,通过避免链接内置的谓词,可执行文件的大小可以变得非常小。
还有通过Espruino的JavaScript。
这是专门为微控制器而构build的,并且有适合于各种不同芯片(主要是STM32)的芯片,可以将整个系统安装到8kB的RAM中。