LibmCS - Mathematical library for critical systems
LibmCS Mathematical Library and Qualification Data Package
Mathematical libraries are used in nearly any Flight Software and in particular in the AOCS/GNC and scientific algorithms. The common practice to manage the mathematical functions in a flight software project is to isolate well known and established functions from libraries like libm from newlib, and to characterize these functions with respect to input ranges, errors, and performance. This common practice doesn’t typically cover corner cases where some of these functions might reveal an unexpected behavior in term of accuracy or timing.
The objective of the LibmCS is to provide a mathematical library for embedded and critical systems pre-qualified to ECSS software criticality category B where:
- The set of the provided functions is the one required by the ISO C and POSIX standards and the library is compliant to the floating point arithmetic standard IEEE-754.
- The compatibility with the qualified RTEMS SMP and EDISOFT RTEMS 4.8 is ensured.
- The compatibility with SPARC V8 processors (such as LEON2, LEON3, and LEON4) and x86 is ensured (any other processor architecture such as ARM or RISC-V will also be supported as long as a standard C cross compiler is provided).
The qualification toolkit of the LibmCS includes:
- The source code of the LibmCS.
- The test suite to qualify the library on a project specific target platform.
- Full set of ECSS E-ST-40 and Q-ST-80 compliant life cycle documentation for both the library and the test suite.
- Qualification evidence on the baseline targets for the pre-qualification carried out: the AT697 LEON2, GR712RC LEON3, N2X LEON4, GR740 LEON4 using GCC based cross compilers.
The library source code, user manual, and design documentation are freely available at: https://gitlab.com/gtd-gmbh/libmcs (see link in the right column).
The qualification kit can be obtained from GTD GmbH (contact firstname.lastname@example.org), and is free for ESA missions, and is aligned with release v1.2.0 of the LibmCS.