Programming languages 在微型内存中运行的交互式语言有哪些?

Programming languages 在微型内存中运行的交互式语言有哪些?,programming-languages,embedded,microcontroller,interactive,Programming Languages,Embedded,Microcontroller,Interactive,我正在寻找通用编程语言 具有交互式(实时编码)提示 单独在32 KB的RAM中工作,或者当编译器托管在单独的计算机上时,在8 KB内存中工作 在微控制器上运行,总RAM为8-32 KB(无MMU) 以下是我目前的清单,我还缺少什么 Python:需要64K闪存和8K RAM。以8K或以上的LPC、SAM7和ATmegas为目标。主持 Lua:常见问题解答建议使用256K闪存和64K RAM FORTH:在ATmega上需要8K闪存、150字节RAM、30字节EEPROM 方案:最小的目标是

我正在寻找通用编程语言

  • 具有交互式(实时编码)提示
  • 单独在32 KB的RAM中工作,或者当编译器托管在单独的计算机上时,在8 KB内存中工作
  • 在微控制器上运行,总RAM为8-32 KB(无MMU)
以下是我目前的清单,我还缺少什么

  • Python:需要64K闪存和8K RAM。以8K或以上的LPC、SAM7和ATmegas为目标。主持
  • Lua:常见问题解答建议使用256K闪存和64K RAM
  • FORTH:在ATmega上需要8K闪存、150字节RAM、30字节EEPROM
  • 方案:最小的目标是配备32K闪存、4K SRAM的LPC2103
  • C:在68HC11上运行,无闪存和32K SRAM。主持
  • C:一个开源、交叉编译、交互式C系统。为AVR编译时,需要63K闪存和8K RAM。通过努力使表保持闪存状态,可以减少RAM
  • C++:一种开源、基于字节码、类似C/C++的脚本语言,具有简单的本机调用
  • Tcl:在DOS上运行,60K二进制。看起来很容易移植
  • BASIC::使用64K堆进行初始化,可以调整
  • Lisp
  • PostScript:(我还没有找到一个针对内存不足的FOSS实现)
  • Shell:用于Arduino(ATmega)的交互式命令Shell。另见

您是否考虑过只使用由提供的
/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运行时确实可以在很少的内存中实现。我知道有人在20世纪70年代在Cosmac上做了一个。核心运行时只有30个字节。

我建议使用LUA(或eLUA)。不久前我把LUA“移植”到了Cortex-M3。从我的头顶看,它的闪存大小为60~100KB,需要20KB左右的内存才能运行。我确实只提到了最基本的东西,但根据您的应用程序,这可能就足够了。仍然有优化的空间,特别是在RAM需求方面,但我怀疑您是否能在8KB的内存中舒适地运行它。

您是否考虑过一种优化方法?或者,也许将p-machine从Z-80改写为您的体系结构

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

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

Erlang-

它可以容纳2MB


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

您可能想在第四个wiki上查看其他微控制器Forths。它列出了Atmel AVR的至少4个Forth:amforth(您已经提到)、PFAVR、avrforth和ByteForth。

(指向这些解释器的链接以及此StackOverflow问题都包含在“wikibook”中)。

您可以查看非常强大的AvrCo多任务Pascal for AVR。你可以试试看。MEGA8/88版本是免费的。有大量带有JTAG调试器的驱动程序和模拟器,以及所有标准设备(LCDCHAR、LCDGRAPH、7SEG、14SEG、LEDDOT、键盘、RC5、伺服、步进等)的实时或模拟可视化功能。

一些AVR解释器/VM:

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


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

    您缺少EmbedVM、主页、svn repo。记住查看首页上的两个[,]视频;)

    从主页:

    EmbedVM是一种小型的微控制器嵌入式虚拟机 使用类似C语言的前端。它已经用GCC和AVR进行了测试 微控制器。但由于虚拟机相当简单,它 应易于将其移植到其他体系结构

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

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

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

    所有内存访问都由th完成