Cover image for Software Engineering for Embedded Systems : Methods, Practical Techniques, and Applications.
Software Engineering for Embedded Systems : Methods, Practical Techniques, and Applications.
Title:
Software Engineering for Embedded Systems : Methods, Practical Techniques, and Applications.
Author:
Kraeling, Mark.
ISBN:
9780124159419
Personal Author:
Physical Description:
1 online resource (1201 pages)
Contents:
Front Cover -- Software Engineering for Embedded Systems -- Copyright Page -- Contents -- Software Engineering for Embedded Systems: A Roadmap -- Foreword to Software Engineering for Embedded Systems -- Acknowledgments -- About the Editors -- About the Authors -- 1 Software Engineering of Embedded and Real-Time Systems -- Software engineering -- Embedded systems -- Embedded systems are reactive systems -- Real-time systems -- Types of real-time systems - soft and hard -- Differences between real-time and time-shared systems -- Examples of hard real-time -- Based on signal sample, time to perform actions before next sample arrives -- Hard real-time systems -- Real-time event characteristics -- Real-time event categories -- Efficient execution and the execution environment -- Efficiency overview -- Resource management -- Challenges in real-time system design -- Response time -- Recovering from failures -- The embedded system software build process -- Distributed and multi-processor architectures -- Software for embedded systems -- Super loop architecture -- Power-save super loop -- Window lift embedded design -- Hardware abstraction layers (HAL) for embedded systems -- Summary -- 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 -- SystemC TLM-2 abstraction levels -- Architecture virtual prototypes -- Software virtual prototypes -- Summary - the growing importance of virtualization.

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? -- Mission- and safety-critical applications -- Highly complex applications and systems -- 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! -- Closed-loop control with a DC motor -- Learn more about prototyping with a downloadable kit -- Designing applications with the NI Statechart Module -- Design and simulate a brushed dc motor h-bridge circuit -- Multi-domain physical modeling with open-source Modelica models -- References -- 4 Software Design Architecture and Patterns for Embedded Systems -- Overview of architecture and design -- Architecture is about system-wide optimization -- Three levels of design -- What are design patterns? -- Must I use object-oriented techniques to use design patterns? -- An architectural example -- Name: port proxy pattern -- Abstract -- Problem context -- Pattern structure and behavior -- Consequences -- Using patterns -- Making trade-off decisions -- Software architecture categories and views -- Primary architectural views -- Subsystem and component view -- Concurrency and resource view -- Deployment view -- Distribution view -- Dependability view -- Secondary viewpoints -- Summary -- References -- 5 Real-Time Building Blocks: Events and Triggers -- Events and triggers -- Room temperature unit -- Event system -- Event handle -- Event methods -- Event data structure -- Reentrancy.

Disable and enable interrupts -- EnterCritical and ExitCritical -- Semaphores -- Implementation with Enter/ExitCritical -- 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 -- 6 Hardware's Interface to Embedded Software -- Introduction -- Collaborate with the hardware team -- Proactive collaboration -- Ambassadors -- Register design tools -- Co-development activities -- System integration -- Useful hardware design aspects -- Notification of hardware events -- Launching tasks in hardware -- Bit field alignment -- Fixed bit positions -- Block version number -- Debug hooks -- Supporting multiple versions of hardware -- Compile-time switches -- Build-time switches -- Run-time switches -- Self-adapting switches -- Difficult hardware interactions -- Atomic register access -- Mixed bit types in the same register -- Edge vs. level interrupts -- Testing and troubleshooting -- Temporary hooks -- Permanent hooks -- Conclusion -- Best practices -- 7 Embedded Software Programming and Implementation Guidelines -- Introduction -- Principles of high-quality programming -- Readability -- Maintainability -- Testability -- What sets embedded apart from general programming -- Starting the embedded software project -- Hardware platform input -- Project files/organization -- Source files written locally -- Source files from company libraries -- Libraries from third parties -- Libraries from compiler/linker toolset -- Team programming guidelines -- Syntax standard -- Code white space -- Tabs in source files -- Alignment within source -- Safety requirements in source code -- Variable structure -- Variable declarations -- Global variables.

File scope variables -- Local variables -- Data types -- Definitions -- Conditional compilation -- #define -- 8 Embedded Operating Systems -- Foreground/background systems -- Real-time kernels -- RTOS (real-time operating system) -- Critical sections -- Task management -- Assigning task priorities -- Determining the size of a stack -- The idle task -- Priority levels -- The ready list -- Preemptive scheduling -- Scheduling points -- Round-robin scheduling -- Context switching -- Interrupt management -- Handling CPU interrupts -- Non-kernel-aware interrupt service routine (ISR) -- Processors with multiple interrupt priorities -- All interrupts vector to a common location -- Every interrupt vectors to a unique location -- The clock tick (or system tick) -- Wait lists -- Time management -- Resource management -- Resource management, disable/enable interrupts -- Resource management, semaphores -- Resource management, notes on semaphores -- Resource management, priority inversions -- Resource management, mutual-exclusion semaphores (mutex) -- Resource management, deadlocks (or deadly embrace) -- Synchronization -- Synchronization, semaphores -- Synchronization, credit tracking -- Bilateral rendez-vous -- Message passing -- Messages -- Message queues -- Flow control -- Clients and servers -- Memory management -- Summary -- 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 -- Cost estimations -- Defect testing -- Libraries -- 10 Software Performance Engineering for Embedded Systems.

Example: latency vs. throughput in an eNodeB application -- Performance patterns and anti-patterns -- References -- 11 Optimizing Embedded Software for Performance -- The code optimization process -- Using the development tools -- Compiler optimization -- Basic compiler configuration -- Enabling optimizations -- Additional optimization configurations -- Using the profiler -- Background - understanding the embedded architecture -- Resources -- Basic C optimization techniques -- Choosing the right data types -- Use intrinsics to leverage embedded processor features -- Functions calling conventions -- Pointers and memory access -- Ensuring alignment -- Restrict and pointer aliasing -- Loops -- Communicating loop count information -- Hardware loops -- Additional tips and tricks -- Memory contention -- Use of unaligned accesses -- Cache accesses -- Inline small functions -- Use vendor run-time libraries -- General loop transformations -- Loop unrolling -- Background -- Implementation -- Multisampling -- Background -- Implementation procedure -- Implementation -- Partial summation -- Background -- Implementation procedure -- Implementation -- Software pipelining -- Background -- Implementation -- Example application of optimization techniques: cross-correlation -- Setup -- Original implementation -- Step 1: use intrinsics for fractional operations and specify loop counts -- Step 2: specify data alignment and modify for multisampling algorithm -- Step 3: assembly-language optimization -- 12 Optimizing Embedded Software for Memory -- Introduction -- Code size optimizations -- Compiler flags and flag mining -- Target ISA for size and performance tradeoffs -- Tuning the ABI for code size -- Caveat emptor: compiler optimization orthogonal to code size! -- Memory layout optimization -- Overview of memory optimization -- Focusing optimization efforts.

Vectorization and the dynamic code: compute ratio.
Abstract:
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.
Local Note:
Electronic reproduction. Ann Arbor, Michigan : ProQuest Ebook Central, 2017. Available via World Wide Web. Access may be limited to ProQuest Ebook Central affiliated libraries.
Added Author:
Electronic Access:
Click to View
Holds: Copies: