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

Goal

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 if 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

Exercises

Miscellaneous

  • 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

Exercise

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