An Embedded-friendly printf Implementation

We've worked on numerous embedded projects which avoid the use of printf() due to concerns about binary size bloat. Instead, teams will create their own non-standard printf alternative. A classic example is the Arduino SDK's Print class, which requires users to split print statements into multiple function calls to support different variable display formats. Rather …

Enforce Correct Integer Arithmetic using the C++ Safe Numerics Library

The Boost Safe Numerics library, created by Robert Ramey aims to enforce correct mathematical operations with the C++ language. Why are safer numeric operations needed? C++ inherited the behavior of the integral types (int, unsigned, long, etc.) from the C language, where they were designed to map closely to the underlying processor hardware. The types …

EMB2: A C/C++ Framework for Multi-core and Multi-chip Embedded Systems

EMB2 is a C/C++ framework developed by Siemens and the University of Houston. EMB2 provides generic building blocks for building multi-core or multi-chip embedded applications, including basic parallel algorithms, concurrent data structures, and application skeletons. Since EMB2 is targeted for embedded applications, it provides soft-real-time support, predictable memory consumption (no dynamic memory allocations after startup), …

crect: A C++14 Library for Generating a Stack Resource Policy Scheduler at Compile Time

The crect project (pronounced correct) is a C++14 library for generating a scheduler for Cortex-M microcontrollers at compile-time. crect uses the Cortex-M's Nested Vector Interrupt Controller (NVIC) to implement a Stack Resource Policy (SRP) scheduler which guarantees deadlock-free and data-race-free execution. crect is built upon the Kvasir Meta-programming Library, which is also the foundation of …

modm: Modular Object-Oriented Development for Microcontrollers

modm (Modular Object-oriented Development for Microcontrollers) is a C++14 framework built by Niklas Hauser and Fabian Greif. The modm project uses vendor-provided chip data with a library builder, enabling modm to automatically generate startup code, chip-specific drivers, external drivers, and BSPs for your platform. Since modm provides a portable HAL, you can easily migrate your …

foonathan/memory: Simplifying the C++ Memory Allocator

The memory library is developed by Jonathan Müller, a C++ library developer and author of foonathan::blog(). This library provides an new STL-compatible C++ memory allocator called RawAllocator. The RawAllocator is similar to the standard Allocator but is easier to use. The library also provides a BlockAllocator type which can be used for allocating large blocks …