"Barr Group training courses should be required before writing any embedded code."

General Dynamics

Test Your Skills

Test your embedded programming skills in our online Embedded C Quiz or Embedded C++ Quiz and be entered to win a How to Prioritize RTOS Tasks DVD.

Test Your Skills

Newsletter Signup

Receive Michael Barr's Firmware Update ® newsletter for free how-to articles and industry news by e-mail. Sign up now.

Embedded Programming Language Courses

The development of embedded software is generally done in C or C++. Though there are literally hundreds of books on C and C++ programming, only a handful address the use of these languages to interface directly to sensors, A/D converters, motors, pushbuttons, and LCD displays. This sort of hardware interface code must be uniquely developed for each embedded system. The courses below address these and other language-specific issues.

Hardware Interfacing with C
The development of device drivers and embedded software is full of challenges. But it is possible to write easy-to-read portable C code to control peripherals ranging from simple timers and UARTs to complex custom FPGAs. This important course covers a large number of subjects ranging from C startup code and the “world before main()” to the development of interrupt-based device drivers that interact with peripheral control and status registers through memory-mapped I/O, overlayed structs, and bitfields (more).

Embedded Programming with C++
There are a variety of useful techniques for developing robust and efficient embedded software in the C++ programming language. Unfortunately, most firmware developers either use C++ poorly or stay away from the language because they don’t know these techniques. This course covers representing and manipulating peripherals as C++ classes, writing interrupt handlers in C++, and tuning system performance (more).

Real-Time Programming with Java
It is said that the creator of the Java programming language envisioned embedded systems as the target application. Certainly, Java’s built-in thread awareness, prevention of memory leaks, and security model are attractive features for the designers of real-time systems. Unfortunately, the standard Java virtual machines are extremely large and non-deterministic. This course demonstrates that, with the correct JVM, real-time Java programming is possible and powerful. Among other things, students will learn how to tune a garbage collector and develop multithreaded programs in Java (more).

To request pricing or dates, or for more information about these courses, contact us.