Course Description:
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.
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 that a memory
leak or stack overflow will not lurk like a time bomb in a longrunning
system. Programmers need to be aware of real-time
pitfalls when using interrupts and an RTOS.
The course is based on ten years of experience writing
embedded software for life-critical medical equipment. The
course has been developed by Niall Murphy, author of the
popular Murphy’s Law column in Embedded Systems
Programming magazine.
Overview:
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.
• Know 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.
Pre-requisites:
A working knowledge of C.
Who Should Attend:
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.
Duration:
Two days.
Course Materials:
Delegate Handbook
Related Courses:
• OO-503 Real-Time Software Design with UML 2.0
• C++-501 C++ for Embedded Developers
• C-501 C for Real-Time Developers
|
Course Outline:
Introduction
- Definitions for Safety,
Availability, Reliability
- Graceful degradation
- Industry magic bullets
Data Integrity Checks
- Checksums
- CRCs
Persistent Storage
- Error Detection
- Double Buffering
- Versioning
Built-in Self-test
- RAM/ROM/address
line tests
- Loopback tests
- Cable and
subassembly tests
Interlocks
- 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
Interrupts
- Reentrancy
- Motivation
- Parallelism
- Timed Polling
Real Time Operating
System
- Tasking
- Decomposition
- Preemptive Kernels
- Priority Inversion
- Queuing
- Timing Accuracy
|