无网不进  
软硬件开发

STM32F429DISCovery运行java

 

最近在研究Java虚拟机移植到单片机上,今天已经初步完成。接下来整理下代码,准备过些日子与大家见面!

         硬件环境:STM32F429DISCovery

         开发工具:em::Blocks(Code::Blocks衍生版本) + arm-none-eabi-gcc+ IntelliJ IDEA + jdk

         系统环境:圆景V1.7.8, 已经集成Java虚拟机

 

 

一、编译系统内核:

 

内核大小为占用约75K FLASH,8K RAM。将其余FLASH空间用于应用程序和文件系统,其余的RAM用于内存管理。

         下载内核到开发板,终端显示欢迎界面

 

键入ps、free查询系统基本信息

 

ps命令显示内核已经包含了6个基本任务线程。

         基本指令运行至少占用64字节的内存管理空间。

 

二、在IntelliJ IDEA 新建一个HelloJava工程。新建一个HelloJava类,做最简单的Hello world!输出

 

将编译好的java文件下载到系统缓存当中去

 

下载完成后执行adoj -x命令从Ram中执行Java程序

Java程序执行完毕。

 

 

三、高级应用。

         由于内核只为虚拟机提供一个基本输出函数,如果我们需要更多的IO功能,就需要在应用程序中注册函数。

         在应用程序中写一个随机数(RNG)驱动函数,

注册到本地函数组当中去:

应用程序会注册一个Ext Task的任务

 

将应用程序编译

 

 

将编译好的应用程序下载到FLASH中去

再新建一个Lucky Java项目

输入一个简易的幸运星程序,如果获取的随机数对100求模等于88就是幸运数。

 

编译后下到系统RAM中,此时如果执行该java程序,系统会提示有相关的本地函数无法找到

 

装载刚才编译好的应用程序,装载rand函数,此时,我们可以查到系统已经多了一个刚才提到到Ext Task任务

装载刚才编译好的Java程序,大概过了一会儿,输出提示已经捕捉到幸运数

 

输入ps和free查看线程和内存使用状况:

可以输入kill 7 将线程卸载掉,再输入ps和free可以看到刚刚申请的的资源已经全部释放掉了

 

为了提高幸运指数,一方面可以缩短Sleep时间,另外一方面可以增加一个Java线程挖掘幸运数,现在我们采取第二种方法,增加一个luckThread类

 

main函数里面new 一个luckThread类(当然,也可以多new几个)



下载到ram里面去执行

 

四、固化到文件系统中执行

         刚才的程序是保存在RAM中,意味着我们每次上电都要重新加载程序。现在将Lucky.adoj固化到文件系统中,下载到FLASH空间:

 

复位后查询文件系统,发现了新增的Lucky.adoj文件

 

加载Lucky程序,对于在文件系统的应用,如果没有上程序锁,可以重复装载,效果如下所示:



 

后记,开发板上带有一片LCD,将来刚好可以移植一些简单游戏上去。

 

posted on 2017-11-13 17:02  无网不进  阅读(1242)  评论(1)    收藏  举报