C++ For Embedded Developers (2023-03-20 - 2023-03-23)


Give an idea how an experienced C programmer can benefit from the C++ toolcase. The following aspects are covered, accompanied with many exercises.

  • C++ is an object oriented language. That term alone has many facets, and a solid understanding of each is given. Constructors, destructors, automatic pointer/base-class conversion, late binding (“abstract”?), and all that.

  • C++ also brings a rich toolset in form of its standard library. After a short conceptual introduction, containers and algorithms are something that is immediately useful for non-OO programmers.

  • C++ does not stop there; starting from its 2011 definition, the language has undergone a major revolution. An overview is given.

Work Environment

Preferred: Ubuntu under Windows (WSL)

I suggest you use the Windows Subsystem For Linux (WSL2) (Microsoft documentation here). This sets up a virtualized Ubuntu inside Windows, together with all interoperability wazoo.

When installed, open a Ubuntu terminal, and install the software that is required for this training.

$ sudo apt update
$ sudo apt install git build-essential cmake libgtest-dev libgmock-dev

Unsupported Environments

It is also possible to setup a Linux-like environment on native Windows, using the following emulation layers:

  • Cygwin

  • MinGW (known to have problems when it comes to threading)

You may use these, but be warned that there might not exist enough trainer-side knowledge to help you out f anything goes wrong.

Skeleton Project Setup

Follow the instructions in the course project README to setup the initial version of the course project.

Day 1

Classes, Objects, Methods



  • One Definition Rule (ODR), and static inline class members: static Member Variables

  • constexpr explored. How is it used to populate the rodata section and save RAM?

  • Global objects from different compilation units are initialized in unspecified order. See here.

Day 2

Heavy Weight OO 💪

Resource Management Pitfalls

Day 3

R-Value References/Moving, And Managed Pointers

A Little Concurrency


Based upon an object oriented encapsulation for OS primitives (timers and GPIOs, mainly),

  • Sensors

    • A sensor abstract base class - an interface

    • A number of concrete sensor implementations

    • A configured set of those, measuring live data

    • Live data is posted via another interface

  • Display(s)

    • Another interface in the system

    • Display measurement values

    • Concrete implementation: a software PWM using a timer and a GPIO (as opposed to hardware PWM

Untold So Far

C++ Standard Library

Miscellaneous Topics