Cockpit display automation robotics
Back to Technical TrainingTechnical Training Course

Safety-Critical & High-Consequence Design

Firmware and systems-level design practices for products where failure is not an option.

Overview

Embedded systems are everywhere, from implantable medical devices to self-driving cars. As more embedded systems connect to the internet and to each other, the potential for human injury also increases as these systems become vulnerable not only to malfunction, but also to hacking and other malicious attacks.

This course explains several key design techniques that can be used to develop safer, more reliable embedded systems. Through our consulting work with companies across a wide range of industries, we are continually surprised by how many of these techniques—including those taught in this course—are not more widely known and practiced.

Attendees will learn the “what, why, and how” of approximately a dozen practical, lightweight techniques for designing safer and more reliable embedded systems. The focus is on minimizing hazards and malfunctions through approaches that are both lightweight and demonstrably effective. Architectural, process, and cultural considerations are also covered.

Who This Course Is For

This course is suitable for embedded engineers who are comfortable writing C or C++ code. Students typically have roles such as firmware engineer, systems engineer, and test engineer.

Students require no prior experience with real-time operating systems. Even experienced engineers will learn important topics that can be applied to building robust, deterministic embedded systems with timing and power constraints.

Course Curriculum

Detailed course curriculum can be provided upon request.

Safety-critical design diagram illustration

System Partitioning for Designing Safe, Robust Systems

We'll discuss hardware/software partitioning of functionality and how to best allocate responsibilities in order to minimize the “blast radius” of a fault.

Safety-critical design diagram illustration

Run-Time Monitoring

We'll cover power-on and runtime self-tests, along with techniques for monitoring CPU load and detecting and mitigating memory corruption.

Safety-critical design diagram illustration

Design for Test

Here we discuss software design techniques that improve controllability and observability in an embedded system, both of which are essential for test.

Safety-critical design diagram illustration

Managing Time for Safe Product Operation

How do you ensure that your embedded system meets all its timing requirements under all conditions? Real-time deadlines are serious business in high-consequence systems.

Safety-critical design diagram illustration

Run-Time Logging

Everything from logging strategies to accurate timestamping and runtime configurability. Also, how can the data be exported securely so that it can be trusted?

Safety-critical design diagram illustration

Safety Case

A safety case provides a structured argument, supported by evidence, that demonstrates the designers have anticipated and mitigated failures such that if the product malfunctions, it will "fail safely."

Safety-critical design diagram illustration

Managing Software Complexity

As complexity increases, maintainability, robustness, and testability suffer. Here we cover techniques for measuring, reducing and controlling software complexity.

Safety-critical design diagram illustration

Coding Standards

A quality-focused coding standard can reduce safety-compromising bugs. We discuss choosing, modifying, adopting, and enforcing a coding standard whose rules are not about style, but about keeping bugs out of your code.

Safety-critical design diagram illustration

Static Analysis

Static analysis tools are indefatigable allies, vigilant in keeping latent defects out of your code. But to use such a tool, you must choose one, configure it, use it correctly and consistently, and understand its output before addressing any flagged issues.

Safety-critical design diagram illustration

Code Inspections

For decades, engineers working on space programs, weapons systems and medical devices have recognized that code inspections, while time-consuming and labor-intensive, still yield the best “return on investment” for the most critical parts of your code. Learn how to conduct them properly and effectively.

Safety-critical design diagram illustration

Issue Tracking

All systems have bugs. Some go undetected for years. Some are more critical than others. How do you track and fix bugs in your product? Is your approach systematic or ad hoc? Do the same bugs keep reappearing? Are certain parts of your code “bug farms”?

Safety-critical design diagram illustration

Post Mortems

Failures happen. But every failure is an opportunity to learn and improve. The practice of post-mortems is widely used in the medical community as well as the aerospace and transportation industries. What are the key principles of post mortems and how should they be conducted?

Our Instructors

Our courses are taught by experts who have written real-time kernels, designed mission-critical systems, testified in U.S. federal court, and reverse-engineered proprietary kernels from object code. Throughout each course, topics are connected to real life examples pulled directly from the instructors' experience.

Our instructors have taught teams at every major silicon vendor, more than a dozen medical device companies, and numerous firms working in defense / aerospace, transportation, industrial control, instrumentation, robotics and energy.

Get in touch for full details on syllabus, pricing and training dates.

Contact Us About This Course

(Note: this course is only taught privately on-site at customer location; no public or online trainings are offered.)