Hermes is a hypervisor for MCU-based systems with real-time requirements. The goal of Hermes is to manage tradeoffs between performance and flexibility in software that runs on embedded systems. Bare-metal software often has the best performance—low I/O latency, less CPU and memory overhead, etc. RTOS-based software has comparatively higher flexibility in terms of its ability to share resources and manage multiple jobs, but often sacrifices latency. Hermes aims to provide software developers with the option to run some portions of code in a bare-metal like environment with minimal latency while allowing other jobs to run within a more flexible RTOS.
Implemented virtualized IO for chip-specific peripherals (Timer/Counter, Ethernet, etc.). Get Atmel Software Pack v1.5 and patch with the Hermes patch. Checkout Hermes from the Bitbucket repo inside the examples_ethernet/gmac_uip_helloworld/ directory, add to the Atmel Studio project and build.
Tested on the Atmel Software Framework Ethernet 'Hello World' Demo, and found that Hermes adds about 2ms to ping round trip times (compared to 0.2 ms for VirtualBox running on an x86 Core i7). There are a lot of optimizations to be made, but we're happy with those results for now.
Hermes now working with multiple guests! In the BitBucket repo, v0.2 is the tagged version with multiple guests enabled. The newest source code repo comes with v0.2 and a multi-guest demo.
Emulating privileged instructions and memory accesses. Blinky demo works in full emulation mode!