Skip to content

mneedes/mos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mos

MOS, or Maintainable RTOS, is a simple and lightweight RTOS microkernel for ARM Cortex M that supports threading and IPC primitives.

It is a work in progress and is intended for "fun personal projects."

MOS was originally developed on a STMicroelectronics STM32F4 Discovery and has been tested on the following boards:

  • STM32F767ZI Nucleo-144 (ARM Cortex M7)
  • STM32L562 Discovery Kit (ARM Cortex M33)
  • STM32F4 Discovery (ARM Cortex M4F)
  • STM32G071RB Nucleo (ARM Cortex M0+)

Design Goals:

  • RTOS: Hard priorities, bounded execution and short critical sections.
  • Simple configuration with low use of conditional compilation (no config.h files).
  • Small code size (e.g.: minimal compiled size is ~5KB).
  • Baseline kernel is static with optional extensions.
  • Extensions include best-effort allocator and dynamic kernel extension.
  • Dynamic kernel extension supports thread-local storage.
  • Easily customizable.
  • Provide example BSPs and example applications.

Included Primitives:

  • Recursive mutex with priority inheritance.
  • Semaphores (counting / multi-bit binary).
  • Message queues (multi-priority).
  • SysTick-based timers.
  • Atomic operations.

Optional Modules:

  • Best-effort allocator with multiple non-contiguous region support.
  • Dynamic kernel extension with thread-local storage.
  • TrustZone security.
  • Shared context (cooperative multitasking where clients share same thread and message queue--for tiny footprints).
  • Command shell.

Supported toolchains / architectures:

  • GCC
  • ARM M0/M1/M0+ (Arch v6-M)
  • ARM M3/M4/M7 (Arch v7-M)
  • ARM M4F/M7F (Arch v7-M with hardware floating point using lazy stacking)
  • ARM M23/M33/M55 (Arch v8-M) - TrustZone context switches.

Features it probably WILL NEVER have:

  • Full MPU support
  • Non-ARM architecture support
  • Non-GCC toolchain support