We present Hermes, a hypervisor for MMU-less microcontrollers. Hermes enables high-performance bare metal applications to coexist with RTOSes and other less time-critical software on a single CPU. We experimentally demonstrate that a real-time operating system scheduler does not always provide deterministic response times for I/O events, which can cause real-time workloads to be unschedulable. Hermes solves this problem by adding a layer of abstraction between the hardware I/O devices and the software that services them, making I/O transactions truly deterministic. Virtualization on low-power mobile and embedded systems also enables some interesting software capabilities like secure execution of third-party apps, software integrity attestation, and bare metal performance in a multitasking software environment. These features otherwise require additional hardware (i.e. multiple CPUs, hardware TPM, etc) or may not be available at all. In other projects, we have anecdotally noticed that real time operating systems are not always able to respond quickly and deterministically enough to time-sensitive operations, particularly under high I/O load. We validate this observed timing problem by measuring interrupt latency in an RTOS environment and comparing to an experimental implementation of Hermes. We find that not only is the interrupt latency lower in the virtualized environment, but it is also much more deterministic-a key figure of merit for real-time software systems. We discuss challenges of implementing a hypervisor on a CPU with no memory management unit, and we present some preliminary solutions and workarounds. We go on to explore some other applications of virtualization to mobile and IoT software.