"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 Software Architecture Courses

The development of embedded software frequently requires engineers to make difficult tradeoffs. Should you use a real-time operating system or some alternative design approach? If an RTOS is appropriate, which one is the best fit for your system? Finally, how can you most effectively divide your software up into parallel-running tasks?

Embedded Software Architecture
Most efforts to improve software quality focus exclusively on process improvements, such as adoption of coding standards and better use of static analysis tools, code reviews, and testing. But poor software quality also results from bad decisions about the architecture of that software. Thus software architecture is an area for your team to understand better and architecture improvements can be among the easiest ways to increase software quality. This course teaches software architecture with a focus specifically on real-time and embedded software. (more)

Multithreaded RTOS Programming
There is a lot of misinformation about multithreaded programming and the use of real-time operating system features. Misinformation and programmer inexperience often leads to poor task decomposition and introduces system failures such as task starvation, deadlock, and priority inversion. This course teaches the proper use of C and RTOS APIs to develop multithreaded software. Variants of the course cover specific RTOS APIs and features, such as VxWorks and µC/OS-II (more).

Event-Driven Programming and State Machines
Once learned, the technique of event-driven programming is a fun and easy way to write reliable and maintainable embedded software. Unfortunately, most embedded programmers either haven't heard of event-driven programming or don't know how to use it properly. This course trains programmers to architect firmware with an event focus and shows the many benefits of using state machine frameworks to implement the resulting design. You'll also learn UML's statechart notation and a variety of best practices for effective event-driven programming in C/C++. (more)

Alternatives to Real-Time Operating Systems
Though there are good reasons to use an RTOS in some applications, this decision also creates a number of problems for embedded software developers. An RTOS adds excess complexity when the application is not well suited to being coded as a set of tasks that can preempt each other. This course examines RTOS tradeoffs and a set of alternative approaches to multitasking that do not employ a preemptive scheduler (more).

Getting Started with Embedded Linux
Linux is popular because it’s powerful, portable, and free. These features also make Linux attractive for use in embedded systems. Unfortunately, Embedded Linux can be challenging to configure and use correctly with custom hardware. This course examines the Linux porting, development, and debugging processes. Students will also learn how to write Linux device drivers, interrupt service routines, and other code that interfaces directly to the electronics (more).

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