Sample Source: An embedded operating system for ARM Cortex-M based microcontrollers logo

Sample Source: An embedded operating system for ARM Cortex-M based microcontrollers

Free

Embedded OS for ARM Cortex-M based IoT devices

FreeFree tier
Type
Open Source

About Sample Source: An embedded operating system for ARM Cortex-M based microcontrollers

yaos is an embedded operating system designed specifically for ARM Cortex-M based microcontrollers, targeting single-core processors without Memory Management Unit (MMU) virtualization. It is built for Internet of Things (IoT) devices with a focus on energy efficiency and hardware-independent development. The OS features a task management system with two types of tasks (normal and real-time), a round-robin scheduler for normal tasks and priority-based scheduling for real-time tasks, a system call interface for accessing system resources in privileged mode, and a virtual file system (VFS) that supports embedded flash (embedfs) and device nodes (devfs). It supports multiple development boards including mango-z1, mycortex-stm32f4, nrf52, and various STM32 boards. The project is open source and hosted on GitHub with 51 stars, 18 forks, and over 300 commits.

Key Features

Task management with two types: normal and real-time tasks
Round-robin scheduler for normal tasks, priority scheduler for real-time tasks
Dynamic task priority changes via set_task_pri()
Scheduler can be stopped to reduce overhead for time-critical tasks
System call interface for accessing privileged resources
Virtual file system (VFS) supporting embedfs (flash) and devfs (device nodes)
Hardware-independent development across multiple Cortex-M boards
Supported boards: mango-z1, mycortex-stm32f4, nrf52, stm32f429i-disco, stm32f469i-disco, stm32-lcd, ust-mpb-stm32f103, stm32f1-min
Energy efficient design for IoT devices

Pros & Cons

Pros
  • Energy efficient, suitable for low-power IoT devices
  • Hardware-independent design simplifies porting
  • Supports both normal and real-time task scheduling
  • Virtual file system enables flexible storage management
  • Open source and free to use
  • Includes system call interface for secure resource access
Cons
  • Limited to single-core ARM Cortex-M processors without MMU
  • Small community and relatively few stars (51) indicate limited adoption
  • Support only for a specific set of boards (not all Cortex-M)
  • Documentation may be sparse (though a Documentation directory exists)
  • Not suitable for applications requiring full operating system features (e.g., memory protection, multi-core)

Best For

IoT device firmware developmentEmbedded systems on ARM Cortex-M microcontrollersReal-time control applicationsEducational projects for embedded OS conceptsPrototyping with STM32 or nRF52 boards

FAQ

What is yaos?
yaos is an embedded operating system for ARM Cortex-M microcontrollers, designed for IoT devices with a focus on energy efficiency and hardware-independent development.
How do I build a project for STM32?
Use the commands: 'make clean', then 'make stm32f1' (or specify your board), then 'make', and finally 'make burn'.
Which boards are supported?
Supported boards include mango-z1, mycortex-stm32f4, nrf52, stm32f429i-disco, stm32f469i-disco, stm32-lcd, ust-mpb-stm32f103, and stm32f1-min.
Is yaos free and open source?
Yes, yaos is open source and hosted on GitHub under a license included in the repository.
How do I create a user task?
User tasks are placed under the /tasks directory. You can define a function and register it using the REGISTER_TASK macro.