Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:11

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSImplDoxygen
0007  *
0008  * @brief This file exists to provide a top level description of RTEMS for
0009  *   Doxygen.
0010  */
0011 
0012 /*
0013  * Copyright (C) 2021 embedded brains GmbH & Co. KG
0014  * Copyright (C) 1989, 2014 On-Line Applications Research Corporation (OAR)
0015  *
0016  * Redistribution and use in source and binary forms, with or without
0017  * modification, are permitted provided that the following conditions
0018  * are met:
0019  * 1. Redistributions of source code must retain the above copyright
0020  *    notice, this list of conditions and the following disclaimer.
0021  * 2. Redistributions in binary form must reproduce the above copyright
0022  *    notice, this list of conditions and the following disclaimer in the
0023  *    documentation and/or other materials provided with the distribution.
0024  *
0025  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0026  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0027  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0028  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0029  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0030  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0031  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0032  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0033  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0034  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0035  * POSSIBILITY OF SUCH DAMAGE.
0036  */
0037 
0038 /**
0039  * @mainpage
0040  *
0041  * The Real-Time Executive for Multiprocessor Systems (RTEMS) is a
0042  * multi-threaded, single address-space, real-time operating system with no
0043  * kernel-space/user-space separation.  It is capable to operate in an SMP
0044  * configuration providing a state of the art feature set.
0045  *
0046  * RTEMS and all third-party software distributed with RTEMS which may be
0047  * linked to the application is licensed under permissive open source licenses.
0048  * This means that the licenses do not propagate to the application software.
0049  * Most of the original RTEMS code is now under the [BSD 2-Clause
0050  * license](https://gitlab.rtems.org/rtems/rtos/rtems/-/blob/main/LICENSE.md).
0051  * Some code of RTEMS is under a legacy license, the [modified GPL 2.0 or later
0052  * license with an exception for static
0053  * linking](https://gitlab.rtems.org/rtems/rtos/rtems/-/blob/main/LICENSE.md).
0054  * It exposes no license requirements on application code.  Everything necessary
0055  * to build RTEMS applications is available as open source software.  This makes
0056  * you completely vendor independent.
0057  *
0058  * RTEMS provides the following basic feature set:
0059  *
0060  * - @ref RTEMSAPI
0061  *
0062  *     - POSIX with
0063  *       [pthreads](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html)
0064  *       (enables a broad range of standard software to run on RTEMS)
0065  *
0066  *     - @ref RTEMSAPIClassic
0067  *
0068  *     - C11 (including
0069  *       [thread](https://en.cppreference.com/w/c/thread) support)
0070  *
0071  *     - C++11 (including
0072  *       [thread](https://en.cppreference.com/w/cpp/thread>) support)
0073  *
0074  *     - Newlib and GCC internal
0075  *
0076  * - Programming languages
0077  *
0078  *     - C/C++/OpenMP (RTEMS Source Builder, RSB)
0079  *
0080  *     - Ada (RSB, ``--with-ada``)
0081  *
0082  *     - Erlang
0083  *
0084  *     - Fortran (RSB, ``--with-fortran``)
0085  *
0086  *     - Python and MicroPython
0087  *
0088  * - Parallel languages
0089  *
0090  *     - [Embedded Multicore Building Blocks](https://embb.io/)
0091  *
0092  *     - [OpenMP](https://www.openmp.org/)
0093  *
0094  * - Thread synchronization and communication
0095  *
0096  *     - Mutexes with and without locking protocols
0097  *
0098  *     - Counting semaphores
0099  *
0100  *     - Binary semaphores
0101  *
0102  *     - Condition variables
0103  *
0104  *     - Events
0105  *
0106  *     - Message queues
0107  *
0108  *     - Barriers
0109  *
0110  *     - [Futex](@ref RTEMSScoreFutex) (used by OpenMP barriers)
0111  *
0112  *     - Epoch Based Reclamation (libbsd)
0113  *
0114  * - Locking protocols
0115  *
0116  *     - Transitive Priority Inheritance
0117  *
0118  *     - OMIP (SMP feature)
0119  *
0120  *     - Priority Ceiling
0121  *
0122  *     - MrsP (SMP feature)
0123  *
0124  * - Scalable timer and timeout support
0125  *
0126  * - Lock-free timestamps (FreeBSD timecounters)
0127  *
0128  * - Responsive interrupt management
0129  *
0130  * - Thread-Local Storage (TLS) as specified by C11/C++11 and later standard
0131  *   revisions
0132  *
0133  * - Link-time configurable schedulers
0134  *
0135  *     - Fixed-priority
0136  *
0137  *     - Job-level fixed-priority (EDF)
0138  *
0139  *     - Constant Bandwidth Server (experimental)
0140  *
0141  * - Clustered scheduling (SMP feature)
0142  *
0143  *     - Flexible link-time configuration
0144  *
0145  *     - Job-level fixed-priority scheduler (EDF) with support for one-to-one
0146  *        and one-to-all thread to processor affinities (default SMP scheduler)
0147  *
0148  *     - Fixed-priority scheduler
0149  *
0150  *     - Proof-of-concept strong APA scheduler
0151  *
0152  * - Focus on link-time application-specific configuration
0153  *
0154  * - Linker-set based initialization (similar to global C++ constructors)
0155  *
0156  * - Operating system uses fine-grained locking (SMP feature)
0157  *
0158  * - Dynamic memory allocators
0159  *
0160  *     - First-fit (default)
0161  *
0162  *     - Universal Memory Allocator
0163  *       ([UMA](https://www.freebsd.org/cgi/man.cgi?query=uma&sektion=9),
0164  *       libbsd)
0165  *
0166  * - File systems
0167  *
0168  *     - IMFS
0169  *
0170  *     - FAT
0171  *
0172  *     - RFS
0173  *
0174  *     - NFSv2
0175  *
0176  *     - JFFS2 (NOR flashes)
0177  *
0178  *     - [YAFFS2](https://gitlab.rtems.org/sebhub/rtems-yaffs2)
0179  *       (NAND flashes, GPL or commercial license required)
0180  *
0181  * - Device drivers
0182  *
0183  *     - Termios (serial interfaces)
0184  *
0185  *     - I2C (Linux user-space API compatible)
0186  *
0187  *     - SPI (Linux user-space API compatible)
0188  *
0189  *     - Network stacks (legacy, libbsd, lwIP)
0190  *
0191  *     - USB stack (libbsd)
0192  *
0193  *     - SD/MMC card stack (libbsd)
0194  *
0195  *     - Framebuffer (Linux user-space API compatible, Qt)
0196  *
0197  *     - Application runs in kernel-space and can access hardware directly
0198  *
0199  * - [libbsd](https://gitlab.rtems.org/rtems/pkg/rtems-libbsd)
0200  *
0201  *     - Port of FreeBSD user-space and kernel-space components to RTEMS
0202  *
0203  *     - Easy access to FreeBSD software for RTEMS
0204  *
0205  *     - Support to stay in synchronization with FreeBSD
0206  */