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#

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#