Computers as Components: Principles of Embedded Computer Design
It is not always easy to tell a book by its cover, and Computers as Components: Principles of Embedded Computer Design by Wayne Wolf fits into this category. The title alludes to a component-based design approach, therefore I was disappointed that the book really does not address this approach. On the other hand, it does to a very good job of covering the principles of embedded design, so just take the main title with a grain of salt.
The book is really an introduction to microcontroller architecture and related software support, such as a real-time operating system (RTOS). It actually starts with a UML (unified modeling language) description of various embedded systems. Like the rest of the book, it gets you started but does not overwhelm with a full blown treatise of the subject. Wolf explains just enough UML to make the examples understandable. Likewise, each chapter is a relatively standalone feature, so you can skip around based on your experience. Although UML, assembler, and C are used throughout the book to varying degrees, you do not need to become an expert on any to make use of the information being presented.
Overall chapter layout should be familiar to anyone that has worked with embedded systems. It starts with a hardware architecture overview using the ARM as a general-purpose processor example and the SHARC as a digital-signal processor (DSP) example. The next chapter delves into details like supervisor mode, memory management units, and even touches on power consumption. At this point, the chapters are rounded out with one or more design examples that are covered in some detail, including design criteria and specification.
Software eventually crops up with discussions on the basics like assembler, linker, and compiler operation. The book covers some basic compiler optimization techniques and also addresses program validation and testing. The chapter on operating systems is very good and includes coverage of scheduling techniques, such as rate-monotonic scheduling and earliest-deadline-first, that tend to be more prominent in embedded applications than in conventional server or desktop operating environments.
The chapter on networking is similar to the others in that the material is introductory in nature, but leaving out the more advanced material could give readers the wrong impression of the current state of affairs. For example, the CAN discussion actually addresses the CAN 1.x standard with 11-bit identifiers while most implementations now employ CAN 2.0 that supports 29-bit identifiers in addition to being backward compatible. It is a relatively minor oversight ,especially when considering the target audience. It’s odd that Myrinet is included while things like RapidIO and InfiniBand are left out.
The book wraps up with a discussion of system design and testing techniques. This includes a section on quality assurance. This chapter tends to be the most superficial. However, it does bring home some key facts that new developers should be aware of, such as the dramatic increase of cost for fixing a bug the longer it exists. Any embedded developer cringes at the thought of trying to fix a bug in the field.
Wayne Wolf has put together a good product for budding developers (read: college students). It is also a great hardware and system overview for programmers that may soon be immersed embedded system design.