Arduino 与 Java

开博第一篇,先写一点我现在感兴趣的东西:arduino 与 jvm

    一直想在软件世界之外做点硬件的研究。最近对开源硬件arduino生产了兴趣,搭了一些实验系统,也用c++写了一些简单的程序。虽然对于程序员来说,应该不拘泥于使用何种语言,但必竟java还是我最熟悉的语言,于是就有了一个想法,可不可以在arduino芯片上执行java代码?

    首先,当然网上找现成的,找到一个项目NanoVM,一个可以在Atmega8芯片上用的jvm,但是有几点要改造,一是NanoVM是以引导程序bootloader方式烧录的,必然会和arduino本身的引导程序生产冲突。二是NanoVM的class文件需要保存在eeprom里,只有1k的空间,完全不够使用。

    如果不想自己去改NanoVM的代码,那只有自己开发一途,正好我一直要找一个项目去深入研究一下jvm的机制,两个目的不谋而和,就算不成功,也可以在这两个领域积累不少经验。

    要达成在arduino上执行java代码有三种方法:一是解释执行,我有成功写过java解释器,但是要在单片机的环境下写java解释器,资源不够是一个大问题,所以基本不考虑。二是把java代码翻译成c++代码再用gcc编译,这似乎是一个可行的办法。三是和NanoVM一样,写一个微型的jvm执行class里的byte code。

    暂时决定采用第三种方法,自己DIY JVM。

    现在正在做的事情:

    1. 看JVM规范,学习class文件的结构,以及程序操作码的执行过程

    2. 通过javacc定义和解析ClassFile结构,自动生成读取class文件的代码(Java代码)

    目标要做到的事情:

    3. 在PC的java平台实现自己的jvm执行class文件中的程序代码

    4. 将读取class文件和jvm移植到arduino的c++平台上

    5. 将一些arduino的库通过java实现一份

    6. 将class文件保存在sd卡供jvm读取

    7. 考虑在sd上实现虚似内存以弥补芯片的内存不足

现在就想到这么多,先写这些,能不能做到还不好说,过程愉快足矣。

PS. 在看《Java虚拟机规范(Java SE 7)》的过程中,意外发现其中一名译者@langyu竟然是以前土豆的同事,哈哈,这也是激起我开这个博客的直接动力

相关推荐