28KB Java virtual machine supports 32-bit MCUs

French Java platform vendor, IS2T, has announced MicroEJ – the industry’s first Java platform to support the development and integration of Java-based functionality for low cost, memory-constrained, C and C++ applications running on Cortex M-based microcontrollers.

MicroEJ provides a runtime Java platform that includes IS2T’s MicroJvm, 28 Kbyte Java virtual machine, an optional RTOS (~10 Kbytes), all necessary libraries to run an advanced graphical human-machine interface (HMI), and a fully functional simulated platform that allows fully debugged and tested binary code to be ported directly to any supported MCU. The company’s MicroJvm Java virtual machine requires only 28 Kbytes of flash, less than 1.5 Kbytes RAM, and has a boot time of just 2 ms at 120 MHz. A fully functional, advanced graphical HMI requires from 90 Kbytes to 140 Kbytes of memory program in total.

Emerged in 1995, Java has long been the preferred platform for graphical user interfaces (GUI), the internet of things (IOT), service oriented architectures (SOA), web and cellphone applications. Java consists of two components: the object-oriented Java language and a 32-bit 204 instruction set processor including a memory model manager. Java’s object oriented programming and independent virtual machine offer “program-once-run-anywhere” portability and scalability that enables engineers to better manage software complexity and to decouple hardware & software development design cycles through virtualization and simulation.

Prior to MicroEJ platforms, a typical Java Platform had a memory footprint as high as 5 Mbytes and processing requirements of at least 400 MHz, precluding it from use in resource-constrained embedded systems. Embedded engineers who needed to implement advanced HMIs, were restricted to the use of expensive, external dedicated GUI processors; cumbersome, difficult to use authoring tools that resulted in memory intensive applications, or by attempting to directly translate graphical components into existing C-routines, potentially compromising system reliability, performance and maintainability.

Identical embedded and simulated MicroEJ Java Platforms (JPFs)Embedded MicroEJ JPF includes the MicroJvm virtual machine, standard libraries such as B-ON + CLDC (core embedded Java API), MicroUI (embedded user interface), MWT (embedded widgets framework), NLS (embedded national support), runtime PNG image decoder, and graphical tools for the design of fonts, front panels and story boards. MicroEJ runtime can operate without an RTOS or on any RTOS, including Micrium’s uOS, Keil’s RTX or Segger’s EmbOS. Board support packages will be available for a variety of vendor-specific evaluation boards.

The MicroEJ JPF simulator provides fully functional simulation of embedded Java platforms thanks to extensible options with mock objects (hardware or software) in order to provide full simulation capabilities with regard to the actual targeted hardware that may use special interfaces such as sensors, actuators and specific communication links. Applications may be prototyped in Java and tested on a simulated platform, independently from the device itself, thereby avoiding recoding associated with device availability issues or painful integration phases during application deployment. When the prototype is approved, the design can continue in Java until it is fully tested using the testing infrastructure provided by the simulated platform and the MicroEJ SDK. Once the application is ready, it can be deployed on the target using JTAG or other In-System-Programming systems.

These simulated platforms use the same software libraries, provide the same thread scheduling schemes and the same memory models so engineers know exactly how much memory will be required for application and can choose the most cost-effective MCU.

Easy interface to Legacy CC/ASM drivers and application logic from existing applications can incorporate easily the MicroEJ JPF platform and make accessible the new Java code while keeping legacy C code. SNI native interface library allows direct calls to C functions from Java, and allows Java methods to be called from C, including arguments of base-types such as integer or float, and arrays. SNI allows sharing of data between both worlds in a very efficient way that avoids intermediate buffers and wasteful buffer copies (note that DMA devices can also share data using a single buffer implementation).

For more advanced data and task decoupling, developers can use the ShieldedPlug interface. ShieldedPlug is based on publish/subscribe mechanisms with an event system and provides spacial and temporal decoupling between C and Java worlds.

Pricing and availabilityThe fully customizable MicroEJ platforms will be available for Cortex-M3/M4-based MCUs from IS2T December 11th, 2012. The evaluation version will be available for download from www.is2t.com free of charge.

Fully configured development environments of MicroEJ will be available for STMicroelectronics Cortex M3/M4-based MCUs for $4,000 per seat (annual subscription, support and maintenance included). MicroEJ-based development environments to support other MCU core architectures from additional silicon vendors will be launched in the next 12 months, with similar pricing.

If you found this article to be interest, visitMicrocontroller / MCU Designline where – in addition to my Max's Cool Beans blogs on all sorts of "stuff" – you will find the latest and greatest design, technology, product, and news articles with regard to all aspects of designing and using microcontrollers.

Also, you can obtain a highlights update delivered directly to your inbox by signing up for my weekly newsletter – just Click Here to request this newsletter using the Manage Newsletters tab (if you aren't already a member you'll be asked to register, but it's free and painless so don't let that stop you [grin]).

Last but certainly not least, make sure you check out all of the discussions and other information resources at All Programmable Planet. For example, in addition to blogs by yours truly, microcontroller expert Duane Benson is learning how to use FPGAs to augment (sometimes replace) the MCUs in his robot (and other) projects.

I'm not a big fan of Java. The promise has always been great, but it always seems like the reality falls a bit short. Of course, I've only used Java as an applications platform, not as a development platform or as an embedded OS.
But ignoring my opinions, I wouldn't think that running this on a Zynq would be out of the question. I would think that a FPGA based ARM (hard or soft) would be an ideal use for a JVM like this.

This is certainly not the industry's first small JVM.
Lejos has been doing this for ages: http://lejos.sourceforge.net/
Lejos is about the same size on ARM. Lejos has been running on ARM micros for almost 6 years and on H8 for much longer than that.