Skip to content
Daniel Heater edited this page Nov 9, 2015 · 15 revisions

Welcome to the libSPRITE wiki!

libSPRITE is built as middleware on top of the operating system and provides a number of services such as scheduling and data routing through a publish/subscribe system.

Libraries

Follow the links below to learn more about the various libraries that make up libSPRITE.

SRTX (Simple RunTime eXecutive)

SCALE (SRTX Configurability and Adaptability Language Extensions)

Platform Support

libSPRITE currently uses pthreads. It has been heavily used on Linux and to a much lesser extent on RTEMS. It should theoretical work on systems that compliant with POSIX and POSIX real-time extensions. Note that Unix emulators such as Cygwin do not support the necessary real-time extensions.

Caveats Regarding Real-Time Support

libSPRITE is built as middleware on top of the operating system. Therefore its real-time guarantees cannot be greater than that of the underlying operating system. However, for many applications that run at slower rates (>= 10Hz) Linux typically provides adequate support. You must always consider your application's processing and criticality requirements when determining if any system is "real-time enough" for you.

Design Rationale

These libraries were written with the intent of using them for spacecraft flight software, simulations, and other mission critical applications.

Determinism is emphasized over performance. Code should execute in a repeatable manner as much as possible. Even when moved to systems with varying numbers of cores.

One design constraint is the absence of RTTI and exceptions. This is done because some embedded flight systems do not support these features. This is also why the C++ standard library is avoided in the libSPRITE libraries. That does not mean that your applications cannot use these features. Use of the STL, boost, or whatever libraries you wish are fine within the applications you write. Nothing in libSPRITE constrains the decisions you make for your application. This has the effect in the libSPRITE codebase of having a limited subset of C++ (which I sometimes refer to as C+-).

Explicitness is encouraged. This is why we have a library for engineering units, and templated classes for pub/sub. Efforts are made to reduce chances that coding errors are introduced and improve the chance that code reviewers can detect errors early.

Getting Started

To get started, grab the latest release or clone the repository. Follow the instructions in the top level README.md file to build and install.

A Tutorial for developing applications using libSPRITE can be found here