如何将Java嵌入微控制器?

时间:2013-07-02 01:23:00

标签: java c embed microcontroller

我有一个微控制器,当一个事件发生时,我希望它发送一封电子邮件。我知道如何在Java中使用电子邮件,但是如何将Java代码放在微控制器的C代码中呢?

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB |= 1 << PINB0; // = 0b00000001
DDRB &= ~(1 << PINB1);
PORTB |= 1 << PINB1;
DDRB |= 1 << PINB2;

while(1)
{
    PORTB ^= 1 << PINB0;
    if(bit_is_clear(PINB, 1)){
        PORTB &= ~(1 << PINB2);
        _delay_ms(100); //SLOW
    }           
    else{
        _delay_ms(10); //FAST
        /////I want the Java code in here/////

        PORTB ^= 1 << PINB2;
    }
}
}   

修改

我正在使用Atmel Atmega8A微控制器。我正在制作一个简单的报警系统,如果B1针的电线断开,我想收到一封电子邮件或短信通知。

而且我只是一个高中生的新手,所以请不要过分夸大我的脑袋......

哦,如果有人可以在C中为我做多线程,那会很好。我来自Java背景,因为这是他们在高中教的。

6 个答案:

答案 0 :(得分:6)

你的“问题”是将Java嵌入到你的AVR ......但你真正想要的是发送电子邮件。有一些实现运行Java字节码(或者至少我认为是这样),但我相信 none 这些将能够发送电子邮件。

您需要了解AVR的功能非常有限。要发送电子邮件,您的设置将需要使用TCP / IP连接到Internet 。使用ATmega8A本身无法实现的复杂功能。 可能可以找到可以通过UART进行通信以便发送电子邮件的硬件,或者您只需将其挂接到PC并运行应用程序以收听COM端口并发送电子邮件,或者......无论如何你需要额外的硬件

您可能希望查看其他微控制器。我相信有一些网络支持,但它们可能会非常昂贵。或者,您可以改为使用Raspberry Pi。

答案 1 :(得分:1)

Java和C 非常非常不同的语言。

您需要为支持Java的微控制器找到一个编译器。

但是,如果你的控制器可以通过GCC编译C,那么使用GCJ可能会对目标平台上的某些内存限制起作用。您需要生成具有正确架构的目标文件,并使用与微控制器兼容的gcc链接它。

不值得花时间 。我建议用C语言实现它。

此外,打开文件和套接字可能不会发生,因为微控制器通常不提供超出硬件访问某些方面的任何内核例程。 libc也可能缺席或极少。

您可能也没有网络硬件。如果您能告诉我们哪个微控制器,我们可以提供帮助。

答案 2 :(得分:1)

Alvin Wong已经提出了一个更直接的问题答案,但我觉得你的问题是如此失焦,以至于帮助你重新聚焦它可能会很好。

当您从Java程序发送邮件时,您应该开始了解实际发生的事情,然后了解微控制器实际可以完成哪些部分,以及如何实现。

那么,当您运行发送邮件的Java程序时会发生什么?

  1. 您使用Java语言编写了程序,该程序被编译成Java字节码,由Java虚拟机解释,它将调用Java运行时提供的一些库,
  2. 将(可能间接地)启动“网络通信”,它将利用操作系统网络设施,......
  3. 将使用网络硬件,
  4. 使用某种邮件协议与邮件服务器通信,并向其发送一些特定的字节序列,以使其了解正在向某人发送邮件。
  5. (1)部分由Java平台的所有层调解。 (请记住:Java不仅仅是一种语言) (2)是Java平台下的一个层(或几个),包括所有的操作系​​统(Windows,Linux,Mac OS X,等等)。
    (3)是由您的硬件组成的一个层,其中包括其他子层,例如网卡中的固件,这些软件可能会管理以太网/ Wifi协议的详细信息。
    (4)层在某些通信通道(以太网,WiFi,无论如何)中都可以打开和关闭位和字节。

    现在,您的微控制器可以完成哪些部分? 微控制器位于(3)的下半部分。在您的情况下,Atmega甚至没有任何网络硬件支持,所以......我不知道您打算如何连接到网络。无论如何,即使你拥有它,你仍然非常接近(4),宁愿疯狂地尝试去(1)(1)对大象说,(4)可以由蚂蚁完成,微控制器大小与瓢虫大小相同,指的是Atmel的吉祥物:P。

    所以:停止像大象一样思考。因为它是你必须努力达到你的目标,但如果你采取大象的方式,你可能会做大量不必要的工作 - 如果它可以完成,我怀疑。

    (如果我不得不采取大象的方式,即在AVR中使用Java,我将首先考虑GCJ或LLVM选项。我知道已经做了一些工作来将极简主义JVM移植到8位微控制器上十年前,但不知道这是如何演变的)

答案 3 :(得分:1)

像其他人说的那样,以这种方式发送电子邮件实际上远非你的微观(我假设你主要想发送邮件,而不是在那里运行Java VM)。要获取邮件,您需要使用TCP / IP连接到Internet,然后使用SMTP协议,您可以实现此目的。

有问题的部分是连接到互联网。为此,您需要将设备置于“合适的线路”上,通常是以太网,但也可能存在基于无线电的解决方案。然后,您必须实现在该线路上进行通信所需的一切(整个网络堆栈直到TCP / IP)。这无法合理地完成。一种方法是使用具有一些内置以太网连接的微型计算机,例如lwipContiki,根据您的偏好来实现魔术。另一种方法是使用额外的硬件为你做这件事,例如this Moxa product,但你可能无法在此实现SMTP。

然后,您将“仅”需要实施合适的SMTP (Simple Mail Transfer Protocol)图层来正确发送您的邮件(我上面提到的一个或另一个解决方案可能已经为您提供此服务)。

答案 4 :(得分:0)

您的微控制器需要支持JDK或Java ME(可能是Sun SPOT)。 http://www.inonit.com/cygwin/jni/invocationApi/c.html有一个使用JNI启动JVM并调用您的类的示例。

答案 5 :(得分:0)

微控制器通常是在C环境中开发的,因为在微控制器中硬件功率方面的资源有限。使用C是因为它允许最大的灵活性并允许微调,因为在微控制器环境中实时计算机是非常必要的。这并不是说,微控制器世界中使用了java。虽然非常复杂,android运行在一些java上,在最低端可能使用ARM处理器(由你来决定你是否真的想要称之为微控制器)。总而言之,是的,我建议你学习C.如果你真的想要用java方式,我个人没有遇到很多允许你在AVR微控制器上使用java的资源。这可能是可能的,但预计性能会受到打击。

如果您没有微控制器方面的经验,我建议您研究一下Arduino(arduino.cc)。

祝你好运!

相关问题