One of our clients asked us to help them create a flexible logging library that would work on an Arduino. They were interested in the ability to control formatting and route the output to different endpoints, such as an SD card and over Bluetooth. We documented the process of creating this library, showing how it evolved …
Continue reading "Arduino Logging Library"
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 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. We just …
Continue reading "Arduino printf Library"
I was asked by a client write a logging library for a project using the Arduino SDK. Since the library will be open-source, I’m going to run an experiment and document the design, development, and feedback cycles on this project. My hope is to expose readers to a real development process, so you can see …
Continue reading "Building a Printf Library for Arduino"
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 …
Continue reading "An Embedded-friendly printf Implementation"
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 …
Continue reading "Enforce Correct Integer Arithmetic using the C++ Safe Numerics Library"
Today we have a guest post from Klemens Morgenstern, an embedded C++ consultant. You can learn more about Klemens on his website. Table of Contents: Regular Expressions for Embedded C++ A Quick Note on Versioning How to Get the Library Regex Matching a Number Compile time magic Matching a Protocol Frame Detection Fixed Frame Sizes …
Continue reading "Regular Expressions for Embedded C++"
We've been hard at work on our C++ embedded systems framework. A critical design requirement is that the framework core components do not utilize dynamic memory allocation. Unfortunately, this excludes most of the STL containers, as they get storage from the heap by default. Rather than reinventing the wheel, we spent some time searching for …
Continue reading "Embedded Template Library"
1 October 2018 by Phillip Johnston • Last updated 27 September 2019 Welcome to the October 2018 edition of the Embedded Artistry Newsletter! This is a monthly newsletter of curated and original content to help you build superior embedded systems. This newsletter is intended to supplement the website and covers topics not mentioned there. This month we’ll cover: Embedded Artistry’s C++ Framework ProjectThree more projects embedded developers should be aware ofEmbedded articles from around the webWebsite updates Embedded Artistry Framework Project Over the past two years in San Francisco, I’ve had the opportunity to consult with dozens of companies and …
Continue reading “October 2018: EA Framework Announcement & More Embedded Libraries”
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), …
Continue reading "EMB2: A C/C++ Framework for Multi-core and Multi-chip Embedded Systems"
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 …
Continue reading "crect: A C++14 Library for Generating a Stack Resource Policy Scheduler at Compile Time"