STM32F429DISCovery运行java

来源:互联网 发布:linux 内存使用情况 编辑:程序博客网 时间:2024/06/05 04:21

最近在研究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,将来刚好可以移植一些简单游戏上去。





0 0