Book description
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!
Chapter 1: Basic Embedded Programming Concepts
Chapter 2: Device Drivers
Chapter 3: Embedded Operating Systems
Chapter 4: Networking
Chapter 5: Error Handling and Debugging
Chapter 6: Hardware/Software Co-Verification
Chapter 7: Techniques for Embedded Media Processing
Chapter 8: DSP in Embedded Systems
Chapter 9: Practical Embedded Coding Techniques
Chapter 10: Development Technologies and Trends
*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
Table of contents
- Copyright
- Newnes Know It All Series
- About the Authors
- Introduction
-
1. Basic Embedded Programming Concepts
- 1.1. Numbering Systems
- 1.2. Signed Binary Numbers
- 1.3. Data Structures
- 1.4. Communications Protocols
- 1.5. Mathematics
- 1.6. Numeric Comparison
- 1.7. State Machines
- 1.8. Multitasking
-
2. Device Drivers
- 2.1. In This Chapter
-
2.2. Example 1: Device Drivers for Interrupt-Handling
- 2.2.1. Interrupt Priorities
- 2.2.2. Context Switching
-
2.2.3. Interrupt Device Driver Pseudo Code Examples
- 2.2.3.1. Interrupt-Handling Startup (Initialization) MPC860
- 2.2.3.2. Initializing CPM for Interrupts—4 Step Process
- 2.2.3.3. Interrupt-Handling Shutdown on MPC860
- 2.2.3.4. Interrupt-Handling Disable on MPC860
- 2.2.3.5. Interrupt-Handling Enable on MPC860
- 2.2.3.6. Interrupt-Handling Servicing on MPC860
- 2.2.4. Interrupt-Handling and Performance
- 2.3. Example 2: Memory Device Drivers
- 2.4. Example 3: Onboard Bus Device Drivers
-
2.5. Board I/O Driver Examples
-
2.5.1. Example 4: Initializing an Ethernet Driver
- 2.5.1.1. Data Encapsulation [Ethernet Frame]
- 2.5.1.2. Media Access Management
- 2.5.1.3. CDMA/CD (MAC Sublayer) Transmission Mode
- 2.5.1.4. CDMA/CD (MAC Sublayer) Reception Mode
- 2.5.1.5. Motorola/Freescale MPC823 Ethernet Example
- 2.5.1.6. MPC823 Ethernet Driver Pseudo Code
- 2.5.1.7. NetSilicon NET+ARM40 Ethernet Example
- 2.5.2. Example 5: Initializing an RS-232 Driver
-
2.5.1. Example 4: Initializing an Ethernet Driver
- 2.6. Summary
-
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 (BSPs)
- 3.9. Summary
-
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
-
5. Error Handling and Debugging
- 5.1. The Zen of Embedded Systems Development and Troubleshooting
- 5.2. Avoid Debugging Altogether—Code Smart
- 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
-
6. Hardware/Software Co-Verification
- 6.1. Embedded System Design Process
- 6.2. Verification and Validation
- 6.3. Human Interaction
-
6.4. Co-Verification
- 6.4.1. History of Hardware/Software Co-Verification
-
6.4.2. Co-Verification Defined
- 6.4.2.1. Definition
- 6.4.2.2. Benefits of Co-Verification
- 6.4.2.3. Project Schedule Savings
- 6.4.2.4. Co-Verification Enables Learning by Providing Visibility
- 6.4.2.5. Co-Verification Improves Communication
- 6.4.2.6. Co-Verification versus Co-Simulation
- 6.4.2.7. Co-Verification versus Codesign
- 6.4.2.8. Is Co-Verification Really Necessary?
- 6.4.3. Co-Verification Methods
-
6.4.4. A Sample of Co-Verification Methods
- 6.4.4.1. Host-Code Mode with Logic Simulation
- 6.4.4.2. Instruction Set Simulation with Logic Simulation
- 6.4.4.3. C Simulation
- 6.4.4.4. RTL Model of CPU with Software Debugging
- 6.4.4.5. Hardware Model with Logic Simulation
- 6.4.4.6. Evaluation Board with Logic Simulation
- 6.4.4.7. In-Circuit Emulation
- 6.4.4.8. FPGA Prototype
- 6.4.5. Co-Verification Metrics
-
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 Features 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.9.1. Grouping Like Transfers to Minimize Memory Bus Turnarounds
- 7.9.2. Understanding Core and DMA SDRAM Accesses
- 7.9.3. Keeping SDRAM Rows Open and Performing Multiple Passes on Data
- 7.9.4. Optimizing the System Clock Settings and Ensuring Refresh Rates Are Tuned for the Speed at Which SDRAM Runs
- 7.9.5. Exploiting Priority and Arbitration Schemes between System Resources
- 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
-
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.8.1. Step 1—Examine the Overall Needs of the System
- 8.8.2. Step 2—Select the Hardware Components Required for the System
- 8.8.3. Hardware Gates
- 8.8.4. Software-Programmable
- 8.8.5. General-Purpose Processors
- 8.8.6. Microcontrollers
- 8.8.7. FPGA Solutions
- 8.8.8. Digital Signal Processors
- 8.8.9. A General Signal Processing Solution
- 8.8.10. DSP Acceleration Decisions
- 8.8.11. Step 3—Understand DSP Basics and Architecture
- 8.8.12. Models of DSP Processing
- 8.8.13. Input/Output Options
- 8.8.14. Calculating DSP Performance
- 8.8.15. DSP Software
- 8.8.16. DSP Frameworks
- 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
-
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. Firmware, 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.16.1. Use the Right Data Size
- 9.16.2. Use the Best Pointer Types
- 9.16.3. Structures and Padding
- 9.16.4. Use Function Prototypes
- 9.16.5. Use Parameters
- 9.16.6. Do Not Take Addresses
- 9.16.7. Do Not Use Inline Assembly Language
- 9.16.8. Do Not Write Clever Code
- 9.16.9. Use Switch for Jump Tables
- 9.16.10. Investigate Bit Fields Before Using Them
- 9.16.11. Watch Out for Library Functions
- 9.16.12. Use Extra Hints
- 9.17. Final Notes
- 9.18. Acknowledgments
-
10. Development Technologies and Trends
- 10.1. How to Choose a CPU for Your System on Chip Design
- 10.2. Emerging Technology for Embedded Systems Software Development
-
10.3. Making Development Tool Choices
- 10.3.1. The Development Tool Chain
- 10.3.2. Compiler Features
- 10.3.3. Extensions for Embedded Systems
- 10.3.4. Optimizations
- 10.3.5. Build Tools: Key Issues Recapped
- 10.3.6. Debugging
- 10.3.7. Debug Tools: Key Issues Recapped
- 10.3.8. Standards and Development Tool Integration
- 10.3.9. Implications of Selections
- 10.3.10. Conclusions
- 10.4. Eclipse—Bringing Embedded Tools Together
- 10.5. Embedded Software and UML
- 10.6. Model-based Systems Development with xtUML
- 10.7. The Future
Product information
- Title: Embedded Software
- Author(s):
- Release date: September 2007
- Publisher(s): Newnes
- ISBN: None
You might also like
book
Embedded Software, 2nd Edition
As the embedded world expands, developers must have a strong grasp of many complex topics in …
book
Embedded System Interfacing
Embedded System Interfacing: Design for the Internet-of-Things (IoT) and Cyber-Physical Systems (CPS) takes a comprehensive approach …
book
Building Embedded Systems: Programmable Hardware
Develop the software and hardware you never think about. We're talking about the nitty-gritty behind the …
book
Embedded Systems: Hardware, Design and Implementation
Covers the significant embedded computing technologies—highlighting their applications in wireless communication and computing power An embedded …