Skip to main content
Log in

A real-time virtual machine implementation for small microcontrollers

  • Original Paper
  • Published:
Innovations in Systems and Software Engineering Aims and scope Submit manuscript

Abstract

A way to host a full general purpose virtual machine (VM) interpreter on a very small microcontroller platform is described. This machine provides a comprehensive set of general and enhanced functionality efficiently by abstracting the VM instruction set. Measurements were made on the execution of software programs in the virtual machine while running on the target platform in order to demonstrate the machine’s capabilities. Additionally, multitasking capabilities were added to the baseline and found to perform efficiently within the VM. The results proved to be satisfactory and demonstrate that a robust virtual machine can be made available for very small embedded platforms based on simple microcontrollers, such as those that are widely found in aerospace applications.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Similar content being viewed by others

References

  1. Abelson H, Dybvig R, Haynes C, Rozas G, Adams N, Friedman D, et al (1998) Revised report on the algorithmic language scheme. In: Higher-order and symbolic computation, pp 7–105

  2. Agosta G, Reghizzi S, Svelto G (2006) Jelatine: a virtual machine for small embedded systems. In: JTRES ’06 Proceedings of the 4th international workshop on Java technologies for real-time and embedded systems. JTRES ’06, Paris, pp 170–177

  3. Aslam F, Schindelhauer C, Ernst G, Spyra D, Meyer J, Zalloom M (2008) Introducing TakaTuka: a Java virtual machine for motes. In: Proceedings of the 6th ACM conference on Embedded network sensor systems (SenSys ’08). ACM, New York, pp 399–400

  4. Atmel Corporation. (2010). AVR Solutions—8 and 32 bit low power, high performance MCU. Retrieved September 2, 2010, from Atmel. http://www.atmel.com/dyn/products/devices.asp?family_id=607#1965 (June 15)

  5. Atmel Product Guide (2011) Key parameters for ATxmega128A1. Retrieved April 13, 2011, from Atmel Corporation Product Guide. http://www.atmel.com/dyn/products/product_parameters.asp?category_id=163&family_id=607&subfamily_id=1965&part_id=4298&ListAllAttributes=1

  6. Atmel XPlain (2010) AVR Xplain Series. Retrieved November 16, 2010, from Atmel. http://www.atmel.com/products/AVR/xplain.asp?family_id=607

  7. Brouwers N, Corke P, Langendoen K (2009) Darjeeling, a feature-rich VM for the resource poor. In: Proceedings of the 7th ACM conference on embedded networked sensor systems (SenSys ’09). ACM, New York, pp 18169–18182

  8. Brouwers N, Langendoen K, Corke P (2009). Darjeeling, a feature-rich VM for the resource poor. In: Proceedings of the 7th ACM conference on embedded networked sensor systems (SenSys ’09) (pp. 169–182). New York, ACM

  9. Byte Craft Limited (2010) Catalog. Retrieved December 19, 2010, from Byte Craft Limited. http://www.bytecraft.com/MPC_C_Compiler_for_Microchip_PIC

  10. Craig ID (2005) Virtual Machines. Springer, New York

    Google Scholar 

  11. Davis WR (2012) Evaluating virtual machines for use on a small embedded real time microcontroller platform. Dissertation, Colorado Technical University, Colorado Springs

  12. Demichelis A (2010) Squirrel the Programming Language. Retrieved August 20, 2010, from Squirrel: http://squirrel-lang.org/ (August 12)

  13. Dis Virtual Machine Specification (1999) (Lucent Technologies) Retrieved August 20, 2010, from vita nuova. http://www.vitanuova.com/inferno/papers/dis.html (September 30)

  14. Eickhold J, Fuhrmann T, Saballus B, Schlender S, Suchy T (2008) AmbiComp: a platform for distributed execution of Java programs on embedded systems. AmI-Blocks’08, European Conference on Ambient Intelligence 2008. Nurnberg

  15. Eller H (2005) Optimizing Interpreters with Superinstructions. Master’s Thesis, Institut fur Computersprachen der Technischen Universit at Wien, Wien

  16. eLua—Embedded Lua (2010) Retrieved August 20, 2010, from eLua Project. http://www.eluaproject.net/ (August 4)

  17. GHI Electronics (2012) TinyCLR. Retrieved March 20, 2012, from TinyCLR. http://www.tinyclr.com/

  18. Gutierrez DA, Soler FO (2008) Applying lightweight flexible virtual machines to extensible embedded systems. In: Proceedings of the 1st workshop on isolation and integration in embedded systems. ACM, Glasgow, pp 23–28

  19. Hammond K, Michaelson G (2003) Hume: a domain-specific language for real-time embedded systems. In: Proceedings of the 2nd international conference on generative programming and component engineering. Springer, Erfurt, pp 37–56

  20. Harbaum T (2006) The NanoVM—Java for the AVR. Retrieved April 21, 2011, from Harbaum. http://www.harbaum.org/till/nanovm/index.shtml (June 13)

  21. Hudak P (1996) Building domain-specific embedded languages. ACM Computing Surveys (CSUR), 28 (4es)

  22. IAR Systems (2010) IAR embedded workbench for Atmel AVR. Retrieved November 16, 2010, from IAR Systems. http://www.iar.com/website1/1.0.1.0/107/1/

  23. ISO 7185:1990 (1990) Retrieved August 20, 2010, from International Organization for Standardization. http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=13802

  24. Kazi I, Chen H, Stanley B, Lilja D (2000) Techniques for obtaining high performance in Java Programs. ACM Computing Surveys, pp 213–240

  25. Levis P, Culler D (2002) Maté A tiny virtual machine for sensor networks. In: Proceedings of the 10th international conference on Architectural support for programming languages and operating systems, pp 85–95

  26. Lilith and Modula-2 (2010) (CFB Software) Retrieved August 20, 2010, from CFB Software. http://www.cfbsoftware.com/modula2/

  27. Longbottom R (2010) Dhrystone Benchmark Results On PCs. Retrieved March 2, 2011, from Roy Longbottom’s PC Benchmark Collection. http://www.roylongbottom.org.uk/dhrystone%20results.htm (November)

  28. Lua the Programming Language (2010) Retrieved August 20, 2010, from Lua. http://www.lua.org/ (July 29)

  29. Micrium (2010) uC/OS-II Kernel. Retrieved December 20, 2010, from Micrium. http://www.micrium.com/page/products/rtos/os-ii

  30. Microsoft .NET Micro Framework (2010) Retrieved August 20, 2010, from Microsoft .NET Micro Framework. http://www.netmf.com/Home.aspx (August 19)

  31. Microsoft (2011) .NET Micro Framework. Retrieved March 20, 2012, from Microsoft. http://www.microsoft.com/en-us/netmf/default.aspx

  32. Microsoft (2010) Common language runtime overview. Retrieved October 21, 2010, from Microsoft Corporation. http://msdn.microsoft.com/en-us/library/ddk909ch

  33. Microsoft (2010) Device memory management in the .NET Compact Framework. Retrieved October 26, 2010, from Microsoft Corporation. http://msdn.microsoft.com/en-us/library/s6x0c3a4.aspx

  34. Microsoft Visual Studio (2005) Microsoft Visual Studio 2005. Retrieved May 30, 2011, from Microsoft. http://www.microsoft.com/visualstudio/en-us/products/2005-editions

  35. Mono for Android (2012) Retrieved March 20, 2012, from Xamarin. http://xamarin.com/monoforandroid

  36. Moore S (2010) http://www.standardpascal.org/p5.html. Retrieved August 20, 2010, from Standard Pascal: http://www.standardpascal.org/p5.html (July)

  37. Novell (2010) Mono-project. Retrieved August 20, 2010, from Mono. http://mono-project.com/Main_Page (June 15)

  38. Oracle (2010) Java Embedded FAQ. Retrieved October 26, 2010, from Oracle Corporation. http://www.oracle.com/technetwork/java/embedded/overview/index.html (June)

  39. Oracle (2008) The Java Card 3 Platform. Retrieved June 21, 2011, from Oracle. http://www.oracle.com/technetwork/articles/javase/javacard3-whitepaper-149761.pdf (August)

  40. Parrot (2010) Retrieved August 20, 2010, from Parrot. http://www.parrot.org/ (August 18)

  41. Plummer B, Khajanchi M, Edwards SA (2006) An Esterel Virtual Machine for Embedded Systems. In: Proceedings of synchronous languages, applications, and programming (SLAP 2006)

  42. Praus F, Kastner W (2008) User applications development using embedded Java. Retrieved April 21, 2011, from Praus. http://www.praus.at/files/knx08_embeddedjava_final.pdf

  43. Proebsting TA (1995) Optimizing an ANSI C interpreter with superoperators. In: Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on principles of programming languages. ACM, San Francisco, pp 322–332

  44. Riedel T, Arnold A, Decker C (2007) An OO approach to sensor programming. EWSN 2007 European conference on Wireless Sensor Networks. EWSN 2007, Delft

  45. Simon D, Cifuentes C, Cleal D, Daniels J, White D (2006) Java on the bare metal of wireless sensor devices: the squawk Java virtual machine. In: Proceedings of the 2nd international conference on virtual execution environments (VEE ’06). ACM, New York, pp 78–88

  46. St-Amour V, Feeley M (2009) PICOBIT: a compact scheme system for microcontrollers. Université De Montréal, Montreal

  47. STMicroelectronics (2011) Smartcard MCU with 32-bit ARM. Retrieved June 21, 2011, from STMicroelectronics. http://www.st.com/stonline/stappl/st/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATA_BRIEF/CD00296560.pdf

  48. STMicroelectronics (2008) ST23YL80 Smartcard MCU. Retrieved June 21, 2011, from STMicroelectronics. http://www.st.com/stonline/books/pdf/docs/13982.pdf

  49. Texas Instruments (2010) Microcontrollers (MCU). Retrieved September 2, 2010, from Texas Instruments. http://focus.ti.com/mcu/docs/mcuprodoverview.tsp?sectionId=95&tabId=1531&familyId=916

  50. The LLVM Compiler Infrastructure (2010) (University of Illinois at Urbana-Champaign) Retrieved August 20, 2010, from LLVM. http://llvm.org/ (April 27)

  51. Topley K (2002) J2ME in a Nutshell. O’Reilly Media, Sebastopol

    Google Scholar 

  52. Virtanen J (2005) GNU Pascal. Retrieved August 20, 2010, from GNU Pascal. http://www.gnu-pascal.de/gpc/h-index.html

  53. Weicker RP (1988) Dhrystone benchmark: rationale for version 2 and measurement rules. SIGPLAN Notices 23(8): 49–62

    Article  Google Scholar 

  54. Weicker RP (1984) Dhrystone: a synthetic systems programming benchmark. Communications of the ACM 27 (10)

  55. Weiss AR (2002) Dhrystone benchmark history, analysis, scores, and recommendations. Retrieved December 19, 2010, from EEMBC Certification Laboratories. http://www.eembc.org/techlit/datasheets/dhrystone_wp.pdf (October 1)

  56. Wirth N (1983) Programming in Modula-2. Springer, Berlin

    Book  MATH  Google Scholar 

  57. Wirth N (1970) The Programming language Pascal. Retrieved August 20, 2010, from. http://www-sst.informatik.tu-cottbus.de/~db/doc/People/Broy/Software-Pioneers/Wirth_hist.pdf (October 30)

  58. XDS Modula-2 Compiler (2000) Retrieved February 22, 2011, from Excelsior LLC Web Site. http://www.excelsior-usa.com/xdsdl.html

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Phillip A. Laplante.

Rights and permissions

Reprints and permissions

About this article

Cite this article

Davis, W.R., Laplante, P.A. & Sandén, B.I. A real-time virtual machine implementation for small microcontrollers. Innovations Syst Softw Eng 8, 223–241 (2012). https://doi.org/10.1007/s11334-012-0188-1

Download citation

  • Received:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s11334-012-0188-1

Keywords

Navigation