"Embedded System design" moves the reader with an academic understanding of embedded microprocessor systems to a position of practical understanding of the technology. This is the kind of experience gained by an engineer working in the field over many years. Dr. Berger is clearly writing from knowledge acquired first hand; and he conveys this efficiently and enjoyably. The book presents the essential information needed to enable an inexperienced engineered, or student, to quickly become a productive member of an embedded engineering team.
The book goes beyond what some might consider junior engineering activates. It deals with many of the more challenging tasks; such as hardware-software tradeoffs and tool-processor compatibilities. Much of this material is unfortunately not included in engineering training courses. I would say that the material presented has been well selected and is essential knowledge for an engineer developing embedded system software.
The book is ideal for software developers already familiar with developing code for PC or Unix-workstation execution, but wishing to know how to retarget code for execution on an embedded processor based system. This requires a more complex development, and in particular debug, environment. Additionally, managers new to the embedded product development phases will learn the pitfalls to be avoided. There are many decisions to be made in leading a successful embedded project. This book will help you make the right ones and accelerate acquisition of your project management skills.
There are a number of significant pressures effecting current embedded projects: The drive for shorter product development times; The use of higher performance processors; Increased software complexity and interoperability; The desire to restrain project tool and man-power costs. The book does a good job at covering these issues. The traditional or established methodologies are covered as well as the latest trends and likely future directions.
The book is ordered much like a real embedded project. First there is the selection process. This includes the processor itself. But this cannot occur in isolation of the software development tool chain; and other critical components, such as a real-time operating system. The balancing of these sometimes-conflicting requirements is very important and present with the clarity of a veteran campaigner. The book moves on to deal with hardware-software portioning - not something the typical PC software developer has to resolve. Similarly, the construction of the embedded run-time environment is explained. This is followed by an explanation of development tool operation; In particular, the all-too-often challenge of embedded software debug - This topic is particularly well explained. Specialised software topics, such as interrupt processing and low-level hardware manipulation are, as you would expect, covered. Finally, there is a section on testing, and an exploration of future trends.
In summary the book contains the right material, it is presented in an easy to absorb manor and is practically oriented. I highly recommended it to embedded engineering students, or engineers and managers facing the challenges of an embedded processor development project.