LIMITED OFFER
Save 50% on book bundles
Immediately download your ebook while waiting for your print delivery. No promo code needed.
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 fo… Read more
LIMITED OFFER
Immediately download your ebook while waiting for your print delivery. No promo code needed.
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:
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.
Software Engineering for Embedded Systems: A Roadmap
Foreword to Software Engineering for Embedded Systems
Acknowledgments
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
Summary
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?
Modeling
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?
Conclusion
Next steps – try it!
References
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
Summary
References
Chapter 5. Real-Time Building Blocks: Events and Triggers
Events and triggers
Room temperature unit
Event system
Event handle
Event methods
Event data structure
Reentrancy
Event processing
Integration
Triggers
Blinking LED
Design idea
Tick timer
Trigger interface
Trigger descriptor
Data allocation
SetTrigger
IncTicks
Making it reentrant
Initialization
Blink!
Beep!
Real-time aspects
Summary and source code
Chapter 6. Hardware’s Interface to Embedded Software
Introduction
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
Conclusion
Best practices
Chapter 7. Embedded Software Programming and Implementation Guidelines
Introduction
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
Synchronization
Message passing
Memory management
Summary
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
Conclusion
References
Chapter 10. Software Performance Engineering for Embedded Systems
Example: latency vs. throughput in an eNodeB application
Performance patterns and anti-patterns
References
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
Introduction
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
Introduction
Understanding power consumption
Measuring power consumption
Minimizing power consumption
Optimizing data flow
SRAM and cache data flow optimization for power
Peripheral/communication utilization
Algorithmic
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
Gestalts
Designing user interfaces with Model View Controller (MVC) architecture
Safety-critical user interfaces
References
Bibliography
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
Analysis
High-level design
Summary of Part 1
Part 2: Implementation and low-level design
Thread-based implementations
Mutexes, locks, nested locks
Granularity
Implementing task parallelism
Message-passing implementations
Using a hybrid approach
References
Chapter 18. Safety-Critical Software Development
Introduction
Which safety requirements?
Project planning strategies
Faults, failures, hazards, and risk analysis
Safety-critical architectures
Software implementation strategies
Reference
Chapter 19. Intellectual Property
Background
Is that software yours?
Patents
Problems
Chapter 20. Managing Embedded Software Development
Capability maturity model integration
The OSI model
Software development
Organization
Program charter
Stakeholders and the core team
Product life-cycle management
Portfolio management
Project management life-cycle
Project life-cycle
Problem-solving
Communications
Abbreviations, symbols, acronyms
References
Chapter 21. Agile Development for Embedded Systems
Introduction
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?
Summary
References
Bibliography
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
Conclusion
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
Summary
Bibliography
Chapter 24. Embedded Software for Networking Applications
Introduction
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
Summary
Chapter 25. Linux for Embedded Systems
Introduction
Getting started with Embedded Linux
Running Linux on a reference board
Appendix 1. ‘C’ Syntax Coding Standard: Source Code Development
Abstract
Scope
Definitions
Rules and Conventions
Complexity
Problematic constructs
Source and include file layouts
Characteristics
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
Introduction
Relatively inexpensive features of C++ for embedded
Modestly expensive features of C++ for embedded
Typically costly features of C++ for embedded
Summary
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
References
Case Study 2. A User Interface: Police Command and Control System
Introduction
Police command and control system
Essential use case
Scenarios
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
Summary
Index
RO