Free Online Training Events
Free Technical Resources
4 days (In-Person) 8 hours per day or
5 sessions (Live Online) 6 hours per session
C++ has been a popular general-purpose programming language for many years. Recent developments in microcontroller technology (such as Arm Cortex®-M), increasing application complexity, and enhancements made since the C++ 2011 standard mean that C++ is now replacing C as the preferred language for many embedded systems.
DO YOU KNOW ENOUGH C TO ATTEND THIS TRAINING? TAKE OUR SELF-ASSESSMENT TEST
This course teaches modern C++ programming in the context of real-time and embedded systems, highlighting the resource and performance implications of using key C++ features and programming styles. In addition to providing delegates with an in-depth understanding of the C++ programming language, the course offers practical experience in programming a modern embedded microcontroller using real-time development tools. It is a direct replacement for a general class in modern C++ programming, with the added benefit that the syllabus, contextual examples and exercises are tuned to the requirements of the Embedded System and System-on-Chip communities.
Although Modern C++ for Embedded Microcontrollers focuses on the C++ language features that are appropriate for "bare metal" systems or those using a Real-Time Operating System (RTOS), the course is also suitable for anyone wishing to learn Modern C++ to develop applications within an Embedded Linux environment. C++ features such as stream-based I/O, which are generally only used with complex operating systems, are included in an optional module that can be presented if there is sufficient time and interest.
Approximately 50% of class time is dedicated to carefully designed hands-on exercises to reinforce and challenge the extent of learning. These involve programming and debugging a real embedded system.
This course utilizes the Doulos Board Farm, for you to practically apply what you learn. Find out more in this video:
Modern C++ for Embedded Microcontrollers is aimed at electronic hardware, software and system-on-chip engineers who need to gain a working knowledge of the modern C++ language to build an embedded system.
The course is also suitable as a general introduction to C++ programming, particularly for anyone working in the field of embedded systems.
Attendees need a basic understanding of embedded systems, microcontroller architecture, and how to read a datasheet.
A good working knowledge of C is essential. Attendees should either have:
This course is not suitable as a first course in computer programming.
Take this SELF-ASSESSMENT TEST to find out whether you know enough C.
Please contact Doulos directly to discuss and assess your specific experience against the Pre-requisites.
Doulos Course materials are renowned for being the most comprehensive and user friendly available. Their style, content and coverage is unique in the HDL training world, and has made them sought after resources in their own right. Fees include:
This course uses real hardware development boards set up on a remote location and accessible via an internet browser.
LCD displays and LEDs are observable via a camera, and development board buttons are controlled using programmable relays.
Each student will have remote access to a workstation connected to an embedded device. Industrial-grade software will be pre-installed and ready to use on the first day of class.
Embedded system characteristics • Language choice • Memory mapped peripherals • Volatile variables • Compilation • System boot-up • Best Practices
The features added to C by C++ standards including C++11/14/17, highlighting features useful to an embedded system • versions • inline • const • Enhanced enumerations • constant expressions • using • uniform initialization • random • Overview of I/O streams • Function prototypes • Pass-by-reference • Default arguments • Function and operator overloading • String class • Raw string literals
Learn some tricky features often overlooked in C, but necessary for C++ • Scope • Linkage • Linking C and C++ • Header files • Namespaces • User-defined literals • auto • Static, automatic and dynamic storage • new and delete • Placement new • Arrays and Pointers • Vectors
Introduction to modeling and abstraction • Information hiding • Abstract data types • Classes and objects • Public and private class members • Member functions • Scope resolution • this pointer
How to ensure that objects are properly initialised, and how to tidy up afterwards • Constructors • Destructors • Delegating constructors • Copy constructors • Pointers and objects • Move semantics
More features of C++ classes • Friends • Operator overloading • Overloading assignment • Move assignment • Memory fragmentation • Working with memory pools • Rule of Zero & Rule of Five • Static members • Constant objects and members
Derived classes • Inheritance • Protected members • Casting pointers • Order of initialization
Inheriting common behavior • Overriding methods • Virtual functions • Polymorphism • Late binding • Virtual destructors • Vtable • Cost of virtual functions • Abstract base classes and pure virtual functions • Interface classes
User-defined conversions • Explicit functions • Defaulted and deleted behavior • Run-Time Type Identification • Type casts • Nested classes • Multiple Inheritance • Pointer-to-member •Function wrapper
Function templates • Class templates • Template arguments • Template specialization • Dependent name and type lookup • Avoiding code bloat
Summary of the standard C and C++ libraries • Container classes • map • set• unordered_map • unordered_set • Container adapters • Creating and accessing containers • Initializer lists • Common Container Methods • Custom allocators • std::array • Other C++11 Enhancements • Iterators • range-for loop • Predicates • Function Objects • Bind • Lambda Functions • Filling a container • Non-modifying operations • transform • Searching • Sorting • Summary of the standard algorithms
Coding standards • Code analysis • Compile-time assertions • Run-time errors • Throwing and catching exceptions • Handlers • Standard exception classes • Preventing memory leakage • unique_ptr • Exception specification • Exceptions in Embedded Systems
This session explores C++ libraries in more depth focusing on use with embedded systems • complex • bitset • list • forward_list • dequeue • s • string_view • span • format • variant • optional • expected • chrono • atomic • thread • mutex
The following appendices may be given as lectures if time allows. Team-based sessions may select one or more of these as part of their delivery, with timing adjustments.
Reviews the C programming language.
Reviews the features of the development board used in exercises.
Concurrency • Tasks and task switching • FreeRTOS • Creating and running tasks • Synchronization • Process scheduling and pre-emption • Priority inversion • Mutex, Semaphore, and Queue • Use of semaphores with interrupts • RTOS services
State machine representations • Single class state machine • State Design Pattern • Boost mpl example
Common design patterns used in C++.
Compiler Optimization • Object files • Linkers and linker files • Loader • Makefiles • Integrated development environments • Debuggers • In-circuit emulation • Debug with Simulator/Emulator
Learn the principles of unit-test • Mocking
Another look at string class • I/O stream hierarchy • Formatted and unformatted streams • I/O of user-defined types • Manipulators • File Streams • Buffering • Stringstreams
28 Jul 2025 | ONLINE Americas | Enquire |
18 Aug 2025 | ONLINE EurAsia | Enquire |
29 Sep 2025 | ONLINE Americas | Enquire |
06 Oct 2025 | ONLINE EurAsia | Enquire |
13 Oct 2025 | Munich, DE | Enquire |
10 Nov 2025 | Ringwood, UK | Enquire |
01 Dec 2025 | ONLINE EurAsia | Enquire |
08 Dec 2025 | ONLINE Americas | Enquire |
Complete an enquiry form and a Doulos representative will get back to you.
Enquiry FormPrice on request