/* SPDX-License-Identifier: BSD-2-Clause */ /** * @file * * @brief This file exists to provide a top level description of RTEMS for * Doxygen. */ /* * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /** * @mainpage * * The Real-Time Executive for Multiprocessor Systems (RTEMS) is a * multi-threaded, single address-space, real-time operating system with no * kernel-space/user-space separation. It is capable to operate in an SMP * configuration providing a state of the art feature set. * * RTEMS is licensed under a [modified GPL 2.0 or later license with an * exception for static linking](https://git.rtems.org/rtems/tree/LICENSE>). * It exposes no license requirements on application code. The third-party * software used and distributed by RTEMS which may be linked to the * application is licensed under permissive open source licenses. Everything * necessary to build RTEMS applications is available as open source software. * This makes you completely vendor independent. * * The goal is to use the [BSD 2-Clause * license](https://git.rtems.org/rtems/tree/LICENSE.BSD-2-Clause) for new code * or code those copyright holder agreed to a license change, see * [#3053](https://devel.rtems.org/ticket/3053) for the details. * * RTEMS provides the following basic feature set: * * - @ref RTEMSAPI * * - POSIX with * [pthreads](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html) * (enables a broad range of standard software to run on RTEMS) * * - @ref RTEMSAPIClassic * * - C11 (including * [thread](https://en.cppreference.com/w/c/thread) support) * * - C++11 (including * [thread](https://en.cppreference.com/w/cpp/thread>) support) * * - Newlib and GCC internal * * - Programming languages * * - C/C++/OpenMP (RTEMS Source Builder, RSB) * * - Ada (RSB, ``--with-ada``) * * - Erlang * * - Fortran (RSB, ``--with-fortran``) * * - Python and MicroPython * * - Parallel languages * * - [Embedded Multicore Building Blocks](https://embb.io/) * * - [OpenMP](https://www.openmp.org/) * * - Thread synchronization and communication * * - Mutexes with and without locking protocols * * - Counting semaphores * * - Binary semaphores * * - Condition variables * * - Events * * - Message queues * * - Barriers * * - [Futex](@ref RTEMSScoreFutex) (used by OpenMP barriers) * * - Epoch Based Reclamation (libbsd) * * - Locking protocols * * - Transitive Priority Inheritance * * - OMIP (SMP feature) * * - Priority Ceiling * * - MrsP (SMP feature) * * - Scalable timer and timeout support * * - Lock-free timestamps (FreeBSD timecounters) * * - Responsive interrupt management * * - C11/C++11 Thread-Local Storage (TLS) * * - Link-time configurable schedulers * * - Fixed-priority * * - Job-level fixed-priority (EDF) * * - Constant Bandwidth Server (experimental) * * - Clustered scheduling (SMP feature) * * - Flexible link-time configuration * * - Job-level fixed-priority scheduler (EDF) with support for one-to-one * and one-to-all thread to processor affinities (default SMP scheduler) * * - Fixed-priority scheduler * * - Proof-of-concept strong APA scheduler * * - Focus on link-time application-specific configuration * * - Linker-set based initialization (similar to global C++ constructors) * * - Operating system uses fine-grained locking (SMP feature) * * - Dynamic memory allocators * * - First-fit (default) * * - Universal Memory Allocator * ([UMA](https://www.freebsd.org/cgi/man.cgi?query=uma&sektion=9), * libbsd) * * - File systems * * - IMFS * * - FAT * * - RFS * * - NFSv2 * * - JFFS2 (NOR flashes) * * - [YAFFS2](https://git.rtems.org/sebh/rtems-yaffs2.git/) * (NAND flashes, GPL or commercial license required) * * - Device drivers * * - Termios (serial interfaces) * * - I2C (Linux user-space API compatible) * * - SPI (Linux user-space API compatible) * * - Network stacks (legacy, libbsd, lwIP) * * - USB stack (libbsd) * * - SD/MMC card stack (libbsd) * * - Framebuffer (Linux user-space API compatible, Qt) * * - Application runs in kernel-space and can access hardware directly * * - [libbsd](https://git.rtems.org/rtems-libbsd/) * * - Port of FreeBSD user-space and kernel-space components to RTEMS * * - Easy access to FreeBSD software for RTEMS * * - Support to stay in synchronization with FreeBSD */