Virtual machineFrench Java platform manufacturer IS2T announces MicroEJ®, the industry's first Java platform supporting the development and integration of Java-based features for low-cost, memory-constrained C and C++ applications running on Cortex M-based microcontrollers.
MicroEJ offers a runtime Java platform that includes IS2T's 28 KB MicroJvm® Java Virtual Machine, an optional real-time operating system (RTOS) (~10 KB), all the necessary libraries to run an advanced graphical human-machine interface (HMI), and a fully debugged and tested binary code platform ready to be transferred directly to any compatible MCU. IS2T's MicroJvm Java Virtual Machine requires only 28 KB of flash memory, less than 1.5 KB of RAM, and has a boot time of as little as 2 ms at 120 MHz. A fully functional advanced graphical HMI requires 90 KB to 140 KB of total program memory.


Emerging in 1995, Java has long been the preferred platform for graphical user interfaces (GUIs), the Internet of Things (IoT), service-oriented architectures (SOA), web applications, and mobile applications. Java consists of two components: the object-oriented Java language and a 32-bit instruction set (204) that includes a memory model manager. Object-oriented programming and the standalone Java Virtual Machine (JVM) offer "program-once-run-anywhere" portability and scalability, enabling engineers to better manage software complexity and decouple hardware and software design development cycles through virtualization and simulation.


Before the MicroEJ platforms, a typical Java platform was 5 MB in size and required at least 400 MHz of processing power, making it unsuitable for resource-constrained embedded systems. Embedded engineers needing to implement advanced HMIs were limited to using expensive external processors, cumbersome external GUI processors, and authoring tools that resulted in memory-intensive applications. They also had to try to directly translate graphical components into standard C routines, potentially compromising system reliability, performance, and maintainability.


VirtualMachine1.tiffIdentical Embedded and Simulated Java MicroEJ Platforms (JPFs) - The embedded MicroEJ JPF includes the MicroJvm virtual machine, standard libraries such as B-ON+ CLDC (Java Core Application Programming Interface - embedded API), MicroUI® (embedded user interface), MWT (embedded widget environment), NLS (National Embedded Support), a running PNG image decoder, and graphical tools for font design, front panels, and storyboards. Running MicroEJ can operate without an RTOS or on any RTOS, including Micrium's uOS, Keil's RTX, or Segger's EmbOS. The board supports packages that will be available for various vendor-specific evaluation boards.


The MicroEJ JPF simulator provides a fully functional simulation of embedded Java platforms, thanks to its extensible options with simulated objects (hardware or software). This enables comprehensive simulation capabilities against the target hardware, which can utilize specialized interfaces such as sensors, actuators, and specific communication links. Applications can be prototyped in Java and tested on a simulated platform, independent of the actual device. This avoids recoding associated with device availability issues or cumbersome integration phases during application deployment. Once 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. After the application is ready, it can be deployed to the target using JTAG or other embedded programming systems.


These simulated platforms use the same software libraries, provide the same programming schemes, and the same memory models so that engineers know exactly how much memory will be needed for the application and can choose the most cost-effective microcontroller (MCU).


Easy interface for legacy C – Existing C/ASM drivers and application logic can easily be incorporated into the Micro EJ JPF platform, making new Java code accessible while preserving the legacy of the C code. The native SNI interface library allows direct calls to C functions from Java and calls to Java methods from C, including arguments of base types such as integers or floats and arrays. SNI enables highly efficient data exchange between these two worlds, avoiding intermediate buffers and wasteful buffer copies (note that DMA devices can also share data using a buffer implementation)


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

More information or a quote