The portable part of µOS++
Clone or download
Latest commit 1ea30f6 Nov 19, 2018

µOS++ IIIe

An xPack with the third version of µOS++, a POSIX inspired open source system, written in C++


µOS++ IIIe package details:


  • 6.3.14


  • none

Package maintainers

Content contributors



  • none


  • arm
  • cmsis
  • cortex
  • c++
  • rtos
  • drivers
  • scheduler
  • posix



The µOS++ IIIe (micro oh ɛs plus plus third edition) project is the third iteration of µOS++, a POSIX-like, portable, open source, royalty-free, multi-tasking real-time operating system intended for 32/64-bits embedded applications, written in C++. The APIs are documented in the µOS++ reference.

POSIX++ is another point of view of the project; with most system APIs using the POSIX semantics, but being written in C++, the µOS++ IIIe APIs can also be seen as a C++ version of POSIX, thus the name POSIX++.


The µOS++ project is fully functional for Cortex-M devices and also runs on synthetic POSIX platforms (like macOS and GNU/Linux).

Related projects

The current µOS++ code tries to be as portable as possible.

Specific implementations are available from separate projects:

Build Configuration

To include µOS++ in a project, in addition to one of the port specific project, consider the following details:

Include folders

  • include

Source folders

  • src


See µOS++ Application Config.


Demo projects

Examples on how to structure projects using µOS++, including integration with CubeMX for STM devices, can be found in the separate GitHub project.


  • tests/rtos - simple test to exercise the µOS++ RTOS C++ API, the C API and the ISO C++ API
  • tests/mutex-stress - a stress test with 10 threads fighting for a mutex
  • tests/sema-stress - a stress test posting to a semaphore from a high frequency interrupt.
  • tests/gcc - compile test with host GCC compiler

The ARM CMSIS RTOS validator is available from a separate project.

To run these tests, several Eclipse projects are available in a separate GitHub project.


µOS++ is provided free of charge under the terms of the MIT License.

GCC 6.2 patches

Up to including GCC 6.2, the allocator_traits<> template had a misplaced static_assert, preventing µOS++ to compile.

The final workaround was to add a rebind template to the allocator, but before this an alternate workaround was to patch the bits/alloc_traits.h file.

# Note: EOF is quoted to prevent substitutions here.
$ cat <<'__EOF__' > /tmp/alloc_traits_patch.txt
--- bits/alloc_traits.h	2017-02-14 19:17:10.000000000 +0200
+++ bits/alloc_traits_patched.h	2017-02-14 19:25:39.000000000 +0200
@@ -184,8 +184,8 @@
       template<typename _Tp>
 	using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
-      static_assert(!is_same<rebind_alloc<value_type>, __undefined>::value,
-	  "allocator defines rebind or is like Alloc<T, Args>");
+//      static_assert(!is_same<rebind_alloc<value_type>, __undefined>::value,
+//	  "allocator defines rebind or is like Alloc<T, Args>");
       template<typename _Alloc2>

# Update the --directory= to point to your location.
$ sudo patch --backup --unified --verbose --strip=0 \
--input=/tmp/alloc_traits_patch.txt \