Available on-demand and live online in March-April 2024 (See FAQ for dates)
Object-oriented programming concepts, such as inheritance, polymorphism, and encapsulation, can be challenging for C programmers who are used to a more procedural programming style. Therefore, this course is designed specifically for embedded software developers who already have experience with the C programming language and want to learn C++.
The focus of the course will be on applying C++ to the development of embedded systems. We will cover topics such as basic classes, objects, constructors, inheritance, and polymorphism. In addition, attendees will learn how to design object-based applications using UML class diagrams and relate them to C++ code implementation.
Topics covered in this course include:
- Introduction to C++ for Embedded Software Development
- Basics of Classes and Objects, Constructors and Destructors Inheritance and Polymorphism
- UML Class Diagrams for Object-Oriented Design
- Templates and Static Polymorphism
- Hands-on exercises using class relationships and real-world use cases for embedded systems
By the end of the course, participants will have a solid understanding of C++ classes and objects. You’ll be able to use this knowledge to design and implement object-oriented programs for embedded systems.
Note: The total run-time for this course is approximately 1 - 1.5 days. While it covers essential foundational concepts, additional study, and experience will be required to master C++ for embedded systems.
Detailed Course Outline
Session 1: Introduction to C++ for Embedded Software Development
In this session, you will learn how C++ fits into the modern development process for embedded systems. We will cover a wide range of topics, including:
- Modern Embedded System Needs
- Programming Language Options
- Advantages and disadvantages of C++ in embedded systems
- Modern build systems
- The compilation process
- Microcontroller boot process
- C++ coding standards and enforcement
- Options for moving to C++
- Best practices
Lab: C++ toolchains and builds
Attendees will use Microsoft visual studio code along with Docker to explore and build a basic C++ application.
Bonus Lecture: Successful Embedded Software Development
Session 2: Basics of Classes and Objects, Constructors and Destructors
In the session, you will learn the fundamentals of object-oriented programming, focusing on the basics of classes and objects. Topics covered in the session include:
- Object-oriented programming concepts in C++
- Object representation in UML class diagrams
- Creating classes and objects in C++
- The difference between classes and objects
- Constructors and destructors in C++
- Access control: public, protected, and private
- Best Practices
Lab: Writing a blinky LED application
Attendees will use the build toolchain from the session 1 lab to develop an LED class and application that blinks an LED.
Session 3: Inheritance and Polymorphism
In this session, you will learn about class inheritance and run-time polymorphism. Topics covered in the session include:
- Understanding inheritance in C++
- Using inheritance to model class relationships
- Polymorphism: virtual functions and abstract classes
- How to develop interfaces and hardware abstraction layers
- Essential concepts such as SOLID principles
- Best Practices
Lab: Enhancing a blinky LED application
Attendees will use their C++ build toolchain to develop an application that uses polymorphism to blink an LED simulated on a host and hardware through a GPIO peripheral and a PWM peripheral. In addition, you’ll get the opportunity to design and implement a hardware interface and leverage dependency injection.
Session 4: UML Class Diagrams for Object-Oriented Design
This session will teach you how to develop a software architecture design using UML class diagrams. You’ll learn about the different relationships that classes can have, how to indicate those relationships, and how to implement them in code. Topics covered in this session include:
- Overview of the UML class diagram
- Understanding UML class diagrams
- Translating class diagrams into C++ code
- Class associations and relationships
- Class composition and aggregation
- Best Practices
Lab: Class Application Design and Implementation
Attendees will design a class diagram for a simple embedded application and then implement the application. Finally, you’ll implement the various class relationships discussed during the lecture and create a scalable and flexible C++ application.
Session 5: Templates and Static Polymorphism
In this session, you will learn about templates and their use to achieve static polymorphism. Topics covered in this session include:
- An introduction to templates
- Templates class design
- Type checking in templates
- Templates in UML
- Static Polymorphism versus Dynamic Polymorphism
- Best Practices
- Next steps
- Additional resources
- Mastering C++ for embedded systems
Frequently Asked Questions (FAQ)
1) Will the recording be available?
Yes. The recording will be made available after each session
2) How long will I have access to the materials?
You will have access to the materials indefinitely. The goal is to provide you with a quality, professional class you can reference to refresh the concepts as needed.
3) How do I access the course?
The course is hosted on Jacob’s Kajabi site. You’ll receive a login and instructions upon signing up. Live sessions use Zoom.
4) When are the live sessions scheduled?
The 2024 Spring Live sessions will take place on the following days:
March 21, 2024 @ 11 – 12:30 ET
April 4, 2024 @ 11 – 12:30 ET
April 18, 2024 @ 11 – 12:30 ET
April 25, 2024 @ 11 – 12:30 ET
May 9, 2024 @ 11 – 12:30 ET
Recordings are provided and if you are unable to make these dates, you can still take this course on-demand.
5) Can my entire team attend?
Yes. There are various course licensing options available. In general, we provide one login and access per person. However, if you have a team, please contact [email protected] to discuss the best options.
6) What development board is used for the course?
You’ll be able to apply these techniques to any development board; However, the class examples will use an STM32L475 IoT Discovery Board. All of Jacob’s courses currently use this board. However, with slight modifications, you can use any ST board, or any development board you have at your disposal. (Sorry, we won’t support issues encountered with other development boards).
7) Are there hands-on labs?
Yes, this course includes hands-on exercises.