1. Introduction

What is Lazuli, and what it is not.

Lazuli is a preemptive real-time multitasking kernel targeting microcontrollers, or machines with constrained resources. It allow the microcontroller to run multiple independent tasks simultaneously, with some of them having hard real-time constraints. Lazuli provides a “time slice” scheduler in order to respect deadlines constraints of the tasks running in the system.

For now only the ATmega328p is supported.

Lazuli is self-contained: it does not rely on an existing library.

Lazuli currently provides the following functionalities :

  • “ROMable”: i.e. All the system can fit in ROM. Lazuli does not rely on the presence of a disk or storage device.
  • Real-time scheduling: Tasks can be scheduled in a cyclic real-time Rate Monotonic Scheduling (RMS) fashion, or in a real-time priority round robin fashion (equivalent of POSIX SCHED_RR).
  • No MMU: Lazuli does not relies on MMU or virtual memory. It runs on a unique flat address space, traditionally found in microcontrollers.
  • Modular: Lazuli build system lets you choose which parts of the system you need, including only those necessary parts in the final binary, thus saving storage.
  • Containerized development environment: An official container image is provided, that includes all the necessary tools to build the system and your own application.