Software Engineering for Embedded Systems

Software Engineering for Embedded Systems

Methods, Practical Techniques, and Applications

1st Edition - April 1, 2013

Write a review

  • Editor: Robert Oshana
  • eBook ISBN: 9780124159419

Purchase options

Purchase options
DRM-free (PDF, Mobi, EPub)
Sales tax will be calculated at check-out

Institutional Subscription

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



Product details

  • No. of pages: 1200
  • Language: English
  • Copyright: © Newnes 2013
  • Published: April 1, 2013
  • Imprint: Newnes
  • eBook ISBN: 9780124159419

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.

Ratings and Reviews

Write a review

There are currently no reviews for "Software Engineering for Embedded Systems"