About the Authors |
|
x | |
Introduction |
|
xiii | |
|
Basic Embedded Programming Concepts |
|
|
1 | (84) |
|
|
2 | (3) |
|
|
5 | (8) |
|
|
13 | (16) |
|
|
29 | (8) |
|
|
37 | (9) |
|
|
46 | (13) |
|
|
59 | (15) |
|
|
74 | (11) |
|
|
85 | (84) |
|
|
85 | (4) |
|
Example 1: Device Drivers for Interrupt-Handling |
|
|
89 | (21) |
|
Example 2: Memory Device Drivers |
|
|
110 | (24) |
|
Example 3: Onboard Bus Device Drivers |
|
|
134 | (9) |
|
Board I/O Driver Examples |
|
|
143 | (25) |
|
|
168 | (1) |
|
Embedded Operating Systems |
|
|
169 | (72) |
|
|
169 | (6) |
|
|
175 | (2) |
|
Multitasking and Process Management |
|
|
177 | (36) |
|
|
213 | (17) |
|
I/O and File System Management |
|
|
230 | (2) |
|
OS Standards Example: POSIX (Portable Operating System Interface) |
|
|
232 | (3) |
|
OS Performance Guidelines |
|
|
235 | (2) |
|
OSes and Board Support Packages (BSPs) |
|
|
237 | (2) |
|
|
239 | (2) |
|
|
241 | (92) |
|
Introduction to the RCM3200 Rabbit Core |
|
|
243 | (1) |
|
Introduction to the Dynamic C Development Environment |
|
|
244 | (2) |
|
Brief Introduction to Dynamic C Libraries |
|
|
246 | (1) |
|
Memory Spaces in Dynamic C |
|
|
247 | (9) |
|
How Code Is Compiled and Run |
|
|
256 | (3) |
|
Setting Up a PC as an RCM3200 Development System |
|
|
259 | (1) |
|
Time to Start Writing Code! |
|
|
259 | (15) |
|
|
274 | (1) |
|
Dynamic C Support for Networking Protocols |
|
|
275 | (4) |
|
|
279 | (3) |
|
Setting Up a Core Module's Network Configuration |
|
|
282 | (6) |
|
Project 1: Bringing Up a Rabbit Core Module for Networking |
|
|
288 | (5) |
|
The Client Server Paradigm |
|
|
293 | (1) |
|
The Berkeley Sockets Interface |
|
|
294 | (4) |
|
Using TCP versus UDP in an Embedded Application |
|
|
298 | (2) |
|
Important Dynamic C Library Functions for Socket Programming |
|
|
300 | (3) |
|
Project 2: Implementing a Rabbit TCP/IP Server |
|
|
303 | (8) |
|
Project 3: Implementing a Rabbit TCP/IP Client |
|
|
311 | (11) |
|
Project 4: Implementing a Rabbit UDP Server |
|
|
322 | (6) |
|
Some Useful (and Free!) Networking Utilities |
|
|
328 | (3) |
|
|
331 | (2) |
|
Error Handling and Debugging |
|
|
333 | (66) |
|
The Zen of Embedded Systems Development and Troubleshooting |
|
|
333 | (7) |
|
Avoid Debugging Altogether---Code Smart |
|
|
340 | (1) |
|
|
341 | (1) |
|
|
342 | (2) |
|
|
344 | (2) |
|
|
346 | (1) |
|
|
347 | (1) |
|
|
348 | (1) |
|
|
349 | (1) |
|
Implementing Downloadable Firmware with Flash Memory |
|
|
350 | (1) |
|
|
350 | (1) |
|
Advantages of Microprogrammers |
|
|
351 | (1) |
|
Disadvantages of Microprogrammers |
|
|
351 | (1) |
|
Receiving a Microprogrammer |
|
|
352 | (2) |
|
|
354 | (1) |
|
Common Problems and Their Solutions |
|
|
355 | (7) |
|
|
362 | (2) |
|
|
364 | (1) |
|
|
365 | (2) |
|
|
367 | (5) |
|
|
372 | (1) |
|
|
372 | (2) |
|
|
374 | (4) |
|
|
378 | (1) |
|
|
378 | (1) |
|
Building a Great Watchdog |
|
|
379 | (3) |
|
|
382 | (2) |
|
|
384 | (2) |
|
Characteristics of Great WDTs |
|
|
386 | (3) |
|
|
389 | (2) |
|
|
391 | (2) |
|
|
393 | (2) |
|
Summary and Other Thoughts |
|
|
395 | (4) |
|
Hardware/Software Co-Verification |
|
|
399 | (44) |
|
Embedded System Design Process |
|
|
399 | (2) |
|
Verification and Validation |
|
|
401 | (2) |
|
|
403 | (2) |
|
|
405 | (38) |
|
Techniques for Embedded Media Processing |
|
|
443 | (86) |
|
A Simplified Look at a Media Processing System |
|
|
445 | (6) |
|
System Resource Partitioning and Code Optimization |
|
|
451 | (1) |
|
Event Generation and Handling |
|
|
452 | (3) |
|
|
455 | (1) |
|
Architectural Features for Efficient Programming |
|
|
456 | (9) |
|
Compiler Considerations for Efficient Programming |
|
|
465 | (7) |
|
System and Core Synchronization |
|
|
472 | (4) |
|
Memory Architecture---the Need for Management |
|
|
476 | (12) |
|
|
488 | (7) |
|
Media Processing Frameworks |
|
|
495 | (2) |
|
|
497 | (8) |
|
Asymmetric and Symmetric Dual-Core Processors |
|
|
505 | (2) |
|
|
507 | (3) |
|
Strategies for Architecting a Framework |
|
|
510 | (13) |
|
Other Topics in Media Frameworks |
|
|
523 | (6) |
|
|
529 | (126) |
|
Overview of Embedded Systems and Real-Time Systems |
|
|
536 | (1) |
|
|
536 | (1) |
|
Hard Real-Time and Soft Real-Time Systems |
|
|
537 | (4) |
|
Efficient Execution and the Execution Environment |
|
|
541 | (1) |
|
Challenges in Real-Time System Design |
|
|
542 | (11) |
|
|
553 | (1) |
|
Overview of Embedded Systems Development Life Cycle Using DSP |
|
|
554 | (1) |
|
The Embedded System Life Cycle Using DSP |
|
|
554 | (26) |
|
|
580 | (1) |
|
|
580 | (1) |
|
|
581 | (3) |
|
Make the Common Case Fast |
|
|
584 | (1) |
|
Make the Common Case Fast---DSP Architectures |
|
|
584 | (3) |
|
Make the Common Case Fast---DSP Algorithms |
|
|
587 | (1) |
|
Make the Common Case Fast---DSP Compilers |
|
|
588 | (7) |
|
An In-Depth Discussion of DSP Optimization |
|
|
595 | (1) |
|
|
595 | (1) |
|
|
596 | (8) |
|
|
604 | (6) |
|
|
610 | (10) |
|
More on DSP Compilers and Optimization |
|
|
620 | (13) |
|
Programmer Helping Out the Compiler |
|
|
633 | (13) |
|
Profile-Based Compilation |
|
|
646 | (7) |
|
|
653 | (2) |
|
Practical Embedded Coding Techniques |
|
|
655 | (42) |
|
|
655 | (1) |
|
|
656 | (2) |
|
|
658 | (1) |
|
|
659 | (2) |
|
|
661 | (1) |
|
Asynchronous Hardware/Firmware |
|
|
661 | (1) |
|
|
662 | (2) |
|
|
664 | (1) |
|
|
665 | (1) |
|
|
666 | (2) |
|
|
668 | (3) |
|
|
671 | (3) |
|
|
674 | (3) |
|
Understanding Your C Compiler: How to Minimize Code Size |
|
|
677 | (1) |
|
|
677 | (10) |
|
|
687 | (8) |
|
|
695 | (1) |
|
|
696 | (1) |
|
Development Technologies and Trends |
|
|
697 | (48) |
|
How to Choose a CPU for Your System on Chip Design |
|
|
697 | (3) |
|
Emerging Technology for Embedded Systems Software Development |
|
|
700 | (7) |
|
Making Development Tool Choices |
|
|
707 | (14) |
|
Eclipse---Bringing Embedded Tools Together |
|
|
721 | (4) |
|
Embedded Software and UML |
|
|
725 | (14) |
|
Model-based Systems Development with xtUML |
|
|
739 | (4) |
|
|
743 | (2) |
Index |
|
745 | |