Robust Software for Embedded Systems

Course#: BSEMB1030

About this Course

Course Type Course Code Duration
Embedded Software BSEMB1030 2 Days

Across the spectrum of embedded systems there is a universal need for reliability and robustness beyond that required for desktop computer software. Failure detection and recovery is vital and the software must be designed so that it can run continuously without the need for a reboot. This course explores the accepted industry best practices for achieving that extra level of quality in your embedded software.

Why Attend this Course?

These techniques include the use of watchdog hardware to detect a deadlocked system. Error handling mechanisms should be capable of reporting the exact location of a software bug, even after the system has been deployed. Memory management techniques need to ensure that a memory leak or stack overflow will not lurk like a time bomb in a long-running system. Programmers need to be aware of real-time pitfalls when using interrupts and an RTOS.

What Makes this Course Stand Apart?

This course is based on 10 years of experience writing embedded software for life-critical medical equipment. It has been developed by Niall Murphy, author of “Front Panel: Designing Software for Embedded User Interfaces” and regular contributor to Embedded Systems Programming magazine.

                             What you will Learn?

A two day course providing an introduction to the building blocks of a dependable embedded system.

Course objectives:

After completing the course, attendees will:

  • Understand the processes that can be applied to ensure quality code, such as code inspections and Hazards Analysis
  • Understand how to write defensive code and code which allows a device to test itself
  • Understand how to make the best use of watchdog timers
  • Understand how to organise non-volatile storage to avoid corruption and loss of data
  • Understand the advantages and weaknesses of using features such as dynamic memory management and real time operating systems


Application programmers, software engineers or technical staff who need to address reliability or robustness issues at a code level. The course is ideal for engineers who can write software, but are new to embedded systems, especially if those embedded systems have safety concerns or require high reliability.


A working knowledge of C.

Course Outline

  • Delegate handbook


  • Definitions for Safety, Availability, Reliability
  • Graceful degradation
  • Industry magic bullets

Data Integrity Checks

  • Checksums
  • CRCs

Persistent Storage

  • Error Detection
  • Double Buffering
  • Versioning

Real Time Operating System

  • Tasking
  • Decomposition
  • Preemptive Kernels
  • Priority Inversion
  • Queuing
  • Timing Accuracy

Built-in Self-test

  • RAM/ROM/address line tests
  • Loopback tests
  • Cable and subassembly tests


  • Hardware limitations on software actions
  • Software limitations on user actions

Exception Handling and Asserts

  • Language Support
  • Assert Macro
  • Debug code issues

Memory Management

  • Static Allocation
  • Stack Measurement
  • Malloc and fragmentation
  • Pools
  • Detecting Leaks


  • Reentrancy
  • Motivation
  • Parallelism
  • Timed Polling

What next- How do I arrange a group course or book a public place.?

We are here to help so please utilise our live chat team

Call to speak to your account manager or a consultant on

+44 (0)345 467 9557 or email

We are all technical with a wealth of Learning & Development experience
so can talk you through any specific requirements or the details of
one of our courses.


Start typing and press Enter to search