COVID-19 Update: We are currently shipping orders daily. However, due to transit disruptions in some geographies, deliveries may be delayed. To provide all customers with timely access to content, we are offering 50% off Science and Technology Print & eBook bundle options. Terms & conditions.
Software Engineering for Embedded Systems - 1st Edition - ISBN: 9780124159174, 9780124159419

Software Engineering for Embedded Systems

1st Edition

Methods, Practical Techniques, and Applications

Editor: Robert Oshana
eBook ISBN: 9780124159419
Hardcover ISBN: 9780124159174
Imprint: Newnes
Published Date: 1st April 2013
Page Count: 1200
Sales tax will be calculated at check-out Price includes VAT/GST
Price includes VAT/GST

Institutional Subscription

Secure Checkout

Personal information is secured with SSL technology.

Free Shipping

Free global shipping
No minimum order.


This Expert Guide gives you the techniques and technologies in software engineering to optimally design and implement your embedded system. Written by experts with a solutions focus, this encyclopedic reference gives you an indispensable aid to tackling the day-to-day problems when using software engineering methods to develop your embedded systems.

With this book you will learn:

  • The principles of good architecture for an embedded system
  • Design practices to help make your embedded project successful
  • Details on principles that are often a part of embedded systems, including digital signal processing, safety-critical principles, and development processes
  • Techniques for setting up a performance engineering strategy for your embedded system software
  • How to develop user interfaces for embedded systems
  • Strategies for testing and deploying your embedded system, and ensuring quality development processes
  • Practical techniques for optimizing embedded software for performance, memory, and power
  • Advanced guidelines for developing multicore software for embedded systems
  • How to develop embedded software for networking, storage, and automotive segments
  • How to manage the embedded development process

Includes contributions from:

Frank Schirrmeister, Shelly Gretlein, Bruce Douglass, Erich Styger, Gary Stringham, Jean Labrosse, Jim Trudeau, Mike Brogioli, Mark Pitchford, Catalin Dan Udma, Markus Levy, Pete Wilson, Whit Waldo, Inga Harris, Xinxin Yang, Srinivasa Addepalli, Andrew McKay, Mark Kraeling and Robert Oshana.

Key Features

  • Road map of key problems/issues and references to their solution in the text
  • Review of core methods in the context of how to apply them
  • Examples demonstrating timeless implementation details
  • Short and to- the- point case studies show how key ideas can be implemented, the rationale for choices made, and design guidelines and trade-offs


Embedded systems engineers, software engineers, under graduate and graduate computer and electrical and electronic engineers

Table of Contents

Software Engineering for Embedded Systems: A Roadmap

Foreword to Software Engineering for Embedded Systems


About the Editors

About the Authors

Chapter 1. Software Engineering of Embedded and Real-Time Systems

Software engineering

Embedded systems

Real-time systems

Challenges in real-time system design

Distributed and multi-processor architectures

Software for embedded systems

Hardware abstraction layers (HAL) for embedded systems


Chapter 2. Embedded Systems Hardware/Software Co-Development

Today’s embedded systems – an example

HW/SW prototyping users

HW/SW prototyping options

Prototyping decision criteria

Choosing the right prototype

Industry design chain

The need to change the design flow

Different types of virtual prototypes

A brief history of virtual prototypes

The limits of proprietary offerings

What makes virtual prototypes fast

Standardization: the era of SystemC TLM-2.0

Architecture virtual prototypes

Software virtual prototypes

Summary – the growing importance of virtualization

Chapter 3. Software Modeling for Embedded Systems

When and why should you model your embedded system?


What is a modeling language?

Examples of modeling languages

The V diagram promise

So, why would you want to model your embedded system?

When should you model your embedded system?

Operational complexity

Cost of defect versus when detected

Large development teams require modeling

Modeling is often the only choice

So – modeling is great, but aren’t all models wrong?

You have your prototype – now what?


Next steps – try it!


Chapter 4. Software Design Architecture and Patterns for Embedded Systems

Overview of architecture and design

Three levels of design

What are design patterns?

Software architecture categories and views



Chapter 5. Real-Time Building Blocks: Events and Triggers

Events and triggers

Room temperature unit

Event system

Event handle

Event methods

Event data structure


Event processing



Blinking LED

Design idea

Tick timer

Trigger interface

Trigger descriptor

Data allocation



Making it reentrant




Real-time aspects

Summary and source code

Chapter 6. Hardware’s Interface to Embedded Software


Collaborate with the hardware team

Useful hardware design aspects

Supporting multiple versions of hardware

Self-adapting switches

Difficult hardware interactions

Testing and troubleshooting

Temporary hooks


Best practices

Chapter 7. Embedded Software Programming and Implementation Guidelines


Starting the embedded software project

Variable structure

Chapter 8. Embedded Operating Systems

Foreground/background systems

Real-time kernels

Priority levels

The ready list

Scheduling points

Context switching

Interrupt management

The clock tick (or system tick)

Wait lists

Time management

Resource management


Message passing

Memory management


Chapter 9. Software Reuse By Design in Embedded Systems

Why does software reuse matter?

What limits software reuse?

Kinds of software reuse

Implementing reuse by layers

Going to the next level

Introducing the component factory

Factory hardware configuration

Factory software configuration

How the factory aids reusability

RTOS agnosticism

Arbitrary extensibility



Chapter 10. Software Performance Engineering for Embedded Systems

Example: latency vs. throughput in an eNodeB application

Performance patterns and anti-patterns


Chapter 11. Optimizing Embedded Software for Performance

The code optimization process

Using the development tools

Background – understanding the embedded architecture

Basic C optimization techniques

General loop transformations

Example application of optimization techniques: cross-correlation

Chapter 12. Optimizing Embedded Software for Memory


Code size optimizations

Memory layout optimization

Data structures, arrays of data structures, and adding it all up!

Loop optimizations for memory performance

Chapter 13. Optimizing Embedded Software for Power


Understanding power consumption

Measuring power consumption

Minimizing power consumption

Optimizing data flow

SRAM and cache data flow optimization for power

Peripheral/communication utilization


Summary and closing remarks

Chapter 14. Human Factors and User Interface Design for Embedded Systems

Analysis phase of user interface design

Virtual windows

Data models using entity relationship diagrams (ERD)

Analysis of virtual windows using a CREDO matrix

Hueristic evaluation


Designing user interfaces with Model View Controller (MVC) architecture

Safety-critical user interfaces



Chapter 15. Embedded Software Quality, Integration and Testing Techniques

What is software test?

Available techniques

Setting the standard

Dealing with the unusual

Implementing a test solution environment

Summary and conclusions

Chapter 16. Software Development Tools for Embedded Systems

Introduction to debugging tools

GDB debugging

Debug agent design

Debugging using JTAG

Debugging tools using Eclipse and GDB

Instrumented code

Analysis tools

Hardware capabilities

Debugging tips and tricks

Chapter 17. Multicore Software Development for Embedded Systems: This Chapter draws on Material from the Multicore Programming Practices Guide (MPP) from the Multicore Association

Part 1: Analysis and high-level design


High-level design

Summary of Part 1

Part 2: Implementation and low-level design

Thread-based implementations

Mutexes, locks, nested locks


Implementing task parallelism

Message-passing implementations

Using a hybrid approach


Chapter 18. Safety-Critical Software Development


Which safety requirements?

Project planning strategies

Faults, failures, hazards, and risk analysis

Safety-critical architectures

Software implementation strategies


Chapter 19. Intellectual Property


Is that software yours?



Chapter 20. Managing Embedded Software Development

Capability maturity model integration

The OSI model

Software development


Program charter

Stakeholders and the core team

Product life-cycle management

Portfolio management

Project management life-cycle

Project life-cycle



Abbreviations, symbols, acronyms


Chapter 21. Agile Development for Embedded Systems


What’s special about embedded systems?

Agile project planning for embedded software

Project governance for embedded software

Agile development practices for embedded

Scaling factors for agile

Can agile methods help you adhere to standards?




Chapter 22. Embedded Software for Automotive Applications

A bit of history to set the scene

Automotive segments and how they differ

Automotive quality

Development and test

Automotive diagnostics

Automotive standards

Automotive safety

Automotive security

The near future of the automotive market


Chapter 23. Programming for I/O and Storage

I/O device and I/O controller

I/O programming

Storage programming

Performance improvement of storage systems



Chapter 24. Embedded Software for Networking Applications


System architecture of network devices

Multicore SoCs for networking

Network programming models

Structure of packet-processing software

Network application programming techniques

General performance techniques for network application programmers

Linux operating system for embedded network devices


Chapter 25. Linux for Embedded Systems


Getting started with Embedded Linux

Running Linux on a reference board

Appendix 1. ‘C’ Syntax Coding Standard: Source Code Development




Rules and Conventions


Problematic constructs

Source and include file layouts


Appendix A – Approved standard abbreviations

Appendix B – Suggested module names

Appendix C – Source code template

Appendix D – Standard include file template

Appendix E – portable.h include file template

Appendix F – Function template

Appendix 2. On the C++ Programming Language for Embedded Software, Systems, and Platforms


Relatively inexpensive features of C++ for embedded

Modestly expensive features of C++ for embedded

Typically costly features of C++ for embedded


Case Study 1. Software Performance Engineering

Introduction and project description

Initial performance estimates and information requirements

Developing the initial estimate

Tracking the reporting metrics

Reducing the measurement error

Conclusions and lessons learned


Case Study 2. A User Interface: Police Command and Control System


Police command and control system

Essential use case


Hierarchical task analysis

Primary interaction styles for the PC&C system

Design approaches to overcome user limitations of cognition, perception and learning

External cognition approaches to overcome user limitations

Error messages and warnings for PC&CS

Data model (entity relationship diagram) and virtual windows for PC&CS

Identifying gestalts in PC&CS user interface design

Data presentation techniques

Usability testing on the first prototype

Second iteration – low-fidelity prototype

High-fidelity prototype

Quick-start guide

Case Study 3. Transitioning to Multicore

Typical Application Software Overview

Software system partition

Parallel processing of data packets

Hybrid approaches (parallel plus pipeline)

Data communication with control-plane partition

Management proxy

Rx/Tx drivers

Case Study 4. Software Engineering for Embedded Systems Quality and Metrics Program

Development methodology

Metrics collection




No. of pages:
© Newnes 2013
1st April 2013
eBook ISBN:
Hardcover ISBN:

About the Editor

Robert Oshana

Robert Oshana

Rob Oshana is Vice President of Software Engineering R&D for the Microcontroller and Microprocessor business line at NXP, responsible for software enablement, IoT connectivity, software middleware and security, operating systems, machine learning, software services and advanced technologies. He serves on multiple industry advisory boards and is a recognized international speaker. He has published numerous books and articles on software engineering and embedded systems. He is also an adjunct professor at the University of Texas and Southern Methodist University and is a Senior Member of IEEE.

Affiliations and Expertise

Vice President of Software Engineering R&D for the Microcontroller and Microprocessor business line at NXP, Austin, U.S.A.


"Editors Oshana and Kraeling, with a combined experience of over 50 years in embedded software and an array of authors with backgrounds in various aspects of hardware and software design both in industry and academia rely on a variety of case studies and software code examples to provide exhaustive coverage of the field of software engineering for embedded systems. There is an interleaved two-dimensional conceptual framework to the work that divides the topics into three vertical and five horizontal layers."--Reference & Research Book News, December 2013

Ratings and Reviews