Skip to content

intel/cpp-baremetal-senders-and-receivers

C++ Bare Metal Senders and Receivers

Unit Tests

WARNING: Work in Progress!

This library is under active development. It is a work in progress and has not yet been proved in production. Proceed at your own risk.

Abstract

C++ Bare Metal Senders and Receivers is a C++ header-only library that partially implements P2300, the proposed C++ standard design for asynchronous computation.

This implementation is intended for use on bare metal microcontrollers and implements a subset of the standard design. P2300 does encourage implementations not to do any runtime allocation, and that is fine for bare metal. But some notable differences here from the standard proposal are:

  • This implementation does not deal with exceptions in any way. An error is just an error value.
  • Coroutines are not considered at all. This implementation does not preclude coroutines as senders, but in a bare metal environment, the lack of non-allocation guarantees currently makes using coroutines an uncertain proposition at best.
  • Generalized tag dispatch may be missing for some functions.

In general, although the P2300 design allows mechanism-agnostic handling of concurrency, the main mechanism of concurrency targeted by this library is interrupts. A careful reading of [intro.multithread] is recommended to understand how the C++ memory model defines well-formed concurrent execution.

C++20 is required. The following compilers are supported:

  • clang 14 through 18
  • gcc 12 through 13

See the full documentation.

About

An implementation of C++ "senders and receivers" async framework suitable for embedded platforms.

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published