You are previewing Software Engineering for Embedded Systems.
O'Reilly logo
Software Engineering for Embedded Systems

Book Description

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.



  • 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

Table of Contents

  1. Cover image
  2. Title page
  3. Table of Contents
  4. Copyright
  5. Software Engineering for Embedded Systems: A Roadmap
  6. Foreword to Software Engineering for Embedded Systems
  7. Acknowledgments
  8. About the Editors
  9. About the Authors
  10. Chapter 1. Software Engineering of Embedded and Real-Time Systems
    1. Software engineering
    2. Embedded systems
    3. Real-time systems
    4. Challenges in real-time system design
    5. Distributed and multi-processor architectures
    6. Software for embedded systems
    7. Hardware abstraction layers (HAL) for embedded systems
    8. Summary
  11. Chapter 2. Embedded Systems Hardware/Software Co-Development
    1. Today’s embedded systems – an example
    2. HW/SW prototyping users
    3. HW/SW prototyping options
    4. Prototyping decision criteria
    5. Choosing the right prototype
    6. Industry design chain
    7. The need to change the design flow
    8. Different types of virtual prototypes
    9. A brief history of virtual prototypes
    10. The limits of proprietary offerings
    11. What makes virtual prototypes fast
    12. Standardization: the era of SystemC TLM-2.0
    13. Architecture virtual prototypes
    14. Software virtual prototypes
    15. Summary – the growing importance of virtualization
  12. Chapter 3. Software Modeling for Embedded Systems
    1. When and why should you model your embedded system?
    2. Modeling
    3. What is a modeling language?
    4. Examples of modeling languages
    5. The V diagram promise
    6. So, why would you want to model your embedded system?
    7. When should you model your embedded system?
    8. Operational complexity
    9. Cost of defect versus when detected
    10. Large development teams require modeling
    11. Modeling is often the only choice
    12. So – modeling is great, but aren’t all models wrong?
    13. You have your prototype – now what?
    14. Conclusion
    15. Next steps – try it!
    16. References
  13. Chapter 4. Software Design Architecture and Patterns for Embedded Systems
    1. Overview of architecture and design
    2. Three levels of design
    3. What are design patterns?
    4. Software architecture categories and views
    5. Summary
    6. References
  14. Chapter 5. Real-Time Building Blocks: Events and Triggers
    1. Events and triggers
    2. Room temperature unit
    3. Event system
    4. Event handle
    5. Event methods
    6. Event data structure
    7. Reentrancy
    8. Event processing
    9. Integration
    10. Triggers
    11. Blinking LED
    12. Design idea
    13. Tick timer
    14. Trigger interface
    15. Trigger descriptor
    16. Data allocation
    17. SetTrigger
    18. IncTicks
    19. Making it reentrant
    20. Initialization
    21. Blink!
    22. Beep!
    23. Real-time aspects
    24. Summary and source code
  15. Chapter 6. Hardware’s Interface to Embedded Software
    1. Introduction
    2. Collaborate with the hardware team
    3. Useful hardware design aspects
    4. Supporting multiple versions of hardware
    5. Self-adapting switches
    6. Difficult hardware interactions
    7. Testing and troubleshooting
    8. Temporary hooks
    9. Conclusion
    10. Best practices
  16. Chapter 7. Embedded Software Programming and Implementation Guidelines
    1. Introduction
    2. Starting the embedded software project
    3. Variable structure
  17. Chapter 8. Embedded Operating Systems
    1. Foreground/background systems
    2. Real-time kernels
    3. Priority levels
    4. The ready list
    5. Scheduling points
    6. Context switching
    7. Interrupt management
    8. The clock tick (or system tick)
    9. Wait lists
    10. Time management
    11. Resource management
    12. Synchronization
    13. Message passing
    14. Memory management
    15. Summary
  18. Chapter 9. Software Reuse By Design in Embedded Systems
    1. Why does software reuse matter?
    2. What limits software reuse?
    3. Kinds of software reuse
    4. Implementing reuse by layers
    5. Going to the next level
    6. Introducing the component factory
    7. Factory hardware configuration
    8. Factory software configuration
    9. How the factory aids reusability
    10. RTOS agnosticism
    11. Arbitrary extensibility
    12. Conclusion
    13. References
  19. Chapter 10. Software Performance Engineering for Embedded Systems
    1. Example: latency vs. throughput in an eNodeB application
    2. Performance patterns and anti-patterns
    3. References
  20. Chapter 11. Optimizing Embedded Software for Performance
    1. The code optimization process
    2. Using the development tools
    3. Background – understanding the embedded architecture
    4. Basic C optimization techniques
    5. General loop transformations
    6. Example application of optimization techniques: cross-correlation
  21. Chapter 12. Optimizing Embedded Software for Memory
    1. Introduction
    2. Code size optimizations
    3. Memory layout optimization
    4. Data structures, arrays of data structures, and adding it all up!
    5. Loop optimizations for memory performance
  22. Chapter 13. Optimizing Embedded Software for Power
    1. Introduction
    2. Understanding power consumption
    3. Measuring power consumption
    4. Minimizing power consumption
    5. Optimizing data flow
    6. SRAM and cache data flow optimization for power
    7. Peripheral/communication utilization
    8. Algorithmic
    9. Summary and closing remarks
  23. Chapter 14. Human Factors and User Interface Design for Embedded Systems
    1. Analysis phase of user interface design
    2. Virtual windows
    3. Data models using entity relationship diagrams (ERD)
    4. Analysis of virtual windows using a CREDO matrix
    5. Hueristic evaluation
    6. Gestalts
    7. Designing user interfaces with Model View Controller (MVC) architecture
    8. Safety-critical user interfaces
    9. References
    10. Bibliography
  24. Chapter 15. Embedded Software Quality, Integration and Testing Techniques
    1. What is software test?
    2. Available techniques
    3. Setting the standard
    4. Dealing with the unusual
    5. Implementing a test solution environment
    6. Summary and conclusions
  25. Chapter 16. Software Development Tools for Embedded Systems
    1. Introduction to debugging tools
    2. GDB debugging
    3. Debug agent design
    4. Debugging using JTAG
    5. Debugging tools using Eclipse and GDB
    6. Instrumented code
    7. Analysis tools
    8. Hardware capabilities
    9. Debugging tips and tricks
  26. Chapter 17. Multicore Software Development for Embedded Systems: This Chapter draws on Material from the Multicore Programming Practices Guide (MPP) from the Multicore Association
    1. Part 1: Analysis and high-level design
    2. Analysis
    3. High-level design
    4. Summary of Part 1
    5. Part 2: Implementation and low-level design
    6. Thread-based implementations
    7. Mutexes, locks, nested locks
    8. Granularity
    9. Implementing task parallelism
    10. Message-passing implementations
    11. Using a hybrid approach
    12. References
  27. Chapter 18. Safety-Critical Software Development
    1. Introduction
    2. Which safety requirements?
    3. Project planning strategies
    4. Faults, failures, hazards, and risk analysis
    5. Safety-critical architectures
    6. Software implementation strategies
    7. Reference
  28. Chapter 19. Intellectual Property
    1. Background
    2. Is that software yours?
    3. Patents
    4. Problems
  29. Chapter 20. Managing Embedded Software Development
    1. Capability maturity model integration
    2. The OSI model
    3. Software development
    4. Organization
    5. Program charter
    6. Stakeholders and the core team
    7. Product life-cycle management
    8. Portfolio management
    9. Project management life-cycle
    10. Project life-cycle
    11. Problem-solving
    12. Communications
    13. Abbreviations, symbols, acronyms
    14. Copyright acknowledgments
    15. References
  30. Chapter 21. Agile Development for Embedded Systems
    1. Introduction
    2. What’s special about embedded systems?
    3. Agile project planning for embedded software
    4. Project governance for embedded software
    5. Agile development practices for embedded
    6. Scaling factors for agile
    7. Can agile methods help you adhere to standards?
    8. Summary
    9. References
    10. Bibliography
  31. Chapter 22. Embedded Software for Automotive Applications
    1. A bit of history to set the scene
    2. Automotive segments and how they differ
    3. Automotive quality
    4. Development and test
    5. Automotive diagnostics
    6. Automotive standards
    7. Automotive safety
    8. Automotive security
    9. The near future of the automotive market
    10. Conclusion
  32. Chapter 23. Programming for I/O and Storage
    1. I/O device and I/O controller
    2. I/O programming
    3. Storage programming
    4. Performance improvement of storage systems
    5. Summary
    6. Bibliography
  33. Chapter 24. Embedded Software for Networking Applications
    1. Introduction
    2. System architecture of network devices
    3. Multicore SoCs for networking
    4. Network programming models
    5. Structure of packet-processing software
    6. Network application programming techniques
    7. General performance techniques for network application programmers
    8. Linux operating system for embedded network devices
    9. Summary
  34. Chapter 25. Linux for Embedded Systems
    1. Introduction
    2. Getting started with Embedded Linux
    3. Running Linux on a reference board
  35. Appendix 1. ‘C’ Syntax Coding Standard: Source Code Development
    1. Abstract
    2. Scope
    3. Definitions
    4. Rules and Conventions
    5. Complexity
    6. Problematic constructs
    7. Source and include file layouts
    8. Characteristics
    9. Appendix A – Approved standard abbreviations
    10. Appendix B – Suggested module names
    11. Appendix C – Source code template
    12. Appendix D – Standard include file template
    13. Appendix E – portable.h include file template
    14. Appendix F – Function template
  36. Appendix 2. On the C++ Programming Language for Embedded Software, Systems, and Platforms
    1. Introduction
    2. Relatively inexpensive features of C++ for embedded
    3. Modestly expensive features of C++ for embedded
    4. Typically costly features of C++ for embedded
    5. Summary
  37. Case Study 1. Software Performance Engineering
    1. Introduction and project description
    2. Initial performance estimates and information requirements
    3. Developing the initial estimate
    4. Tracking the reporting metrics
    5. Reducing the measurement error
    6. Conclusions and lessons learned
    7. References
  38. Case Study 2. A User Interface: Police Command and Control System
    1. Introduction
    2. Police command and control system
    3. Essential use case
    4. Scenarios
    5. Hierarchical task analysis
    6. Primary interaction styles for the PC&C system
    7. Design approaches to overcome user limitations of cognition, perception and learning
    8. External cognition approaches to overcome user limitations
    9. Error messages and warnings for PC&CS
    10. Data model (entity relationship diagram) and virtual windows for PC&CS
    11. Identifying gestalts in PC&CS user interface design
    12. Data presentation techniques
    13. Usability testing on the first prototype
    14. Second iteration – low-fidelity prototype
    15. High-fidelity prototype
    16. Quick-start guide
  39. Case Study 3. Transitioning to Multicore
    1. Typical Application Software Overview
    2. Software system partition
    3. Parallel processing of data packets
    4. Hybrid approaches (parallel plus pipeline)
    5. Data communication with control-plane partition
    6. Management proxy
    7. Rx/Tx drivers
  40. Case Study 4. Software Engineering for Embedded Systems Quality and Metrics Program
    1. Development methodology
    2. Metrics collection
    3. Summary
  41. Index