Embedded Software: Know It All

Embedded Software: Know It All

1st Edition - September 14, 2007

Write a review

  • Authors: Jean Labrosse, Jack Ganssle, Robert Oshana, Colin Walls, Keith E. Curtis, Jason Andrews, David Katz, Rick Gentile, Kamal Hyder, Bob Perrin
  • Paperback ISBN: 9780750685832
  • eBook ISBN: 9780080552026

Purchase options

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

Institutional Subscription

Free Global Shipping
No minimum order


The Newnes Know It All Series takes the best of what our authors have written to create hard-working desk references that will be an engineer's first port of call for key information, design techniques and rules of thumb. Guaranteed not to gather dust on a shelf!Embedded software is present everywhere – from a garage door opener to implanted medical devices to multicore computer systems. This book covers the development and testing of embedded software from many different angles and using different programming languages. Optimization of code, and the testing of that code, are detailed to enable readers to create the best solutions on-time and on-budget. Bringing together the work of leading experts in the field, this a comprehensive reference that every embedded developer will need!

Key Features

  • Proven, real-world advice and guidance from such “name” authors as Tammy Noergard, Jen LaBrosse, and Keith Curtis
  • Popular architectures and languages fully discussed
  • Gives a comprehensive, detailed overview of the techniques and methodologies for developing effective, efficient embedded software


Embedded and software engineers; designers, project managers

Table of Contents

  • Chapter 1: Basic Embedded Programming Concepts
    1.1 Numbering Systems
    1.2 Signed Binary Numbers
    1.3 Data Structures
    1.4 Communication Protocols
    1.5 Mathematics
    1.6 Numeric Comparison
    1.7 State Machines
    1.8 Multitasking

    Chapter 2: Device Drivers
    2.1 In This Chapter
    2.2 Example 1: Device Drivers for Interrupt- Handling
    2.3 Example 2: Memory Device Drivers
    2.4 Example 3: Onboard Bus Device Drivers
    2.5 Board I/O Driver Examples
    2.6 Summary

    Chapter 3: Embedded Operating Systems
    3.1 In This Chapter
    3.2 What Is a Process?
    3.3 Multitasking and Process Management
    3.4 Memory Management
    3.5 I/O and File System Management
    3.6 OS Standards Example: POSIX (Portable Operating System Interface)
    3.7 OS Performance Guidelines
    3.8 OSes and Board Support Packages (BSP)
    3.9 Summary

    Chapter 4: Networking
    4.1 Introduction to the RCM3200 Rabbit Core
    4.2 Introduction to the Dynamic C Development Environment
    4.3 Brief Introduction to Dynamic C Libraries
    4.4 Memory Spaces in Dynamic C
    4.5 How Code Is Compiled and Run
    4.6 Setting Up a PC as an RCM3200 Development System
    4.7 Time to Start Writing Code!
    4.8 Embedded Networks
    4.9 Dynamic C Support for Networking Protocols
    4.10 Typical Network Setup
    4.11 Setting Up a Core Module’s Network Configuration
    4.12 Project 1: Bringing Up a Rabbit Core Module for Networking
    4.13 The Client Server Paradigm
    4.14 The Berkeley Sockets Interface
    4.15 Using TCP versus UDP in an Embedded Application
    4.16 Important Dynamic C Library Functions for Socket Programming
    4.17 Project 2: Implementing a Rabbit TCP/IP Server
    4.18 Project 3: Implementing a Rabbit TCP/IP Client
    4.19 Project 4: Implementing a Rabbit UDP Server
    4.20 Some Useful (and Free!) Networking Utilities
    4.21 Final Thought

    Chapter 5: Error Handling and Debugging
    5.1 The Zen of Embedded Systems Development and Troubleshooting
    5.2 The FIXER Hat
    5.3 Proactive Debugging
    5.4 Stacks and Heaps
    5.5 Seeding Memory
    5.6 Wandering Code
    5.7 Special Decoders
    5.8 MMUs
    5.9 Conclusion
    5.10 Implementing Downloadable Firmware with Flash Memory
    5.11 The Microprogrammer
    5.12 Advantages of Microprogrammers
    5.13 Disadvantages of Microprogrammers
    5.14 Receiving a Microprogrammer
    5.15 A Basic Microprogrammer
    5.16 Common Problems and Their Solutions
    5.17 Hardware Alternatives
    5.18 Memory Diagnostics
    5.19 ROM Tests
    5.20 RAM Tests
    5.21 Nonvolatile Memory
    5.22 Supervisory Circuits
    5.23 Multibyte Writes
    5.24 Testing
    5.25 Conclusion
    5.26 Building a Great Watchdog
    5.27 Internal WDTs
    5.28 External WDTs
    5.29 Characteristics of Great WDTs
    5.30 Using an Internal WDT
    5.31 An External WDT
    5.32 WDTs for Multitasking
    5.33 Summary and Other Thoughts

    Chapter 6: Hardware/Software Co-Verification
    6.1 Embedded System Design Process
    6.2 Verification and Validation
    6.3 Human Interaction
    6.4 Co-Verification

    Chapter 7: Techniques for Embedded Media Processing
    7.1 A Simplified Look at a Media Processing System
    7.2 System Resource Partitioning and Code Optimization
    7.3 Event Generation and Handling
    7.4 Programming Methodology
    7.5 Architectural Feature for Efficient Programming
    7.6 Compiler Considerations for Efficient Programming
    7.7 System and Core Synchronization
    7.8 Memory Architecture—the Need for Management
    7.9 Physics of Data Movement
    7.10 Media processing Frameworks
    7.11 Defining Your Framework
    7.12 Asymmetric and Symmetric Dual-Core Processors
    7.13 Programming Models
    7.14 Strategies for Architecting a Framework
    7.15 Other Topics in Media Frameworks

    Chapter 8: DSP in Embedded Systems
    8.1 Overview of Embedded Systems and Real-Time Systems
    8.2 Real-Time Systems
    8.3 Hard Real-Time and Soft Real-Time Systems
    8.4 Efficient Execution and the Execution Environment
    8.5 Challenges in Real-Time System Design
    8.6 Summary
    8.7 Overview of Embedded Systems Development Life Cycle Using DSP
    8.8 The Embedded System Life Cycle Using DSP
    8.9 Optimizing DSP Software
    8.10 What Is Optimization?
    8.11 The Process
    8.12 Make the Common Case Fast
    8.13 Make the Common Case Fast—DSP Architectures
    8.14 Make the Common Case Fast—DSP Algorithms
    8.15 Make the Common Case Fast—DSP Compilers
    8.16 An In-Depth Discussion of DSP Optimization
    8.17 Direct Memory Access
    8.18 Using DMA
    8.19 Loop Unrolling
    8.20 Software Pipelining
    8.21 More on DSP Compilers and Optimization
    8.22 Programmer Helping Out the Compiler
    8.23 Profile-Based Compilation
    8.24 References

    Chapter 9: Practical Embedded Coding Techniques
    9.1 Reentrancy
    9.2 Atomic Variables
    9.3 Two More Rules
    9.4 Keeping Code Reentrant
    9.5 Recursion
    9.6 Asynchronous Hardware/Firmware
    9.7 Race Conditions
    9.8 Options
    9.9 Other RTOSes
    9.10 Metastable States
    9.11 Fireware, not Hardware
    9.12 Interrupt Latency
    9.13 Taking Data
    9.14 Understanding Your C Compiler: How to Minimize Code Size
    9.15 Modern C Compilers
    9.16 Tips on Programming
    9.17 Final Notes
    9.18 Acknowledgments

    Chapter 10: Development Technologies and Trends
    10.1 How to Choose a CPU for Your System or Chip Design
    10.2 Emerging Technology for Embedded Systems Software Development
    10.3 Making Development Tool Choices
    10.4 Eclipse—Bringing Embedded Tools Together
    10.5 Embedded Software and UML
    10.6 Model-Based Systems Development with xtUML

Product details

  • No. of pages: 792
  • Language: English
  • Copyright: © Newnes 2007
  • Published: September 14, 2007
  • Imprint: Newnes
  • Paperback ISBN: 9780750685832
  • eBook ISBN: 9780080552026

About the Authors

Jean Labrosse

Jean J. Labrosse is a senior technical staff member at Dynalco Controls in Fort Lauderdale, Fla. He has a master's degree in electrical engineering and has been designing embedded systems for many years. Labrosse is the author of the popular operating system and book MicroC/OS-II: The Real-Time Kernel. He has written articles for numerous magazines, and is a regular lecturer and advisory board member for the Embedded Systems Conference.

Affiliations and Expertise

Author and President of Micrium, Weston, FL, USA

Jack Ganssle

Jack Ganssle has 30 years' experience developing embedded systems. He has authored two books, The Art of Programming Embedded Systems and The Art of Designing Embedded Systems, and writes a regular column in Embedded Systems Programming magazine. Michael Barr is the editor-in-chief of Embedded Systems Programming magazine and the principal of Netrino Consultants Network. He wrote Programming Embedded Systems in C and C++.

Affiliations and Expertise

Founder and Principal Consultant, The Ganssle Group, Baltimore,MD, USA; Technical editor and columnist for Embedded Systems Programming magazine

Robert Oshana

Robert Oshana
Rob Oshana has over 25 years of experience in the real-time embedded industry, in both embedded application development as well as embedded tools development. He is currently director of engineering for the Development Technology group at Freescale Semiconductor. Rob is also a Senior Member of IEEE and an adjunct at Southern Methodist University. He can be contacted at robert.oshana@freescale.com

Affiliations and Expertise

Director of Engineering, Freescale, TX, USA

Colin Walls

Colin Walls has over forty years' experience in the electronics industry, largely involved with embedded software - very much a pioneer in this specialty. He has been a frequent presenter at conferences and seminars including: • Embedded Systems Conference, San Jose and Boston • Embedded World, Nuremberg • Arm Tech Con, California • Mentor events world-wide • Numerous partner events Colin has authored a great many technical articles and one of the first books on embedded software ["Programming Dedicated Microprocessors"; Macmillan Education, 1986]. His most recent publication is "Embedded Software: The Works" [2nd edition; Newnes, 2012], which addresses a wide range of embedded software topics. He is an embedded software technologist with Mentor, a Siemens business, and maintains a blog at http://blogs.mentor.com/colinwalls. Colin is based in the UK, where he lives with his family. Away from work, his main interests are photography, reading/writing, and food and drink.

Affiliations and Expertise

Mentor, a Siemens business, Newbury, UK

Keith E. Curtis

Keith E. Curtis earned a BSEE from Montana State University. Following graduation, he was employed by Tele-Tech Corporation as a design and project engineer, and also began consulting part-time as an embedded engineer. He was then employed by Bally Gaming in Las Vegas as an engineer and later the electronics engineering manager, working for various Nevada gaming companies in both design and management. In 2000 he began work as a Principal Application Engineer for Microchip, where he is still employed.

He has written a number of articles and regularly gives a popular course on multitasking firmware design at the Embedded Systems Conference.

Affiliations and Expertise

Principal Applications Engineer, Microchip, Chandler, AZ, USA.

Jason Andrews

Jason Andrews is currently working in the areas of hardware/software co-verification and testbench methodology for SoC design at Verisity. He has implemented multiple commercial co-verification tools as well as many custom co-verification solutions. His experience in the EDA and embedded marketplace includes software development and product management at Verisity, Axis Systems, Simpod, Summit Design, and Simulation Technologies. He has presented technical papers and tutorials at the Embedded Systems Conference, Communication Design Conference and IP/SoC and written numerous articles related to HW/SW co-verification and design verification. He has a B.S. in electrical engineering from The Citadel, Charleston, S.C., and an M.S. in electrical engineering from the University of Minnesota. He currently lives in the Minneapolis area with his wife, Deborah, and their four children.

Affiliations and Expertise

Embedded Engineer, Verisity, CA, USA

David Katz

Affiliations and Expertise

Analog Devices, Inc., Norwood, MA, USA

Rick Gentile

Rick Gentile joined ADI in 2000 as a Senior DSP Applications Engineer, and he currently leads the Processor Applications Group, which is responsible for Blackfin, SHARC and TigerSHARC processors. Prior to joining ADI, Rick was a Member of the Technical Staff at MIT Lincoln Laboratory, where he designed several signal processors used in a wide range of radar sensors. He has authored dozens of articles and presented at multiple technical conferences. He received a B.S. in 1987 from the University of Massachusetts at Amherst and an M.S. in 1994 from Northeastern University, both in Electrical and Computer Engineering.

Affiliations and Expertise

Analog Devices, Inc., Norwood, MA, USA

Kamal Hyder

Bob Perrin

Ratings and Reviews

Write a review

There are currently no reviews for "Embedded Software: Know It All"