搜索
bottom↓
回复: 238

NanoVM——AVR上的JAVA虚拟机 重量级酷贴

[复制链接]

出0入0汤圆

发表于 2007-11-26 13:53:59 | 显示全部楼层 |阅读模式
我不大会写文章,首先还是请大家见谅  : )

前言
大约两年前,我在这里看到有个帖子介绍一个叫做NanoVM(http://www.harbaum.org/till/nanovm/)的项目,它是在AVR上实现了一个简单的JAVA虚拟机。由于我对JAVA很感兴趣,所以极度关注。于是我啃了半个月的馒头,省下一百多的生活费,在OurAvr上买了套M16的最小系统板,正式宣告向JAVA更深领域进军!沮丧的是,我那时才接触到单片机,根本搞不清东南西北,直接死在Make前面,横尸遍野……当然我的热情丝毫未见减,经过一个多月的摸索,对AVR的开发流程和方法有了一个整体的了解,已经能成功的编译出来了!立即下了个自带的LcdDemo进去,哇,成功的运行起来了,虽然显示位置上有些错误,但还是让我兴奋得一夜未眠。什么?让我接着在这上面接着搞开发?别搞笑了,我连它的代码都看不懂,怎么驾驭它呢?
时光飞逝,这两年期间,积累了很多。特别是一年前搞(抄袭?)了叫做JOP(Java优化处理器)的项目,它直接用FPGA搭建了一个JAVA处理器,直接处理JAVA指令码,JAVA Virtual Machine在这应该叫JAVA Real Machine了吧,哈哈~这个项目让我对JAVA虚拟机有了非常理性的认识。还有今年,项目需要,我在ARM9+Linux的环境下,移植了JVM,这有让我对从另一个侧面学习到了JAVA虚拟机的实现,此外让我和Linux有了近距离的接触。
闲下来了一个星期,重拾NanoVM,有了两年的积累,现在看NanoVM格外亲切(汗……),把它的源文件看了一遍,作者(Till Harbaum)功力不浅,它他的代码相当舒服。好,说干就干,我为NanoVM增加了DS1302的本地方法,功夫不负有心人,熬了个通宵,终于成功了……

What is JAVA?
JAVA对大家来说,只不过是一门高级编程语言(Programming Language),但这并不是JAVA的全部,JAVA之所以优秀的原因,是因为它有一个强大的虚拟机支持。好似JAVA虚拟机是根,JAVA编程语言是叶,根繁才能叶茂;而对于大树下乘凉的人来说叶茂就行,而我更愿意把土刨开,看看它的根。本文研究的重点,也是JAVA虚拟机的实现。

What is NanoVM?
首先请大家明确,不同于C或Basic等,NanoVM不是一个JAVA编译器!我们还是用SUN提供的标准的编译器javac,但我们要让生成.class文件在AVR中运行!
大家回想一下为什么JAVA号称“一处编译,到处运行”?这是因为编译出来的文件是对应于JAVA虚拟机的,和各不同的处理器无关,只有在这个处理器上实现JAVA虚拟机,那么这个JAVA程序就能运行。JAVA虚拟机的作用相当于际时链接.class文件。JAVA就不存在像ARM那样交叉编译的概念了。NanoVM的目的正是于此,让跨平台的JAVA跨到AVR上。
当然JAVA虚拟机的设计是按32位或64位处理器来的,AVR的资源实在有限,不能完整实现JAVA虚拟机规范,实际使用的可行性也不大。我觉得它的意义不在于此,它让我们从AVR对角度认识JAVA虚拟机的实现机制。

NanoVM的运行
不同于一般,我们编程(Java)所生成的程序不下到Flash Rom里,而是下到了EEPROM中。那Flash里的是什么呢?这肯定是JAVA虚拟机(即NanoVM)了,上电后JAVA虚拟机开始运行,读取EEPROM中的JAVA程序并且执行。这看似繁琐的过程也是JAVA虚拟机魅力所在。借个官方的图说明这个问题。

但正如上所述,AVR的资源不足,所以EEPROM保存的并不是.class文件。这又是问什么呢?这需要读者对class文件结构有一定了解。class文件不仅仅包含了JAVA虚拟机的指令码,更多的是譬如JAVA虚拟机版本号、各种常量(如类名方法名等等)和、超类(父类)、接口(Interfaces)、字段(fields)和变量(attributes)等等信息,一个完整的JAVA程序是由多个class文件构成的,AVR的EEPROM中不可能构建一个文件系统,所以把各个class文件结合在一起(这个过程称之为装载和连接)生成最终JAVA虚拟机指令码的工作只能交给有文件系统的OS(Windows?Linux?)来完成,NanoVM中有个专门的工具叫NanoVMTool担以此任。NanoVMTool同样是用JAVA写的,你能在Windows或Linux(或……)下应用自如。

实例
我不是光说不练的那种人(!),下面就引领大家在AVR上运行第一个JAVA程序。
1.安装JDK
废话,搞JAVA开发不安装JAVA开发环境怎么行!你可以到官网(java.sun.com)下个j2se的开发包,嫌速度慢的话可以到各大软件站下载,这东西遍地都是……NanoVM虽然没对JAVA版本有要求,但还是建议用J2SE 1.4的版本,J2SE 1.4比较稳定,最新的J2SE 5和J2SE 6在JAVA语法、class文件结构和AVA虚拟机有细微的变动。似乎NanoVM还没跟上这些变动,当然NanoVM也不对这些变动敏感(哪那么多废话,骗稿费啊,找扁!)。
2.下载NanoVM(已上传)
你可以从sourceforge(http://sourceforge.net/project/showfiles.php?group_id=181239&package_id=209853)下载最新的代码,源码包中有编译好的.hex文件,你不想自己编译的话可以直接用。
3.安装rxtx(已上传)
我们要通过NanoVMTool用串口把我们的JAVA程序下到AVR的EEPROM中(你也可以使用ISP等方式下载,只是我觉得有些麻烦),出于安全性和跨平台的考虑,JAVA是不能直接访问硬件的,但SUN对此定义了标准,由一个叫RXTX(http://www.rxtx.org/)的组织实现,大家可以根据里面Readme中的说明安装,就拷贝几个文件,这里从略。
4.HelloWorld
写一个最简单的Hello.java:
import nanovm.io.*;
import nanovm.avr.*;
class HelloWorld {
  public static void main(String[] args) {
    //向串口写"Hello World!"
    System.out.println("Hello World!");
   
    //向LCD写"Hello World!"。如果你编译NanoVM时在config.h
    //中配置了LCD的话,否则会抛出异常,请去掉下面语句
    Lcd.clear();
    Lcd.gotoYX(0, 0);
    Lcd.print("Hello World!");
  }
}
把它保存在java\examples\目录下,以方便使用。
5.编译NanoVM
在NanoVM的vm\build\下有不同处理器的编译脚本(Makefile),如avr_mega32_lcd、avr_mega8和avr_mega168等等。这里还有很多以AVR为控制器的(玩具)机器人的脚本,如(乐高的)ctbot和nibo,开来作者更愿意把NanoVM用在玩具机器人上 ^_^
可以把Makefile中的DEFAULT_FILE改成上面Hello,之后make编译,会得到NanoVM.hex和NanoVM_eeprom.hex两个文件,前者是NanoVM虚拟机,下到Flash中,后者是上面所写的JAVA程序,下到EEPROM中。现在就运行吧,有结果没?
6.使用NanoVMTool
当你重新写一个JAVA程序时,是不是用在make一遍?肯定没那么复杂,其实上面make时调用的是NanoVMTool,NanoVMTool能完成装载、连接和下载的功能,你可以运行它来看它的命令帮助。编译还是要交给javac了,如果你还不会编译一个JAVA程序的话,请自行参考相关教程,这里就不展开讲啦。当NanoVMTool装载和连接后,就准备向AVR下载了,把你的AVR通过串口连上PC,重启(复位)AVR,就开始自动下载了,下载完成后自动运行。
此外NanoVM还有Eclips的插件,真正做到集成开发,不用你再敲命令了。

展望
前久坛友推荐的美国以太网比赛,我申请到了套件,准备吧他用到NanoVM之上,实现java.net.*中几个基本的类,再实现javax.servlet.*中的部分类,做一个MiniJSP(Java Server Pages),AVR上跑动态网页服务器,酷吧,哈哈。现在手头上只有M16,空间已经满了,暂告一段落,下步准备用M128(呜呜呜呜,又要啃馒头了),外扩RAM和EEPROM,就该够用了。
如果资源和精力也许的话,我还打算实现java.sql.*,做个MiniBBS。想过OurAvr是架设在AVR上的吗?阿莫下次换服务器时考虑一下我这个天方夜谭的方案吧,搞它十几片AVR单片机做并行处理,慢就慢点,不在乎,玩的就是心跳,酷毙了!

结束语
NanoVM在AVR上实现了一个简单的JAVA虚拟机,对大家理解虚拟机的实现由很大启迪,有兴趣的朋友可以试试,我也在学习探索阶段,大家多多交流,呵呵。
第一次写那么长的东西,估计我毕业论文也不会写那么多。文章从头到尾狗屁不通,希望各路英雄拍砖时手下留情,不要打脸!
最后要感谢我GF对我这两年来休学闭门搞技术的支持;还要感谢OurAvr这个平台,让我学到很多很多……

声明
1.本文作者有对本文进一步修正完善更新的权力。
2.本文首发OurDev.cn,转载务必保持完整性。
3.加酷和回帖一样,是种高尚的美德,哈哈~~~


附:
NanoVM最新公版源代码
点击此处下载nanovm-20070707(文件大小:991K)
rxtx--java串口类
点击此处下载rxtx-2.1-7-bins-r2(文件大小:596K)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2007-11-26 14:03:14 | 显示全部楼层
coooooooooooooooooooool~~

出0入0汤圆

发表于 2007-11-26 14:04:10 | 显示全部楼层
支持一下 楼主
辛苦啦

出0入0汤圆

发表于 2007-11-26 14:09:22 | 显示全部楼层
一个字“牛”!

出0入0汤圆

发表于 2007-11-26 14:19:01 | 显示全部楼层
hackerboygn 湘大臭要饭的

老大有潜水,好几年了.浮出面.就来这么重量级的东东.  牛气冲天.

佩服及感叹啊.  还真应了一句话. 不怕做不到,就怕想不到.  思维延继到那里.那里就可以成来现实.

出0入0汤圆

发表于 2007-11-26 14:36:08 | 显示全部楼层
~牛~就一个字

出0入0汤圆

发表于 2007-11-26 14:40:35 | 显示全部楼层
支持!

出0入4汤圆

发表于 2007-11-26 14:42:14 | 显示全部楼层
hackerboygn的文章棒极了!谢谢你提供这么好的资料,又给我们带来一个好玩的东西。
谢谢你。
头像被屏蔽

出0入0汤圆

发表于 2007-11-26 15:04:26 | 显示全部楼层
加入了 重量级酷贴 这几个字在标题里。

另外一个 atommann 写的 Ada 语言,也会加入 重量级酷贴

出0入0汤圆

发表于 2007-11-26 15:35:17 | 显示全部楼层
牛啊

出0入0汤圆

发表于 2007-11-26 15:51:52 | 显示全部楼层
不顶不行啊 实在是酷、酷、酷.....酷毙了!
头像被屏蔽

出0入0汤圆

发表于 2007-11-26 16:06:24 | 显示全部楼层
呵呵,上次与hackerboygn谈的事,后来就没有下文了。

最新的消息如何? 如果仍可行的话,可以考虑到我们这里工作 :)

出0入0汤圆

发表于 2007-11-26 16:37:58 | 显示全部楼层
哈哈,牛人一个!潜水好久了哈

出0入0汤圆

发表于 2007-11-26 17:11:39 | 显示全部楼层
真是高手云集啊,佩服

出0入0汤圆

发表于 2007-11-26 17:20:42 | 显示全部楼层
Very interesting,不过没时间玩了

出0入0汤圆

发表于 2007-11-26 17:33:47 | 显示全部楼层
hackerboygn 湘大臭要饭的
  一定要留下一个联系方法啊,方便兄弟们向您学习啊。

出0入0汤圆

 楼主| 发表于 2007-11-26 18:01:52 | 显示全部楼层
感谢大家的支持,感谢阿莫的关心!
我现在不用QQ了(256M的内存,一开QQ就……),大家可以通过电邮和我联系,hackerboygn(at)gmail.com,技术交流专用。
NanoVM是个很有意思的东西,感兴趣的朋友可以立即动手试试。我现在在为NanoVM写更多的本地方法支持,比如说DS1302、24CXX、DS18B20等等,晚些时候我希望能NanoVM的作者取得联系,把这些本地方法加入到公版之中;同时我也希望成为NanoVM的代码维护员,进一步完善NanoVM。

乘着这份热乎劲,我晚上整理一下我的ARM移植JAVA的笔记,奉献给大家。保证是最有实际价值的中文资料!

出0入0汤圆

发表于 2007-11-26 18:40:47 | 显示全部楼层
早就有的东西,怎么现在还流行了???
头像被屏蔽

出0入0汤圆

发表于 2007-11-26 19:19:05 | 显示全部楼层
aini即使你是绝尖高手,却不愿与其它人共享,有什么用呢?

已经不是第一次听到aini说这种风凉话了。

出0入0汤圆

发表于 2007-11-26 19:32:52 | 显示全部楼层
学习了,楼主好样的 ~!

出0入0汤圆

发表于 2007-11-26 20:00:56 | 显示全部楼层
支持一下

出0入4汤圆

发表于 2007-11-26 20:56:26 | 显示全部楼层
在楼主提到的网站里(http://www.harbaum.org/till/index.html)有个好漂亮的DIY项目啊!看了这两张图真有动手做一个的冲动。



见http://www.harbaum.org/till/ledmatrix/index.html

出0入0汤圆

发表于 2007-11-26 22:16:11 | 显示全部楼层
好 就一个字。

出0入0汤圆

发表于 2007-11-26 23:07:13 | 显示全部楼层
好帖,顶下先!

出0入0汤圆

发表于 2007-11-26 23:19:21 | 显示全部楼层
谢谢!下来看看!

出0入0汤圆

发表于 2007-11-26 23:27:18 | 显示全部楼层
谢谢楼主分享经验和成果,长了见识,狂顶!

出0入0汤圆

 楼主| 发表于 2007-11-27 08:00:51 | 显示全部楼层
接【21楼】 atommann

那是一个网络控制的LED点阵屏,我当时看到也用做一个的冲动,但是看到这个

我就打消念头了……DIY一个价格不菲啊~

不过还是有很多东西值得学习的,他使用了Procyon AVRlib,M32控制CS8900,还实现了DHCP协议。此外还有Linux下的驱动,是不可多得的好资料。

出0入4汤圆

发表于 2007-11-27 08:09:56 | 显示全部楼层
是啊,这对我来说是个“大玩具”,暂时做不出来。

出0入0汤圆

发表于 2007-11-27 09:09:27 | 显示全部楼层
有些怀旧的“新意”:)

近几年在企业应用领域Java越搞越臃肿,越搞越理论化,一点好感都没有。

不过看着个贴,似乎重拾了Java的本意,也许哪一天真的回归到SUN和James Gosing最初的愿望上去了,呵呵,乐观其成。

出0入0汤圆

发表于 2007-11-27 09:40:52 | 显示全部楼层
留个记号先,以后慢慢学习。
期待楼主的ARM移植JAVA的笔记

出0入0汤圆

发表于 2007-11-27 10:11:08 | 显示全部楼层
2年时间,楼主修成正果拉!!

出0入0汤圆

发表于 2007-11-27 10:15:43 | 显示全部楼层
楼主懂FPGA,ARM,LINUX,JAVA,佩服呀

出0入0汤圆

发表于 2007-11-27 10:17:00 | 显示全部楼层
请问,使用虚拟机会不会带来执行效率的下降,会下降多少??

出0入0汤圆

发表于 2007-11-27 10:26:00 | 显示全部楼层
彪悍

出0入0汤圆

发表于 2007-11-27 10:59:41 | 显示全部楼层
牛人,我一向敬佩有实力的人,我自己是谦虚好学的人.
希望多多向你学习
加快跟进的步伐

出0入0汤圆

发表于 2007-11-27 11:09:15 | 显示全部楼层
我愿意赞助楼主,高脑力劳动的,总不能饿着肚子吧,跟我联系一下:enci@tom.com

出0入0汤圆

 楼主| 发表于 2007-11-27 11:26:40 | 显示全部楼层
to 【28楼】 Cocal
Gosing是我的偶像,他当时创建java语言的初忠就是要有一种软体,就连烤面包机都能不需修改的执行。我正在慢慢逼进他的梦想,哈哈!

to 【32楼】 wswh2o 水之影
About 20k Java opcodes per second on 8 Mhz AVR

to 【35楼】 enci
非常感谢你的好意,我在必要时会和你联系的,敬礼!

出0入0汤圆

发表于 2007-11-27 12:56:11 | 显示全部楼层
JAVA移植到AVR上,楼主好样的
想请教一下楼主,要在AVR单片机上跑JAVA虚拟机最小配置是什么?
是不是M8就可以跑了?

出0入0汤圆

发表于 2007-11-27 13:16:41 | 显示全部楼层
强!!!下载下来试试

出0入0汤圆

 楼主| 发表于 2007-11-27 14:10:33 | 显示全部楼层
to 【37楼】 feng_matrix
M8可以跑!当然也有一些限制,比如不支持浮点数,不支持Math类。

NanoVM可以根据实际需要裁剪的。
doc\schematics\下有M8测试的电路图。

出0入0汤圆

 楼主| 发表于 2007-11-27 14:34:32 | 显示全部楼层
to 【29楼】 shaoshunda
我的“ARM下的JAVA虚拟机移植”已上传,请见
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=858849&bbs_page_no=1&bbs_id=9999

谢谢支持!

出0入0汤圆

发表于 2007-11-27 16:14:38 | 显示全部楼层
cool!如果弄个JAVA游戏上去,可以运行的吧?

出0入0汤圆

 楼主| 发表于 2007-11-27 20:57:45 | 显示全部楼层
暂时还不能直接运行手机_游戏,一是没有GUI(图形用户界面),二是它只实现了JAVA最最基本的几个类,还不足以运行游戏。

出0入4汤圆

发表于 2007-11-28 08:37:27 | 显示全部楼层
呵呵,上次与hackerboygn谈的事,后来就没有下文了。

最新的消息如何? 如果仍可行的话,可以考虑到我们这里工作 :)

阿莫眼红了,想挖角。被洪七公看到了肯定要给你一记降龙十八掌

出0入0汤圆

 楼主| 发表于 2007-11-28 09:58:39 | 显示全部楼层
楼上的误会了,是我那是退学在即,走头无路,主动和阿莫联系的。
现在代表学校参加挑战杯,学校还冠冕堂皇的整个什么“榜样力量”芙蓉王奖学金给我,弄得我是走是走不掉,毕业是毕业不了,进退两难啊。实在不行,我卷卷铺盖,投奔阿莫了!

出0入0汤圆

发表于 2007-11-28 10:44:17 | 显示全部楼层
没成功:)
不会make,不知道怎么make,path不知道怎么设置
晕,NanoVMTool.jar也不知道怎么使用
o就是一个javaBC

出0入0汤圆

 楼主| 发表于 2007-11-28 12:24:17 | 显示全部楼层
首先确保javac.exe在系统环境变量中,在行命令下执行javac.exe命令有效。javac.exe是JAVA的编译器,集成在JDK中,默认安装路径是C:\Program Files\Java\jdk1.x.x\bin\,然后切换到如\vm\build\avr_mega32_lcd\下,直接make,一般不会有错的。

出0入0汤圆

发表于 2007-11-28 12:53:01 | 显示全部楼层
hehe,下面是我的操作步骤:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\enci>javac
Usage: javac <options> <source files>
where possible options include:
  -g                        Generate all debugging info
  -g:none                   Generate no debugging info
  -g:{lines,vars,source}    Generate only some debugging info
  -nowarn                   Generate no warnings
  -verbose                  Output messages about what the compiler is
  -deprecation              Output source locations where deprecated A
ed
  -classpath <path>         Specify where to find user class files
  -sourcepath <path>        Specify where to find input source files
  -bootclasspath <path>     Override location of bootstrap class files
  -extdirs <dirs>           Override location of installed extensions
  -d <directory>            Specify where to place generated class fil
  -encoding <encoding>      Specify character encoding used by source
  -source <release>         Provide source compatibility with specifie
  -target <release>         Generate class files for specific VM versi
  -help                     Print a synopsis of standard options

//到这儿应该是java编译环境没问题了
//Path也做了设置
C:\Documents and Settings\enci>cd ../..

C:\>d:

D:\>cd D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\avr_mega3
//切换到编译目录
D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\avr_mega32_lcd>make
MAKE Version 5.2  Copyright (c) 1987, 1998 Inprise Corp.
Error makefile 27: Command syntax error
Error makefile 28: Command syntax error
Error makefile 35: Command syntax error
Error makefile 38: Command syntax error
Error makefile 64: Command syntax error
*** 5 errors during make ***
//报错内容
D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\avr_mega32_lcd>

出0入0汤圆

 楼主| 发表于 2007-11-28 13:17:00 | 显示全部楼层
to 【47楼】 enci

估计你装了Borland吧,“MAKE Version 5.2  Copyright (c) 1987, 1998 Inprise Corp.”说明你使用的不是GNU的make.exe,也自然不是WinAVR了。
确保执行make -v输出
  GNU Make 3.XX
  Copyright (C) 2006  Free Software Foundation, Inc.
  …………………………………………………………
保险起见在试试avr-gcc -v,输出
  …………………………………………………………
  Target: avr
  …………………………………………………………
  gcc version 4.X.X (WinAVR 200XXXXX)

出0入0汤圆

发表于 2007-11-28 13:58:54 | 显示全部楼层
“搞它十几片AVR单片机做并行处理,慢就慢点,不在乎,玩的就是心跳,酷毙了!”

赞!!!

出0入0汤圆

发表于 2007-11-28 14:27:17 | 显示全部楼层
谢谢hackerboygn,终于可以编译通过,我是装了Delphi7,
make avr_mega8没有问题,
但是make avr_mega32_lcd的时候有报错:
D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\avr_mega32_lcd>make
makefile:63: NanoVM.d: No such file or directory
makefile:63: nvmfile.d: No such file or directory
javac -classpath ../../../java:../../../java/examples ../../../java/examples/Lcd
Demo.java
../../../java/examples/LcdDemo.java:5: package nanovm.io does not exist
import nanovm.io.*;
^
../../../java/examples/LcdDemo.java:6: package nanovm.avr does not exist
import nanovm.avr.*;
^
../../../java/examples/LcdDemo.java:15: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
    Lcd.clear();
    ^
../../../java/examples/LcdDemo.java:18: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
    Lcd.gotoYX(0, 0);
    ^
../../../java/examples/LcdDemo.java:19: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
    Lcd.print("Hallo Java-Welt!");
    ^
../../../java/examples/LcdDemo.java:22: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
    Lcd.gotoYX(1, 0);
    ^
../../../java/examples/LcdDemo.java:23: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
    Lcd.print("Rnd xxxxx Cnt xxxxx");
    ^
../../../java/examples/LcdDemo.java:28: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
      Lcd.gotoYX(1, 4);
      ^
../../../java/examples/LcdDemo.java:29: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
      Lcd.print("     ");
      ^
../../../java/examples/LcdDemo.java:30: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
      Lcd.gotoYX(1, 14);
      ^
../../../java/examples/LcdDemo.java:31: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
      Lcd.print("     ");
      ^
../../../java/examples/LcdDemo.java:33: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
      Lcd.gotoYX(1, 4);
      ^
../../../java/examples/LcdDemo.java:34: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
      Lcd.print(rnd++);
      ^
../../../java/examples/LcdDemo.java:38: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
        Lcd.gotoYX(1, 14);
        ^
../../../java/examples/LcdDemo.java:39: cannot resolve symbol
symbol  : variable Lcd
location: class LcdDemo
        Lcd.print(cnt);
        ^
../../../java/examples/LcdDemo.java:42: cannot resolve symbol
symbol  : variable Timer
location: class LcdDemo
        Timer.wait(10);
        ^
16 errors
make: *** [nvmdefault.h] Error 1

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\avr_mega32_lcd>

出0入0汤圆

 楼主| 发表于 2007-11-28 15:04:46 | 显示全部楼层
用我的Makefile试试,替换到\vm\src\下
点击此处下载Makefile.rar(文件大小:631字节)

出0入0汤圆

发表于 2007-11-28 16:18:56 | 显示全部楼层
谢谢先!

出0入0汤圆

发表于 2007-11-28 16:30:25 | 显示全部楼层
用新给的Makefile报错:
D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\avr_mega32_lcd>make
makefile:63: NanoVM.d: No such file or directory
makefile:63: nvmfile.d: No such file or directory
makefile:63: native_rtc.d: No such file or directory
make: *** No rule to make target `native_rtc.d'.  Stop.

又用hackerboygn给的编译avr_mega8,也报错了,make: *** No rule to make target `native_rtc.d'.  Stop.
看来,原来的Makefile是没问题的。问题不是出在Makefile

出0入0汤圆

 楼主| 发表于 2007-11-28 17:32:54 | 显示全部楼层
我晕,用这个,不行你打我屁股!
点击此处下载新版Makefile.rar(文件大小:629字节)

是Makefile的问题,javac的classpath没配好。上面那个Makefile被我增加了些本地方法,用来编译公版的肯定不行。

出0入0汤圆

发表于 2007-11-28 17:55:36 | 显示全部楼层
还是有问题啊,javac的classpath配好了.
E:\yly\javaavr\nanovm-20070707\nanovm\vm\build\avr_mega32_lcd>make
make: *** No rule to make target `/java/examples/.java', needed by `nvmdefault.h
'.  Stop.

E:\yly\javaavr\nanovm-20070707\nanovm\vm\build\avr_mega32_lcd>javac
Usage: javac <options> <source files>
where possible options include:
  -g                        Generate all debugging info
  -g:none                   Generate no debugging info
  -g:{lines,vars,source}    Generate only some debugging info
  -nowarn                   Generate no warnings
  -verbose                  Output messages about what the compiler is doing
  -deprecation              Output source locations where deprecated APIs are us
ed
  -classpath <path>         Specify where to find user class files
  -sourcepath <path>        Specify where to find input source files
  -bootclasspath <path>     Override location of bootstrap class files
  -extdirs <dirs>           Override location of installed extensions
  -d <directory>            Specify where to place generated class files
  -encoding <encoding>      Specify character encoding used by source files
  -source <release>         Provide source compatibility with specified release
  -target <release>         Generate class files for specific VM version
  -help                     Print a synopsis of standard options

出0入0汤圆

 楼主| 发表于 2007-11-28 18:27:17 | 显示全部楼层
No rule to make target `/java/examples/.java'
而/vm/src/Makefile中对应的是$(ROOT_DIR)/java/examples/$(DEFAULT_FILE).java,说明变量ROOT_DIR和DEFAULT_FILE为空,但ROOT_DIR和DEFAULT_FILE已经在vm/build/avr_mega32_lcd/Makefile定义
DEFAULT_FILE = LcdDemo
ROOT_DIR = ../../..

按理来讲没问题了,删除所有.o、.d和.class重新make一次。

出0入0汤圆

 楼主| 发表于 2007-11-28 18:36:15 | 显示全部楼层
还是不行就把原来的文件彻底删掉,用这个
点击此处下载NanoVM
刚刚测试过没有任何问题。

出0入0汤圆

发表于 2007-11-29 08:44:56 | 显示全部楼层
谢谢hackerboygn,
让我感动

出0入0汤圆

发表于 2007-11-29 08:55:01 | 显示全部楼层
54楼提供的Makefile编译通过!

出0入0汤圆

发表于 2007-11-29 09:01:04 | 显示全部楼层
编译楼主提供的Hello.java通过!

出0入0汤圆

发表于 2007-11-29 09:01:19 | 显示全部楼层
为何我的总是出问题,
makefile:63: NanoVM.d: No such file or directory
makefile:63: nvmfile.d: No such file or directory
javac -classpath ../../../java ../../../java/examples/Rot13.java
java -jar ../../../tool/NanoVMTool.jar -c -f nvmdefault.h ../../../tool/config/M
ega8.config ../../../java/examples Rot13
Exception in thread "main" java.lang.UnsupportedClassVersionError: NanoVMTool (U
nsupported major.minor version 49.0)
        at java.lang.ClassLoader.defineClass0(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
make: *** [nvmdefault.h] Error 1

出0入0汤圆

发表于 2007-11-29 09:06:47 | 显示全部楼层
makefile:63: NanoVM.d: No such file or directory
makefile:63: nvmfile.d: No such file or directory
这个问题我也出现了,按56楼提供的方法,好像应该修改Makefile里面的路径

出0入0汤圆

 楼主| 发表于 2007-11-29 10:10:34 | 显示全部楼层
to 【61楼】 xzyyly
看了半天终于找到你的问题了。
Exception in thread "main" java.lang.UnsupportedClassVersionErrorNanoVMTool (Unsupported major.minor version 49.0)。
不支持你的Class文件版本,真奇怪,JAVA 1.4的版本号是48,JAVA 1.5的是50,这49是哪个版本啊?
换J2SE 1.4试试,不想换的话改下/vm/src/Makefile试试,把
……
nvmdefault.h: $(ROOT_DIR)/java/examples/$(DEFAULT_FILE).java
        javac -classpath ……
……
改为
……
nvmdefault.h: $(ROOT_DIR)/java/examples/$(DEFAULT_FILE).java
        javac -source 1.4 -target 1.4 -classpath $(ROOT_DIR)/java $(ROOT_DIR)/java/examples/$(DEFAULT_FILE).java
……
强行指定生成1.4版本的。

出0入0汤圆

 楼主| 发表于 2007-11-29 10:12:46 | 显示全部楼层
to 【60楼】 enci
可在/vm/build/XXX/config.h中配置晶振频率,默认波特率是9600,你应该可以在串口收到数据了吧?

出0入0汤圆

发表于 2007-11-29 10:13:19 | 显示全部楼层
老兄,你做的真好!

出0入0汤圆

发表于 2007-11-29 10:26:02 | 显示全部楼层
HEHE,串口可以收到数据,o(∩_∩)o...

出0入0汤圆

 楼主| 发表于 2007-11-29 12:01:22 | 显示全部楼层
哈哈,恭喜enci,第一个成功的!

此外,可以直接控制IO口,试试下面的程序:


import nanovm.avr.*;

class TestIO{
  public static void main(String[] args) {
    // 串口输出字符串"Test IO"
    System.out.println("Test IO");
    // 显示系统频率
    System.out.println("System clock = " + AVR.getClock() + "000 Hz");

    // PB0设置为输出
    AVR.portB.setOutput(0);

    while(true) {
      //输出高电平
      AVR.portB.setBit(0);
      //延时1s
      Timer.wait(100);
      //输出底电平
      AVR.portB.clrBit(0);
      Timer.wait(100);
    }
  }
}



记得文件要保存成TestIO.java哦,不会编译java的话改Makefile再make一次就成了。

出10入95汤圆

发表于 2007-11-29 13:00:51 | 显示全部楼层
玩不了这么高级的东东,但搂住这个精神很值得学习,顶一个!

出0入0汤圆

发表于 2007-11-29 13:17:54 | 显示全部楼层
TestIO测试通过!
to ddcour,o(∩_∩)o...学习一点java会对这个项目有好处,
o以前学过一段时间的Java,但从来没写过东西,倒是在Nano上用到了,:-)

出0入0汤圆

发表于 2007-11-29 14:07:43 | 显示全部楼层
虽然小弟现在还看不懂什么意思但是看拉这个东西绝对不是简单的,真是佩服。。。。。佩服!!!!!!

    希望以后楼主以后多多指教。。

出0入0汤圆

发表于 2007-11-29 14:34:14 | 显示全部楼层
楼主知道现在实现了JAVA那些最基本的类?能列个清单吗?
是否可发起一个号召,大家一起来完善,做点有意义的事情
关于GUI接口,AVR8位单片机的硬件决定了图形接口不可能做的很大
但不等于没有,可以定义一个标准的点阵设备或LED设备

出0入0汤圆

发表于 2007-11-29 15:38:33 | 显示全部楼层
解压后nanovm\doc\javadoc里有说明吧

出0入0汤圆

发表于 2007-11-29 16:28:43 | 显示全部楼层
hackerboygn能讲讲NanoVMTool的使用方法吗?
-------------------------------------------
6.使用NanoVMTool
当你重新写一个JAVA程序时,是不是用在make一遍?肯定没那么复杂,其实上面make时调用的是NanoVMTool,NanoVMTool能完成装载、连接和下载的功能,你可以运行它来看它的命令帮助。编译还是要交给javac了,如果你还不会编译一个JAVA程序的话,请自行参考相关教程,这里就不展开讲啦。当NanoVMTool装载和连接后,就准备向AVR下载了,把你的AVR通过串口连上PC,重启(复位)AVR,就开始自动下载了,下载完成后自动运行。
---------------------------------------------
readme里面说:
Running NanoVMTool
------------------

NanoVMTool has been tested under Linux, Windows and MacOS. The basic
syntax to call NanoVMTool is:

java -jar NanoVMTool.jar CONFIG CLASSPATH CLASS
========================================================
请问hackerboygn,这里的CONFIG CLASSPATH CLASS在本地机器里都怎么设置?

出0入0汤圆

发表于 2007-11-29 16:54:39 | 显示全部楼层
做个记号。不知道实际做东西能起到什么作用。。
文章不错。。完整详细的。。

出0入0汤圆

发表于 2007-11-29 17:02:22 | 显示全部楼层
顶一下。
JAVA虚拟机方面有没有相关书籍。

出0入0汤圆

发表于 2007-11-29 17:10:05 | 显示全部楼层
辛苦了

出0入0汤圆

 楼主| 发表于 2007-11-29 22:54:38 | 显示全部楼层
工具NanoVMTool使用详解

执行 java -jar NanoVMTool.jar 可得到如下说明

NanoVMTool [options] config classpath class
Options:
    -c        write c header file
    -f name   force output file name
   
其中:
config:                配置文件。指定一个配置文件,一般位于/tool/config下,注意,这个文件必须和你make虚拟机时使用的配置文件一致。如你make虚拟机时使用的是/vm/build/avr_mega8/,打开/vm/build/avr_mega8/Makefile你会看到 CONFIG = Mega8.config ,所以这个你要使用Mega8.config。在配置文件中,定义了本地方法接口,还定义了波特率和串口设备名,默认的是9600和COM1,根据实际情况修改。
classpath:                Class文件所在的路径。一般演示文件放在\java\examples\下,所以一般这里就指定\java\examples\。当然你也可以根据你class文件所在位置指定相应路径。
class:                        Class文件名称。如HelloWorld。注意不用带后缀名.class。对大小写敏感。
-f name:                把二进制数据写入一个名为name的文件而不是通过串口发送。如加 -f eeprom_data.bin 则将数据写入名为eeprom_data.bin的文件,你可以把这个文件用ISP等方式下载,和串口发送效果一致(注:我没详细测试过这种方法)。你还可以使用如-f COM3灵活指定串口设备,而不用去改配置文件。  
-c:                        和-f配合使用,加-c的话将会把二进制数据转换成头文件形式输出到文件中,如 -c -f data.h ,data.h中的内容就是“{0x00,0x32,……}”。make虚拟机时可以编译这个文件,生成NanoVM_eeprom.hex。
参数-f和-c一般只在make中使用。

实例
看完上面的第说明,你一定觉得应该这么用
        NanoVMTool Mega8.config java/examples HelloWorld
哈哈,是这用的的吗?这样一定会出错,因为你忘却了相对路径,正确的参数是
        NanoVMTool config\Mega8.config ../java/examples HelloWorld
       
我习惯在/tool/下建立一个名为doall.bat的批处理文件来完成所有事:

cd ../java/examples
javac -cp . %2.java
cd ../../tool
pause
java -jar NanoVMTool.jar config\%1.config ../java/examples %2

这个批处理很简单,相信你也看懂了,我们可以这么使用这个批处理文件
doall Mega8 HelloWorld
先编译.java文件,在用NanoVMTool装载连接下载。呵呵,是不是很简单,还等什么呢,还不快动手试试!

出0入0汤圆

 楼主| 发表于 2007-11-29 23:09:02 | 显示全部楼层
to 【71楼】 feng_matrix
现已实现标准公共类:
java/lang/Object (object handling)
java/lang/System (IO handling)
java/io/PrintStream (console output)
java/lang/StringBuffer (string processing)

实现本地类:
nanovm/io/Lcd (1602液晶支持)
nanovm/lang/Math (数学类)
nanovm/avr/AVR (AVR基类)
nanovm/avr/Adc (AD转换)
nanovm/avr/Port (IO控制)
nanovm/avr/Pwm (PWM调整)
nanovm/avr/Timer (计时器)
nanovm/util/Formatter (格式化输入输出)
nanovm/util/Date (日期类,自己写的,还在测试中,使用DS1302)

出0入0汤圆

发表于 2007-11-30 08:24:18 | 显示全部楼层
先顶!再仔细看

出0入0汤圆

发表于 2007-11-30 08:38:27 | 显示全部楼层
强悍!
留个记号,等到有时间再细细阅读!

出0入0汤圆

发表于 2007-11-30 09:52:09 | 显示全部楼层
搂住辛苦了,强人!
佩服。

出0入0汤圆

发表于 2007-11-30 10:02:18 | 显示全部楼层
好像没能下载?我用的COM1
D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\tool>doall Mega8 HelloWorld

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\tool>cd ../java/examples

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\java\examples>javac -cp . HelloWorl
d.java
javac: invalid flag: -cp
Usage: javac <options> <source files>
where possible options include:
  -g                        Generate all debugging info
  -g:none                   Generate no debugging info
  -g:{lines,vars,source}    Generate only some debugging info
  -nowarn                   Generate no warnings
  -verbose                  Output messages about what the compiler is doing
  -deprecation              Output source locations where deprecated APIs are us
ed
  -classpath <path>         Specify where to find user class files
  -sourcepath <path>        Specify where to find input source files
  -bootclasspath <path>     Override location of bootstrap class files
  -extdirs <dirs>           Override location of installed extensions
  -d <directory>            Specify where to place generated class files
  -encoding <encoding>      Specify character encoding used by source files
  -source <release>         Provide source compatibility with specified release
  -target <release>         Generate class files for specific VM version
  -help                     Print a synopsis of standard options


D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\java\examples>cd ../../tool

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\tool>pause
请按任意键继续. . .

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\tool>java -jar NanoVMTool.jar confi
g\Mega8.config ../java/examples HelloWorld
NanoVMTool V1.5 - (c) 2005-2007 by Till Harbaum
Initializing native mapper
Read config config\Mega8.config
read native config\Object
trying to load config\Object.native
read native config\System
trying to load config\System.native
read native config\PrintStream
trying to load config\PrintStream.native
read native config\InputStream
trying to load config\InputStream.native
read native config\StringBuffer
trying to load config\StringBuffer.native
read native config\StringBuilder
trying to load config\StringBuilder.native
read native config\AVR
trying to load config\AVR.native
read native config\Port
trying to load config\Port.native
read native config\Timer
trying to load config\Timer.native
read native config\Adc
trying to load config\Adc.native
read native config\Pwm
trying to load config\Pwm.native
Loading class HelloWorld
Classfile version 0.46
CP: # of entries = 29
CP: 1 METHODREF 6 15
CP: 2 FIELDREF 16 17
CP: 3 STRING 18
CP: 4 METHODREF 19 20
CP: 5 CLASS 21
CP: 6 CLASS 22
CP: 7 UTF "<init>"
CP: 8 UTF "()V"
CP: 9 UTF "Code"
CP: 10 UTF "LineNumberTable"
CP: 11 UTF "main"
CP: 12 UTF "([Ljava/lang/String;)V"
CP: 13 UTF "SourceFile"
CP: 14 UTF "HelloWorld.java"
CP: 15 NAMEANDTYPE 7 8
CP: 16 CLASS 23
CP: 17 NAMEANDTYPE 24 25
CP: 18 UTF "Hello World!"
CP: 19 CLASS 26
CP: 20 NAMEANDTYPE 27 28
CP: 21 UTF "HelloWorld"
CP: 22 UTF "java/lang/Object"
CP: 23 UTF "java/lang/System"
CP: 24 UTF "out"
CP: 25 UTF "Ljava/io/PrintStream;"
CP: 26 UTF "java/io/PrintStream"
CP: 27 UTF "println"
CP: 28 UTF "(Ljava/lang/String;)V"
class: flags=32; class index=5; super class index=6
class: #interfaces=0
class: #fields=0
class: #methods=2
  method: flags=0; name index=7; signature index=8
  method: #attributes=1
    method: attribute name index=9; length=29
      code: maxStack=1; maxLocals=1; bytecode length=5
      code: exception table length=0
      code: #attributes=1
        code: code attribute name index=10; length=6
          line numbers: #line numbers=1
          line numbers: start PC=0; line number=5
  method: flags=9; name index=11; signature index=12
  method: #attributes=1
    method: attribute name index=9; length=37
      code: maxStack=2; maxLocals=1; bytecode length=9
      code: exception table length=0
      code: #attributes=1
        code: code attribute name index=10; length=10
          line numbers: #line numbers=2
          line numbers: start PC=0; line number=7
          line numbers: start PC=8; line number=8
class: #attributes=1
  class: attribute name index=13; length=2
    class: filename index=14
Checking dependencies ...
Resolving method references ...
Method java/lang/Object.<init>:()V -> native
Method java/io/PrintStream.println:(Ljava/lang/String;)V -> native
Successfully loaded 1 classes
Generating unified class file ...
Feature value is 0x0
Writing 0 constant entries
Writing 1 strings
  entry[0] = "Hello World!"
Converting HelloWorld.<init>:()V
invoke #1 -> method java/lang/Object:<init>.()V, native id: #1000

Converting HelloWorld.main:([Ljava/lang/String;)V
get/putstatic #2 -> field java/lang/System:out.Ljava/io/PrintStream;, native, id
: #1100
ldc #3 -> string "Hello World!", id: #0
invoke #4 -> method java/io/PrintStream:println.(Ljava/lang/String;)V, native id
: #1201

Feature value is 0x0
Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/UnsupportedCom
mOperationException
        at Uploader.setUploader(Uploader.java:45)
        at UVMWriter.<init>(UVMWriter.java:265)
        at NanoVMTool.main(NanoVMTool.java:79)

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\tool>

出0入0汤圆

发表于 2007-11-30 10:47:52 | 显示全部楼层
asuro这个项目好像是用红外无线下载的,不知道hackerboygn留意过没有?

出0入0汤圆

发表于 2007-11-30 10:54:39 | 显示全部楼层
记号!

出0入0汤圆

 楼主| 发表于 2007-11-30 11:56:36 | 显示全部楼层
to enci
你没正确安装rxtx吧,所以找不到串口。
还有一个问题,你的javac不支持-cp参数,请将你批处理中的javac -cp改为javac -classpath。

asuro是个国外的机器小车,欧洲比较火,好像是德国中小学生课外科技指定机器小车。有个红外转RS232模块,主要是用来控制的,能不能下载就不知道了。
这个机器小车网上有全部资料,国内也有卖,老早就想买一个,可惜价格不菲,家中没米啊。








出0入0汤圆

发表于 2007-11-30 14:46:15 | 显示全部楼层
按Install文件里的说明安装的。就是拷贝两个文件到jdk相应的目录下面,还是不能串口下载。

Windows
RXTXcomm.jar goes in \jre\lib\ext (under java)
rxtxSerial.dll goes in \jre\bin

出0入0汤圆

 楼主| 发表于 2007-11-30 20:33:00 | 显示全部楼层
注意是\jre\lib\ext和\jre\bin,不是\jdk\jre\lib\ext和\jdk\jre\bin。
装完jdk后会询问是否安装jre,是要把文件复制到这个jre中,而不是jdk自带的那个。

出0入0汤圆

 楼主| 发表于 2007-12-1 12:23:29 | 显示全部楼层
感谢!我当年就是看了这本书入门到,对大家认识虚拟机很有帮助。现在出《Java虚拟机规范 第二版》了。
不过全是技术规范,看起来比较枯燥,呵呵。

出0入0汤圆

发表于 2007-12-1 14:00:09 | 显示全部楼层
to hackerboygn:
你说的这个机器小车(散件)哪里有卖?多少斤米买得得到?

出0入0汤圆

发表于 2007-12-1 15:27:59 | 显示全部楼层
虽然不懂,还是要顶一下。

出0入0汤圆

 楼主| 发表于 2007-12-1 17:32:31 | 显示全部楼层
【91楼】 ifree64
http://www.arexx.com.cn/ProductShow.asp?ID=63

以前我在Google上搜到价格是四百多吧。

出0入0汤圆

发表于 2007-12-2 11:36:01 | 显示全部楼层
我也来热闹下,哈哈,好东西哈

出0入0汤圆

发表于 2007-12-3 09:15:36 | 显示全部楼层
改到\jre\lib\ext和\jre\bin目录,可以下载了!
:)
谢谢hackerboygn,
待会把eclipse的Nanovm_plugin.zip上传

出0入0汤圆

发表于 2007-12-3 09:31:52 | 显示全部楼层
点击此处下载ourdev_184735.zip(文件大小:84K)
配置环境:Eclipse 3.2.0
und Java 1.5.0_08

使用说明:
Am Wochenende habe ich ein Eclipse-Plugin für NanoVM gebastelt. Wenn
jemand das benutzen will, habe ich es hier angeh&auml;ngt.

Installation:
Help -> Software Updates -> Find And Installation ... -> Search for new
features to install -> New archived Site und die nanovm_plugin.zip Datei
ausw&auml;hlen.

Benutzung:
1. NanoVM-Projekt erzeugen : File -> New -> Project -> NanoVM Project
2. Irgendeine Mainklasse erzeugen
3. Die Klasse hochladen: Run -> Run ... -> NanoVM

PS: Wenn jemand das Plugin weiter erweitern will, kann ich den
Sourcekode des Plugins auch hochladen.

bye
tugstugi

出0入0汤圆

发表于 2007-12-3 14:55:44 | 显示全部楼层
hackerboygn大侠,编译成功过ctbot吗?
我编译avr_mega8没问题,编译ctbot的时候报错:
D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\ctbot>make
makefile:102: NanoVM.d: No such file or directory
makefile:102: nvmfile.d: No such file or directory
javac -classpath ../../../java ../../../java/examples/ctbot/FollowLineDemo.java
../../../java/examples/ctbot/FollowLineDemo.java:9: cannot access nanovm.util.Fo
rmatter
bad class file: ..\..\..\java\nanovm\util\Formatter.class
class file has wrong version 49.0, should be 48.0
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
import nanovm.util.Formatter;
                   ^
1 error
make: *** [nvmdefault.h] Error 1

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\ctbot>ls
Makefile    ctbot    loader.d            native_stdio.d  stack.d
NanoVM.hex  debug.d  native_formatter.d  nvmcomm1.d      uart.d
array.d     error.d  native_lcd.d        nvmcomm2.d      vm.d
config.h    heap.d   native_math.d       nvmstring.d

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\ctbot>ls
Makefile    ctbot    loader.d            native_stdio.d  stack.d
NanoVM.hex  debug.d  native_formatter.d  nvmcomm1.d      uart.d
array.d     error.d  native_lcd.d        nvmcomm2.d      vm.d
config.h    heap.d   native_math.d       nvmstring.d

D:\AVR\Mega8\Java_ASURO\nanovm\NanoVM\nanovm\vm\build\ctbot>

出0入0汤圆

发表于 2007-12-3 15:02:46 | 显示全部楼层
o(∩_∩)o...换成ctbot/MouseTest,重新编译,成功!
看来是FollowLineDemo.java有问题

javac -classpath ../../../java ../../../java/examples/ctbot/FollowLineDemo.java
../../../java/examples/ctbot/FollowLineDemo.java:9: cannot access nanovm.util.Fo
rmatter

出0入0汤圆

发表于 2007-12-3 15:13:21 | 显示全部楼层
lz,你是不是yl啊?

出0入0汤圆

 楼主| 发表于 2007-12-3 19:03:45 | 显示全部楼层
to 【97楼】&【98楼】 ninjia
    我都能编译通过。这两楼的问题都是找不到类nanovm.util.Formatter。请确保/java/nanovm/util/下有Formatter.java文件。

出0入0汤圆

 楼主| 发表于 2007-12-3 19:06:40 | 显示全部楼层
to 【99楼】 huangqi412 黄启
    哈哈,没想到在这里遇熟人了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 12:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表