| Crates.io | os-trait |
| lib.rs | os-trait |
| version | 0.11.0 |
| created_at | 2025-12-10 21:22:39.255219+00 |
| updated_at | 2026-01-20 20:14:21.441008+00 |
| description | Traits used to adapter different embedded RTOS. |
| homepage | |
| repository | https://github.com/mcu-rust/os-trait |
| max_upload_size | |
| id | 1978798 |
| size | 37,052 |
os-trait provides a unified trait layer for adapting multiple RTOS implementations to embedded Rust HALs.
It makes embedded Rust code more portable, testable, and OS‑agnostic by standardizing common OS primitives such as mutexes, delays, timeouts, notifier, and thread yielding.
This crate integrates with several foundational components of the embedded Rust ecosystem:
timeout-trait — timeout abstractionsembedded-hal — uses the DelayNs traitmutex — uses BlockingMutex and RawMutexcargo add os-trait
use os_trait::{prelude::*, FakeOs, StdOs, Duration, Timeout, Instant};
fn use_os<OS: OsInterface>() {
let mutex = OS::mutex(2);
let mut guard = mutex.try_lock().unwrap();
assert_eq!(*guard, 2);
OS::yield_thread();
OS::delay().delay_ms(1);
let mut t = Timeout::<OS>::millis(1);
if t.timeout() {
// handle timeout
}
let mut now = Instant::<OS>::now();
now.elapsed();
if now.timeout(&Duration::<OS>::millis(1)) {}
let (notifier, waiter) = OS::notify();
assert!(notifier.notify());
assert!(waiter.wait(&Duration::<OS>::millis(1)));
}
fn select_os() {
use_os::<FakeOs>();
use_os::<StdOs>();
}
Use alias for convenience:
use os_trait::{prelude::*, StdOs as OS, os_type_alias};
os_type_alias!(OS);
fn use_os_type() {
let mutex = Mutex::new(2);
OS::yield_thread();
OS::delay().delay_ms(1);
let t = Timeout::millis(1);
let dur = Duration::millis(1);
let mut now = Instant::now();
if now.timeout(&dur) {}
let (notifier, waiter) = OS::notify();
assert!(notifier.notify());
assert!(waiter.wait(&Duration::millis(1)));
}
| Feature | Default | Description |
|---|---|---|
alloc |
✔️ | Enables allocation support |
std |
❌ | Enables std for unit testing |
std-custom-mutex |
❌ | Use BlockingMutex instead of std::sync::Mutex in std environments |
Implement the OsInterface trait and provide:
RawMutex implementationNotifierInterface implementationDelayNs implementationOnce implemented, your OS becomes compatible with any HAL or driver that depends on os-trait.
For a Basic examples are available in os_impls.rs. Full implementation example, see os_trait_impls.rs for FreeRTOS.
embedded rust · rtos · hal · mutex · delay · timeout · portability · no_std · embedded-hal · traits