Miosix embedded OS
NewsThis site was last updated Mar 19, 2013: Improved netbeans configuration screenshot, to fix code completion in the std namespace
For the Miosix source code updates, go to the gitorious page.
IntroductionMiosix is a kernel designed to run on 32bit microcontrollers, in active development since 2008.
It is designed as a single process, multiple threads kernel, that matches the capabilities of microcontrollers (i.e., the lack of an MMU). Applications are statically linked with the kernel and standard library forming one binary file suitable to be loaded onto a microcontroller.
Miosix is designed in a way to hide the boot process from the user. When main() is called, the kernel has already started. Indeed, main() itself is a thread. To achieve this result the initialization of the basic hardware functionalities required for the kernel to boot is coded in a board support package.
The kernel is licensed under the GPL license with an exception that allows it to be linked with propietary application code.
- Focus on C++ support, not just C.
- Support for the full C and C++ standard libraries, including the STL (using the newlib and libstdc++ libraries).
- Support for the standard POSIX thread API (currently threads, mutexes and condition variables).
- Effort on providing thread safe standard libraries and language features, such as C++ exception handling.
- Architecture-dependent code is separated from the kernel, making it easily portable to any 32bit microcontroller.
- Currently supports the STM32 and LPC2000 micrcontroller families.
- An API separates the scheduler from the kernel, allowing to have more than one scheduler in the same codebase, and compile-time scheduler selection.
- Currently supports a priority-based scheduler, an innovative scheduler based on control theory which is the subject of academic research, and the EDF scheduler.
- FAT32 filesystem implementation, integrated with the C/C++ libraries (e.g. files can be opened with the standard fopen()).
- mxusb: an USB device
library integrated with the kernel (e.g. allows to have threads waiting
for data on endpoints). Provides an innovative USB peripheral
autoconfiguration, based on USB descriptors.
Currently supporting STM32 microcontrollers.
a GUI library integrated with the kernel. Provides threadsafe drawing
primitives optimized for devices with too little RAM to allow double-buffering.
Allows multiple threads to render different parts of the screen simultaneously.
A pixel perfect simulator allows to test the GUI part of an application on a (Linux) PC, simplifying the process of designing an embedded user interface.
- Source code is well documented using Doxygen, and continuously tested by means of a testsuite distributed along with the kernel.
- Code size down to ~6KB of FLASH memory (on Cortex M3).
Featured videosAn example of using Miosix and mxgui to render a 3D object entirely in software and without double buffering on an STM32 microcontroller. Source code is provided here as one of the examples of the mxgui library.