Seminar on C++ Development in the Embedded System

The course requires a basic understanding of C++ and discusses the special features of the language for embedded software development. C++ is more and more pushed out of the classic areas of software development. In the evolution of application software and server services, Java & Co have meanwhile surpassed the C++ language. Even the technology leadership in the object-oriented software development is now owned by Java. On the other hand, these new languages cannot be used in many areas of the embedded development for different reasons. An major cause is the lack of a deterministic runtime behavior. Other reasons are the huge resource consumption and the unfavorable startup behavior of Java applications. C++ shares determinism with C - the classical language of system development and embedded programming. In resource requirements and startup behavior, C++ programs can be configured just as efficiently as C programs. It is due to the development of high performing hardware and flexible compilers - GCC above all - that C++ breaks in more and more into C domains. So C++ is not disappearing from the market, it is rather experiencing a renaissance in embedded programming. The use of C++ in the industry stands nowadays on a broader technology basis than twenty years ago when C++ was used mainly for the creation of GUI surfaces. Software developers must be aware of this change in the use of C++ if they would like to be successful. This seminar covers essential areas of the use of C++ in embedded software development. Especially the questions of runtime behavior, footprints and code coverage of C++ code are being addressed.

The following subject matters are covered:

  • Historical Evolution of C++
  • Basic Syntax
  • Getting to know the Compiler and the Linker
  • The parts of the C language in C++
  • Standard data types
  • Structures
  • Operators
  • Functions
  • Pointers and References
  • Dynamic Memory Allocation
  • Class Concept
  • Data Encapsulation
  • Attributes and Methods
  • Object Instantiation
  • Constructors and Destructors
  • Function Overloading
  • Operator Overloading
  • The C++ Name Mangling
  • Type Converting
  • Visibility Concept
  • Inheritance
  • Polymorphism
  • Virtual Methods
  • Abstract Classes
  • Multiple Inheritance
  • Exception Handling
  • Templates
  • Function Templates
  • Class Templates
  • Storage Classes in C++
  • Meaning of Heap and Stack
  • The System Memory Management
  • External and static linkability
  • The Role of Linker for an Efficient Code
  • The Interaction between Compiler and Linker
  • Structure of C++ Projects
  • Object Files and Libraries
  • The Interaction between Compiler and Linker
  • Dynamic Libraries
  • Considerations on Runtime Behaviors
  • Language Standard and Compiler Behavior
  • ANSI/ISO C++ 98/11/14/17
  • EC++
  • The Structure of the C++ Standard Library
  • …and more

The Following Questions are Covered:

  • How does C++ compare to C in embedded systems?
  • What decisions does the ANSI C++ standard make for the embedded development?
  • What basic mistakes can you make using C++?
  • What solutions does the EC++ standard offer?
  • What consequences do different storage management strategies for application data have on the general system?
  • What practical consequences do physical and virtual storage management have on the software design?
  • What does memory fragmentation mean and how do you handle problems with it?
  • What are the effects of using polymorphism on program code run time and size?
  • How can you use templates?
  • What runtime aspects do you have to be consider when using the standard template library?
  • How can exception handling be used in the embedded system?
  • What are the effects of exception handling on run time, footprint and code structure?
  • What framework conditions apply for the development of concurrent systems?
  • What does tracing and logging mean for temporal behavior?

Any ANSI/ISO C++ compiler can be used - preferably GCC C++. According to your needs, exercises can be performed directly on an embedded system. For this purpose there are different solutions, from real hardware to simulation. If a special system is to be used, the framework conditions and its feasibility still need to be agreed before the course. I very much like to use QNX and Embedded Linux. The course can also be held with examples that you can run on PCs using Windows, Linux, or Mac OS X.

Last modified 10.07.2021