Shopping Cart :Check Out

C++ for System Developers using Linux


This course introduces the C++ language for use on real time and embedded applications. The first part of the course focuses on the language itself, highlighting areas of concern for real-time and embedded development. The latter part covers the application of C++ to real-time systems including interrupt handling and concurrency issues. If a C++ course does not cover these fundamental issues you may find you still have a lot to learn after the training. Attendees perform hands on Advance programming, on Linux and GC++ for the labs. Approximately 50% of the course is given over to practical work.

Course Overview

C++ is not used generally for embedded projects, until recently most C++ cross compilers were actually "Embedded C++" (EC++) compilers or were typically inefficient in the more advanced areas of the language. To date, a high proportion of programmers using C++ for embedded development have either been unable or have chosen not to use certain features of C++ due to fear of bloated, slow code with poor performance.


* Experience of programming with C++ or C Programming.


*4-5 Days

Course Contents

Embedded C++ Introduction to Object Oriented Principles Introduction to Classes
Why Embedded C++ was developed Introduction to the key characteristics of object Classes, class instances, methods,constructors and destructors
Embeded C++ features Oriented software development How to structure code separating interface from implementation
Why object oriented techniques can improve the real time software development process C++ stream I/O
Inheritance Functions and Operators Class Members
Using inheritance to build class hierarchies References Singleton Classes
Dynamic binding for class methods, virtual functions Class defined converstions Virtual Functions
C++ dynamic memory allocation Overloading and function selection internals
Polymorphism Friend functions Dual Dispatching
Overloading Operators Casting Internals
Unary operator overloading Object Slicing
binary operator overloading Virtual Inheritance
Dynamic memoryallocation revisited Exception handling
Assignment what are exceptions
Copy Constructors Throwing an exception
The try block
Catching an exception
Rethrowing exceptions
Catch all handlers
Templates Optimizing code Exception Specifications
Introduce parameterised types and functions introduction Exception models and overheads
Function templates Before Optimizing Your Software Runtime type identification
Class templates Declaration Placement introduction
Performance implications Inline Functions structure of this chapter
The Standarad Library Optimizing Memory Usage RTTI Constituents
Introduction to the Standard Library Speed Optimizations The Cost of Runtime Type Information
Template with friend, inheritance A Last Resort
Software Structuring Real-Time Specifics Interrupt Programming
How large scale software systems may be structured Introduce the low level facilites of C++ including Introduction to writing interrupt Service Routines in C++
Separate implementation from interface header files Accessing hardware Function approach
Dealing with name conflicts Manipulating information at the bit level Class approach
Linking with other languages Synchronizing I/O with CPU via
Concurrency Interrupts Target Specific Considerations
Concurrency Examine Runtime Application's memory layout Data types
Scheduling strategies Code Segment Language features affecting portability
Sharing resources in multi-tasking systems Data segment Non Standard C++ Language featurs
Synchronizing tasks Stack, Heap,Bss,data Assembly language interfacing
Transferring data between tasks Cpu Registers Designing ROMable Objects
Static link library vis Dynamic link library
Object initialization & Cleanup
Compiler synthesized Constructor & Destructor
Deep Copy vis Shallow copy
Explicit constructor
Copy Constructor w/s Assignment operator
Initialization w/s Assignment
Order of Initialization
Dynamic Memory Management
Types of Storage
POD(Plain Old Data) and non-POD Objects
The Lifetime of a POD Object
The Lifetime of a non-POD Object
Allocation and De-allocation Functions
malloc() and free()Versus new and delete
Exceptions during object Constructions
Alignment Considerations
The Size of A Complete Object Can Never Be Zero
Overloading new and delete in a class
Guidelines for Effective Memory Usage
Explicit intilizations of POD Object
Data Pointers Versus Function Pointers
The const and volatile Properties of an Object

Training Programs