【问题标题】:What is a good scripting language for a small embedded system? [closed]对于小型嵌入式系统,什么是好的脚本语言? [关闭]
【发布时间】:2011-10-09 05:15:02
【问题描述】:

我正在寻找一种可以包含在嵌入式系统中的脚本语言,以允许用户根据系统事件(I/O 端口更改、时间事件...)预先配置单元行为。所需的控制类型是

if (some_event)
{ 
    do some stuff
    delay N seconds
    do more stuff
    if (some condition)
    {
        do something
    }
    else
    {
        delay until condition
        do something else
    }
}

其中的每个“做事”部分通常是更改 IO 的状态或允许/禁止处理一个或多个事件。

除非脚本语言实现内部需要,否则不需要文本处理或文件处理。

在构建正常操作代码后,我使用的处理器有大约 8K 的 RAM 和 20K 的程序存储可用。固件是用 C 编写的,因此脚本语言的任何源代码也必须是 C。

【问题讨论】:

  • 如果您的目标受开源编译器支持,您可以将编译器与您的配置软件捆绑在一起。从您的配置中生成 C,编译,然后上传。
  • @kuba - 好主意 - 如果编译器可以适应 20K ROM 和 8Kbytes RAM!
  • 嗯,编译器会驻留在 PC 上,对吧?估计有嵌入式的,还有基于PC的配置程序?
  • 我赞同 MarkusSchaber 对 PAWN 的建议。字节码是 ROM-able。编译器也可以嵌入,但这没什么意义。不需要垃圾回收,所有数据分配都是静态的。
  • 您必须了解 p-code 沙箱仍然可以被利用。因此,“修改嵌入式处理器上的代码”总是存在恶意用户的可能性。基本上,即使是 p 代码,也不得授予用户访问权限。 p-code必须通过配置软件加密,然后在target上解密。

标签: c scripting embedded


【解决方案1】:

Lua 是我作为嵌入式语言的首选。它是用 C 编写的,很容易将你自己的函数暴露给 Lua,而且看起来已经做了一些工作来让它在 embedded systems 上运行。

【讨论】:

    【解决方案2】:

    我会给 Lua 一个机会,因为它是一种非常小的脚本语言。可以完全嵌入

    Lua 是一个快速的语言引擎,占用空间小,您可以嵌入 轻松进入您的应用程序。 Lua 有一个简单且有据可查的 API 这允许与用其他语言编写的代码进行强大的集成。 用其他语言编写的库很容易扩展 Lua。它 也很容易用 Lua 扩展用其他语言编写的程序。 Lua 不仅用于扩展用 C 和 C++ 编写的程序, 但也可以在 Java、C#、Smalltalk、Fortran、Ada、Erlang 中,甚至在 其他脚本语言,例如 Perl 和 Ruby。

    Lua homepage

    【讨论】:

      【解决方案3】:

      我们使用Squirrel 来完成这项工作。它类似于Lua,但引用计数而不是垃圾收集,所以it tends to work better in very tight memory。不利的一面是,它的社区要小得多。

      我也成功地看到了Lisp embedded,尤其是类似Scheme 的衍生产品。

      另请参阅另一个 StackOverflow 问题:What are the available interactive languages that run in tiny memory?

      【讨论】:

      • 感谢您的建议。我一直在研究 Lua,并一直担心将它安装到我所拥有的非常紧凑的处理器环境中。我喜欢能够交叉编译为字节码并将其作为“可执行文件”加载到我的目标中的想法。需要进一步调查,但这可能是要走的路。
      • @Ian 该技术的通用术语是“p-code”(en.wikipedia.org/wiki/P-code_machine),它已在许多地方成功使用。个人觉得,如果你是预编译源代码,不妨先预编译成原生代码,然后就干脆用C,但我不知道你的具体限制是什么。
      • 我记得在 1970 年代末/1980 年代初的 IBMPC 之前的日子里遇到过 ucsd p-code。编译为本机代码并不是一个真正的选择。我想要的是一个控制脚本,很像一个批处理文件,它被加载到我的设备中以控制它的操作并允许它被远程部署。我有一个小型 16 位处理器、16K 内存、100K 代码和大量可配置选项用于其操作。
      • @Ian,是的,听起来像是 pcode 的工作!在这个网站上,很难判断某人是老手还是新工科学生,所以我永远不确定在回答之前假设 OP 有多少背景。我仔细研究的第一个 pcode 是 Infocom 用来编写他们的旧文本冒险 (csd.uwo.ca/Infocom/Articles/small.html) 的 Z-Machine——这是一个将大量内容放入一个小空间的奇迹。
      【解决方案4】:

      希望这些对您有所帮助 在 c 应用程序中嵌入 perl 脚本

      http://www.ibm.com/developerworks/linux/tutorials/l-perlscript/index.html

      只需谷歌它以获取更多信息。我相信 perl 可以帮助您进行模式(字符串)搜索。 要学习 perl,请阅读本教程

      http://mj12net.org/courses/perl/Teach%20Yourself%20Perl%20in%2021%20Days.pdf

      它是一个很好的教程,你可以探索比你想象的更多。 谢谢

      【讨论】:

      • 正如我所说,我绝对不需要的一件事是任何形式的字符串处理,但感谢您的建议。
      【解决方案5】:

      您也可以尝试 JavaScript,来自 Google 的 V8 engine 非常容易嵌入。此外,语言本身非常小,因此您几乎可以将其塑造成适合您的领域的东西。

      【讨论】:

      • 只有当他的嵌入式系统是 ARM 时。 (V8 只能编译到 x86、x64 和 ARM。)
      • 我想补充一点,在 C 环境中嵌入 Javascript 有两个新的竞争者:DuktapeMuJS
      • 目标不是 ARM,并且规定的内存大小(最大 8K 字节的 RAM)可能会排除这种情况。
      【解决方案6】:

      对于嵌入式系统,请尝试eLua

      【讨论】:

      • 仅供参考:eLua 需要大约 5kb 的 RAM 才能“什么都不做”(而普通 Lua 需要 20-30k)。最重要的是您的代码实际需要的任何数据。
      【解决方案7】:

      传统的选择是Forth。诸如微控制器之类的小型嵌入式系统是 Forth 的首选平台。 Forth 有许多具有各种特性、目标平台和许可的实现。 Forth Interest Group 有一个commercial implementationnon-commercial implementations 的列表。

      【讨论】:

        【解决方案8】:

        有四种相当常见的嵌入语言(排名不分先后):

        其中,Lisp 和 Forth 可以说是对最终用户最不友好的。 Lua 目前似乎是最流行的(它在游戏世界中非常流行),Tcl 可以说是最容易学习的(整个语言只有 12 条规则)并且是 EDA 世界中事实上的语言。

        【讨论】:

        • 为了更新旧答案,我们现在可以选择:-mruby
        【解决方案9】:

        我在以前的项目中使用 pawn (http://www.compuphase.com/pawn/pawn.htm) 有很好的经验。它的一个派生词也用于“E17”桌面环境,他们称之为“胚胎”。 (https://trac.enlightenment.org/e/wiki/Embryo)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-10-25
          • 2011-06-22
          • 2010-09-15
          • 1970-01-01
          • 1970-01-01
          • 2016-01-10
          • 1970-01-01
          相关资源
          最近更新 更多