带有 Java API 的微控制器

电器工程 微控制器 avr 爪哇
2022-01-17 17:25:55

我的硬件团队计划在未来的项目中使用 Atmel AVR 8 位微控制器。

据我所知,它必须用 C 编程。我找到了一个用于 AVR 的JVM,尽管它比 Atmel 的本机 C 库更受限制。

你能给我推荐一个支持 Java 的 8 位微控制器吗?

PS。我不懂C,而且我在微处理器编程方面缺乏经验。

4个回答

如果您在微处理器/微控制器编程领域缺乏经验,您可能应该先学习 C,这样您就可以了解 Java 何时以及为什么对于大多数微控制器项目来说是一个糟糕的选择。

您是否阅读了对您链接的 JVM 的限制?它包括以下问题:

  • 低至 512 字节的程序存储器(不是 KB,绝对不是 MB)
  • 低至 768 字节的 RAM(变量所在的位置。受此限制,您只能使用 768 个字符的字符串。)
  • 在 8 Mhz AVR 上每秒大约 20k Java 操作码。
  • 只包括 java.lang.Object、java.lang.System、java.io.PrintStream、java.lang.StringBuffer、一个 JVM 控制类和一个原生 IO 类。您将无法导入 java.util.*;并获取不在此列表中的所有课程。

如果您不熟悉这些限制的含义,请确保您有一个计划 B,如果由于空间和速度限制,您实际上无法使用 Java 进行项目。

如果您仍然想使用 Java,也许是因为您希望该设备由许多只知道 Java 的人编程,我强烈建议您使用更大的硬件,可能是运行嵌入式 Linux 的东西。有关运行嵌入式 JVM 的一些规范,请参阅Oracle 的此页面,在他们讨论的常见问题解答中,他们建议至少 32MB 的 RAM 和 32MB 的闪存。这大约是您正在查看的 AVR 的 RAM 的 32,000 倍和 Flash 的 1,0000 倍。Oracle 的Java Embedded Intro页面更详细地介绍了 JVM 的限制。正如您可能猜到的那样,他们的语气比我的对 Java 更友好。请注意,这种硬件比 8 位 AVR 更难设计。

我是计算机工程专业的学生,​​辅修计算机科学。我大学的CS系喝了Java Kool-aid,所以很多工程专业的学生都只知道Java(这对于程序员来说是一种可悲的状态,如果你不会至少学习一些Python或C++想学习 C...),所以我的一位教授为具有一年 Java 经验的学生发布了C 备忘单Wayback machine 链接)。它只有 75 页;我建议您在做出决定之前阅读或浏览一下。在我看来,C 是用于开发嵌入式项目的最有效、最持久和最专业的语言。

另一个需要考虑的替代方案是Arduino框架。它使用Wiring语言的精简版就像没有对象或标题的 C++。它可以在许多 AVR 芯片上运行,绝对不限于它们的硬件。它会给你一个比直接跳入 C 更容易的学习曲线。

最后,
XKCD金锤
替代文本:我花了五次尝试找到合适的,但我最终还是设法挽救了我们的夜晚——如果不是船的话。

Atmel AVR 最流行的编程环境是ArduinoArduino 语言是 C++ 的子集。

Arduino“草图”/程序在语法上与 Java 非常相似。Arduino 派生Wiring 语言在 C++ ( Arduino )、Java ( Processing ) 和 Javascript ( processing.js ) 中实现。

由于它们在 Algol68 中的共同祖先,这两种语言具有相同的声明风格、循环结构和算术运算符。通常,Arduino 中的所有对象都是全局声明或在堆栈上声明的,因此与 Java 一样,成员函数使用.运算符(例如 . LED.flash())调用。

Java 程序员将非常熟悉该语言 - 但重要的是,Arduino 草图被编译成本机代码,可以全速运行并具有完全硬件访问权限。这对于充分利用您的微控制器至关重要。

这是API

Arduino 提供了一切您需要的东西:低成本硬件、免费的集成开发环境和引导加载程序(因此您可以通过 USB/串行加载代码)。

我想说清楚,我以前没有用过,但一年前曾经有一个叫 Javelin。有可能Parallax已经获得了它们或其他东西,因为现在唯一出现的是“标枪印章”​​。几年前,还有一家名为 Velocity Semiconductor 的公司,它(据说)替代了 Rabbit Semiconductor 的核心模块,并且它在硬件中有一个 JVM,但该公司显然已经消失了。祝您搜索顺利!

Sun Microsystems 曾经制作过一个名为 Sun Spot 的平台,它基本上是一个嵌入式 Java 平台。现在显然 Sun Microsystems 已经不存在了(甲骨文收购了它们),但您似乎仍然可以购买 Sun Spots - http://www.sunspotworld.com/products/我对在嵌入式环境中使用 Java 的想法并不大(恕我直言,工作的抽象级别错误),但这似乎是 Java 最自然的嵌入式平台。请注意这些东西的规格——它们是重型 180MHz / 512k RAM,而且它们的入门套件价格不便宜,只需 400 美元。

因此,对于这个问题的 Arduino 倡导响应者,我将是第二或第三。如果您需要帮助,那里有一个地狱般的社区可以为您提供支持。如果您需要外围硬件,请在谷歌上查找“Arduino Shields”并感到惊讶——您可以做任何事情,从控制伺服电机到使用正确的屏蔽组合跳上 802.11 无线网络。没有一些练习时间来学习 C 是不切实际的(指针说什么!?),但是您可以立即开始编写 Arduino 草图……您还可以获得大约 30 美元的“真正的”Arduino 平台和克隆(例如 RBBB 或DorkBoard) 价格低于 15 美元。