The Embedded Virtual Machine (Embedded VM or embvm for short) is an experimental development effort by Embedded Artistry. We are creating a software framework that demonstrates how developers can create software that is easy to change, easy to test, and easy to reuse. We hope that it can serve as a model of evolutionary embedded software design techniques.
The ultimate goals of the Embedded Virtual Machine project are:
- Increasing the ability to reuse embedded systems software across products
- Minimizing the cost of hardware changes in an embedded system by constraining existing code modifications to isolated modules
- Reduce time-to-market by enabling developers to build embedded systems software by leveraging modular, tested component
- Provide developers with tools and constructs that enable them to develop, test, and debug embedded software on their development machines
We carefully selected these goals because we were continually tired of repeatedly facing the same challenges the past twelve years. We're tired of being stuck in the software development dark ages. We want to do our part to improve the state of the art in embedded systems software development, enabling users like you to more quickly develop reliable embedded systems software.
This project is still in its infancy and quite experimental.
What is currently represented is our initial approach. While working on our Designing Embedded Software for Change and Abstractions and Interfaces courses, we realized that we could simplify some of the central ideas by changing our approach to abstraction. This work will begin once version of Designing Embedded Software for Change is completed.
embvm-core is the primary Embedded VM repository. This repo provides the core abstractions, boot-related code, utilities, and supporting libraries that are used to build Embedded VM applications. These abstractions are used to quickly create and port embedded systems software from one platform to another. It is the minimal dependency needed for a new Embedded VM project.
- c-interfaces - a collection of abstract interfaces in C
We provide a number of demonstration projects.
- embvm/blinky contains the application layer code for a simple
blinky
example. This project runs on a personal computer using an Aardvark adapter hooked up to an LED, an nRF52840 development kit, an nRF USB Dongle, and an STM32 NUCLEO-L4R5ZI development board. - embvm-demo contains a more complicated example application involving LEDs, a time-of-flight sensor, and an OLED display. This application runs on a personal computer using an Aardvark adapter, an nRF52840 development kit, and an STM32L4R5ZI-P Nucleo development kit.
- embvm-demo-platforms contains example platforms and hardware platforms that are shared by our blinky and embvm-demo projects
- stm32l4 provides an example hardware platform, platform, and blinky application that will run on an STM32 NUCLEO-L4R5ZI development kit.
We have modules that provide minimal support for the following processors:
- arm-architecture provides common functionality that can be (re)used across ARM processors
- nordic (nRF52840)
- stm32l4
- POSIX support is provided as part of embvm-core
- freertos-interface
- Drivers that are designed to support this ecosystem can be found in the embvm-drivers organization
- The Embedded VM project makes use of repositories that can be found in the embeddedartistry organization:
We welcome contributions from the community for all of our projects. If you are interested in contributing, please review the following information:
If you are unfamiliar with open source development, you will want to start with our Open Source Contribution Guide.