【问题标题】:Java for embedded systems? [closed]Java 用于嵌入式系统? [关闭]
【发布时间】:2015-07-24 05:55:16
【问题描述】:

我最近学习了一些基本的 Java,并且正在考虑是否可以将这些新技能用于嵌入式计算项目。 我一直在环顾四周,但似乎找不到任何能够运行 Java 的微控制器。 这样的事情还存在吗?

【问题讨论】:

  • 了解 Java 分支:hackaday.com/2012/10/09/…。我只使用过 C 语言为王的 atmel AVR 和 SAM 微控制器。
  • 这可能是stackoverflow.com/questions/16031613/… 的副本,但由于这个问题有些陈旧并且事情还在继续,我建议允许这个问题继续存在,以便重新审视当前的状态 -艺术。但你真的应该先搜索 SO - 你肯定会得出与你目前持有的不同的结论。
  • @AndréSchild :您的评论值得扩展为实际的答案。您应该避免在 cmets 中发布答案 - 特别是如果它们看起来很有用 - 尽管应该避免仅链接 answer ;所以添加一些细节。

标签: java embedded


【解决方案1】:

由于 Java 虚拟机架构,您需要大量资源才能运行 JVM。获得 JVM 阻力最小的路径可能是在已经支持它的目标(例如 Linux)上运行操作系统,但它本身需要相对大量的资源。

有一些独立的 JVM 可以裸机工作,也可以与嵌入式 RTOS 集成以支持线程。我不久前在回复similar question 时编制了一个列表,但其中一些链接现在已过期。

在嵌入式系统上运行 Java 肯定会影响性能,并且可能不适合硬实时应用程序。

【讨论】:

    【解决方案2】:

    微控制器不适用于此用途。称为“迷你计算机”的控制器可以嵌入 JAVA 应用程序(Raspberry PI、BeagleBone、Intel Edison 等,因为它们嵌入了操作系统,因此可以使用 JRE)。

    对于微控制器,C/C++ 确实更好更可靠。

    【讨论】:

    • 不是"minicomputer" 的通常含义。更常见的是“单板计算机”或 SBC。也许?
    • 这些“小型计算机”实际上与微控制器无关,因为它们是 ARM 架构,几乎与真实计算机一模一样,例如您无法在 SBC 上运行实时应用程序。
    【解决方案3】:

    微控制器适用于真正的低级 - 它们通常没有太多功能,也没有足够的内存/处理器速度来运行 JAVA。

    大多数入门级微控制器都使用 C/C++,甚至可能使用它们自己的变体。


    Arduino/Atmega 使用Haiku VM 运行java。使用 haiku VM,您可以将 JAVA 代码编译成 C - 这将被编程到 Arduino。这使得调试有点困难,但还不错——嘿,像 JAVA 这样的高级语言可以大大减少你的编码时间。这个问题通常是你的记忆很快就会消失,你不能编写大量的代码。

    PIC - Muvium 声称支持 PIC,但一段时间后他们不再支持它,现在已经关闭。我认为 PIC 目前不支持 JAVA。

    Renesas 是另一家流行的微控制器供应商,它有自己的 SDK,称为 MicroEJ,用于他们的 RX 和 RZ 板的 java。我从未使用过它,但他们的主板拥有更多的 RAM 和闪存 - 这很有帮助。


    在使用 JAVA 进行嵌入式编程时,单板计算机(基本上,更强大的微控制器/处理器 + 具有更多外围设备)非常有用。最受欢迎的两个是Beagle boneRaspberry Pi。这些基本上是芯片上的计算机 - 可以运行成熟的 ARM Ubuntu + Java/Python/任何其他语言。

    最容易使用的是 Raspberry Pi(在我看来)——它拥有巨大的社区支持。

    【讨论】:

    • Beagle Bone 和 Raspberry Pi 都是单板计算机而非微处理器的示例。两者都使用 ARM 内核微处理器。它们能够运行 Java 主要是因为它们支持 Linux,但您需要相对较大的资源来启动 Linux。
    • 像slitaz或puppy这样的小型Linux可以轻松运行而无需太多资源 - ROS + JAVA可以轻松运行在上面而不会造成太多性能障碍。
    • “资源过多”是主观的和平台相关的。最小的 Linux 启动仍然需要 >4Mb 的闪存和 >8Mb 的 RAM。许多嵌入式系统具有数十千字节数量级的内存。 Java 的性能损失来自字节码的运行时解码。即使使用 JIT 编译,它也会比原生 C/C++ 代码慢,而且确定性要低得多。 “没有太多性能障碍”也是主观的和应用程序依赖的;如果您的应用程序具有微秒级的实时截止日期,则 Java 不是要使用的工具。
    【解决方案4】:

    最近我开始研究一个运行 Java 的 CM12001/1000000 板。它在同一块板上包含两个控制器。目前我对这件事没有太多了解。我会在获得更多信息后立即更新答案。

    回答您的问题:是的,这样的事情存在,但非常罕见。然而,Python 最近使用 MicroPython 在嵌入式领域越来越受欢迎,它包含 Python 3 标准库的一小部分,并针对在微控制器上运行进行了优化。

    编辑:Telit 的 ATOP 模块提供了这样的功能。通常,它们具有大量 RAM 和闪存(几 MB 到几百 MB)。他们运行加载 JVM 的 Linux(正如 Clifford 所指出的)。 Telit 提供 Java API 来控制诸如 GPIO 之类的东西(尽管非常有限),并执行诸如串行通信、GPS、GSM 控制等之类的东西。

    【讨论】:

      【解决方案5】:

      是的,存在能够在裸机上运行 Java 的微控制器

      但此微控制器上的 JVM 针对速度和低内存使用率进行了优化。这意味着优化后的 JVM 有一些限制,而不是常规的 JVM,就像 Python 和 MicroPython 一样

      但 Java 上的纯代码允许您轻松地将代码从桌面传输到微控制器或嵌入式系统

      对于嵌入式计算项目的自学,您可以尝试使用Javaino 允许在此开发板上执行 Java 程序,通过 i2c、UART 等(如 Arduino)从传感器读取数据

      【讨论】:

        猜你喜欢
        • 2010-10-08
        • 1970-01-01
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-25
        相关资源
        最近更新 更多