带有Java API的微控制器


10

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

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

您能建议我一个支持Java的8位微控制器吗?

PS。我不了解C,并且我对微处理器编程没有经验。


28
假设有人在卖一条大飘浮的裙子和一些长杆,他们说您可以和汽车一起在湖上钓鱼。经过三天的艰苦努力,您可以将车停到湖中约15英尺远,然后汽车才能下沉并下沉。你会很生气的。您已经带着漂亮的独木舟走过当地的船屋。独木舟是Micro的C编译器,而带有棍棒的漂浮汽车是8位微控制器上的Java。幸运的是,这没有发生……您是在问我们哪里可以找到花车。因此,作为您的父亲,让我说:“您在想什么?!乘独木舟!”
darron 2010年

6
我无法用棍棒想象漂浮的裙子车。你有照片吗?
endlith 2010年

8
@darron-那不应该是big_floating_skirt实现包中boat接口的对象吗?还有那些我现在不记得的奇怪的继承模式的对象(但在UML中有明确描述)?org.buoyantpolejava.net
凯文·维米尔

2
@sterz:我认为在没有微处理器背景的情况下,您可能没有意识到Java在8位微型计算机上的实际位置是多么地不合理。抱歉,如果我的第一句话听起来刺耳,...一个简单的“不要那样做”似乎太虚弱了。
darron 2010年

1
@darron:感谢“用大炮射击鸟”的类比
sterz 2010年

Answers:


32

如果您对微处理器/微控制器编程领域没有经验,那么您可能应该首先学习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的硬件。请参阅Oracle的此页面以获取运行嵌入式JVM所需的一些规格,他们在讨论的FAQ中建议至少32MB的RAM和32MB的Flash。这大约是您要查看的AVR的RAM的32,000倍和Flash的1,000倍。Oracle的Java Embedded Intro页面详细介绍了JVM的限制。您可能会猜到,他们的语气比我的Java更友好。请注意,这种硬件比8位AVR设计起来困难得多。

我是计算机工程专业的计算机工程专业的学生。我大学的CS系喝醉了Java Kool-aid,因此工程程序中的许多学生都只知道Java(这对程序员来说是一种可悲的状况,如果您不这样做,至少要学习一些Python或C ++)想学习C ...),所以我的一位教授为具有一年Java经验的学生发布了C作弊表。只有75页;我建议您先阅读或略读它,然后再做决定。我认为,C是开发嵌入式项目的最有效,持久和专业的语言。

可以考虑的另一种选择是Arduino框架。它使用了简化版Wiring语言,就像没有对象或标头的C ++。它可以在许多AVR芯片上运行,绝对不限于它们的硬件。这将使您比直接跳入C语言更容易学习。

最后,
XKCD金锤
Alt文字:我花了五次试图找到合适的那只,但最后我还是设法挽救了我们的夜晚-如果不是船的话。


5
我曾经喜欢过的最喜欢的漫画之一。
Kortuk

1
嗯,很酷的助手。+1
tyblu

我想知道JVM与几十年前可用的“ Java iButton”相比如何吗?
超级猫

@kevin“ C备忘单”链接不起作用!请更新!
charansai

6

Atmel AVR最受欢迎的编程环境是Arduino。Arduino语言是C ++的子集。

语法上,Arduino“草图” /程序看起来与Java非常相似。Arduino衍生的接线语言具有C ++(Arduino),Java(Processing)和Javascript(processing.js)的实现。

两种语言在Algol68中具有相同的血统,因此它们具有相同的声明样式,循环结构和算术运算符。通常,Arduino中的所有对象都在全局或堆栈上声明,因此像Java一样,成员函数由.运算符调用(例如LED.flash())。

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

这是API

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


3
更准确地说,它是(最有可能)是最受业余爱好者欢迎的编程环境,但不一定适用于所有AVR开发人员。
pfyon 2010年

2
我断言Arduino在用户数量上最受欢迎,但在包含Arduino固件的产品单元数量上却不是。那里有很多 Arduino用户
Toby Jaffey 2010年

1
尽管编译了“草图”,但使用C或汇编语言可以大大提高IO访问速度。
tyblu

1
C ++和Java在我看来非常不同。(“ Arduino” 只是 C ++,具有一些奇怪的包含结构来隐藏一些技术位。)
Nick T

2
@Jason S“ Arduino“草图” /程序看起来与Java非常相似”
Toby Jaffey

4

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


4

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

因此,我将成为针对该问题的Arduino倡导响应者的第二或第三位。如果您需要帮助,有一个社区的地狱可以为您提供支持。并且,如果您需要外围硬件,请在Google上查找“ Arduino Shields”,并感到惊讶-您可以执行任何操作,从控制伺服电机到使用正确的屏蔽组合跳至802.11无线网络。没有一些练习时间来学习C(指针说什么!?)是不切实际的,但是您可以很快就开始编写Arduino草图了。您还可以在30美元左右获得“真正的” Arduino平台并进行克隆(例如RBBB或DorkBoard)的价格不到15美元。


啊,是的,我两年前在Maker Faire上看到了!很酷的设备。
戴夫

SunSpots的杀手级功能不是Java,而是内置的无线功能,允许它们彼此通信。如果您想彼此了解或与家庭进行轻松的无线通信,那非常好。
托尔比约恩Ravn的安徒生


2

Ajile系统制造各种本地嵌入式,实时Java芯片和评估板。

他们运行裸机Java。非常愉快。

www.ajile.com制造芯片和评估板。

www.systronix.com出售各种嵌入式Java硬件。

我已经使用ajile的AJ-100进行苛刻的工作,它们非常好用。不,它们不像avr便宜,但是它们像低端奔腾一样处理数据。

Ajiles的芯片可在1微秒内响应中断(中断等待时间)。


“永远不要在嵌入式C系统上这样做” 做什么?1个延迟?高速?几乎不。我认为您会忘记1GHz + DSP,许多ARM和许多其他产品。很多人只使用裸机C(没有OS等)来编写这些代码。我将为您提供这种类型的东西是在嵌入式(在完整的Linux规模的OS之外)中使用Java的一种半途而废的方法。尽管快速浏览了Systronix之后,我会说您似乎正在为此付出代价。如此高的溢价带来了一点便利。我肯定会去嵌入式ARM。而且,到Systronix的那些项目的许多链接都已失效。
darron

哦,TINI发疯了。在8051上的ROM中的JVM。当我想要简单的以太网时,我愚蠢地尝试了一种方法,甚至在C语言中,这种情况也被普通公司LAN的广播流量所淹没。如果他们像Parallax的Basic Stamps一样销售产品,那将是一个很好的产品,但事实并非如此。它不适合任何非爱好者目的。
darron 2010年

1
这些芯片的运行频率为几百兆赫兹。在比这些设备慢100倍的处理器上以C语言编程时,可能会产生1uS的延迟。您可以使用等效的处理器来做一些很酷的事情(例如iPad和Droid手机),但是在问题中,将其发布为8位AVR的替代品并不是一件容易的事。
凯文·维米尔

@reemrevnivek:考虑到OP需要Java,我认为Ajile部分是合适的,因为它是运行嵌入式Java(在完整的Linux OS或其他系统之外)的唯一合理方法之一。如果最后一段和TSTIK位不存在,我什至会投票赞成。
darron

2

我的个人经验是,使用AVR进行编程和入门的C代码非常容易,我也来自多年的Java工作,在使用arduino草图大约2个月后,我放弃了环境,转而使用avr-gcc,站点像avrfreaks一样,很容易找到常见问题的答案。(我仍然在我值得信赖的Arduino Duemillenove上做所有事情)

使用eclipse进行编译和“部署”,即写入芯片,也很好,因为我不必处理另一个IDE

我认为实际上要比编程语言本身更难理解寄存器,16位寄存器并以适当的顺序(中断,定时器,硬件PWM)读取它们。


1

虽然我通常属于“学习C语言并了解处理器实际做什么”的阵营,但它要指出的是嵌入式工作,但值得指出的是,小臂芯片并不比AVR贵那么多,而且价格合理在jvm上处理简单任务的位置。


1

NanoVM是一种Java虚拟机,旨在在8位AVR微控制器上运行。

(来自主页)

它不是功能齐全的Java VM,并且永远不会。它将始终限于Java语言和标准Java库的一小部分,以及一些特定于应用程序的方法。此外,这并不意味着取代C作为对微控制器进行编程的标准方法。与C或汇编程序相比,它的灵活性较差且性能较低。

NanoVM是一种为基于微控制器的设备提供有限但可控制的编程接口的方法。由于大多数特定于硬件的代码都是NanoVM本身的一部分,因此用户可以专注于应用程序本身。如果为用户提供了配备NanoVM的设备,则无需考虑硬件本身。此外,他不需要任何特定于目标的编译器等。他需要的只是一个标准的Java编译器和NanoVMTool,它本身是用Java编写的。因此,整个开发链可在具有Java编译器并可以运行Java代码的任何设备上工作。借助NanoVM提供的硬件抽象,用户甚至不必在乎目标所基于的微控制器类型。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.