StateOS
StateOS is free, extremely simple and very fast real-time operating system (RTOS) designed for deeply embedded applications.
Targets
ARM Cortex-M, STM8.
Inspiration
StateOS was inspired by the concept of a state machine. Procedure executed by the task (task state) doesn’t have to be noreturn-type. It will be executed into an infinite loop. There’s a dedicated function for immediate change the task state (task function).
Documentation
All documentation is contained within source files, in particular header files.
Gettin started
Building an application for a specific compiler is realised using the appropriate makefile script.
Features
- kernel can operate in preemptive or cooperative mode
- kernel can operate with 16, 32 or 64-bit timer counter
- kernel can operate in tick-less mode
- implemented basic protection using MPU (use nullptr, stack overflow)
- implemented functions for asynchronous communication with unmasked interrupt handlers
- spin locks
- once flags
- events
- signals with protection mask
- flags (any, all, protect, ignore)
- barriers
- semaphores (binary, limited, counting)
- mutexes with configurable type, protocol and robustness
- fast mutexes (error checking)
- condition variables
- read/write locks
- memory pools
- raw buffers
- message queues
- mailbox queues
- event queues
- job queues
- timers (one-shot, periodic)
- hierarchical state machine
- cmsis-rtos api
- cmsis-rtos2 api
- nasa-osal support
- c++ wrapper
- support for std::thread
- all documentation is contained within source files, in particular header files
- examples and templates are in separate repositories on GitHub
- archival releases on sourceforge
Supported stdc++ features
- std::thread, std::jthread, std::stop_callback, std::this_thread, …
- std::mutex, std::shared_mutex, std::condition_variable, …
- std::binary_semaphore, std::counting_semaphore, …
- std::lock_guard, std::unique_lock, std::shared_lock, …
- std::future, std::promise, std::assync, …
- std::barrier, std::latch, …
- std::chrono, …
- thread local storage (thread_local)
- and more …
License
This project is licensed under the terms of the MIT License (MIT).