An xPack with the third version of µOS++, a POSIX inspired open source system, written in C++
µOS++ IIIe package details:
- type: xcdl
- git repo: https://github.com/micro-os-plus/micro-os-plus-iii.git
- homepage: https://github.com/micro-os-plus/micro-os-plus-iii
- latest archive: https://github.com/micro-os-plus/micro-os-plus-iii/archive/xpack.zip
- spdx: MIT
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).
The current µOS++ code tries to be as portable as possible.
Specific implementations are available from separate projects:
- the Cortex-M port of the scheduler is packed as µOS++ IIIe Cortex-M xPack
- the synthetic POSIX port of the scheduler is packed as POSIX arch xPack
To include µOS++ in a project, in addition to one of the port specific project, consider the following details:
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
# 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>"); private: template<typename _Alloc2> __EOF__ # Update the --directory= to point to your location. $ sudo patch --backup --unified --verbose --strip=0 \ --input=/tmp/alloc_traits_patch.txt \ --directory=/Users/ilg/opt/gcc-arm-none-eabi-6_2-2016q4/arm-none-eabi/include/c++/6.2.1