I highly recommend this book to all embedded engineers.
Embedded software design is different to 'normal' software design in many ways that a 'conventional' programmer may not realise. (In this instance real-time is almost invariably embedded). It should come as no surprise that this book starts with a chapter on hardware. I do not mean the usual stroll down binary, hex and address lines for beginners that most books have. There are comments on things like power consumption and heat generation with memory usage and other places where the software has an impact on the hardware and vice versa. So read it (software engineers should read this section more than once!).
The rest of the book looks at, as you would expect, design issues with an embedded slant using lots of sensible real time examples. However there are lots of small touches that make this book different.
One of the chapters that is unusual and I think unique to Jim Cooling's books is a chapter on why and how we should use diagrams in general. Everyone will benefit from reading this section. Just as one can write unreadable code one can produce inappropriate and unreadable diagrams. The following sections look how at the various well-known and some not so common diagramming methods can be used for real-time work. Most useful is a diagram showing the scope of each. Methods are different not equal.
The only superfluous part of the book to my mind is the language comparison. These days there is usually little choice in language for real-time. It is usually either assembler, C/C++, Ada or 'what we used last time' because those are the tools available.
One area many will find useful is the discussion on the pros and cons of embedded OS and methods of inter-task communications. Whilst many of the smaller embedded systems do not need any OS, some embedded systems need a multitasking OS on the scale of Unix. The requirements for real-time OS are different from the desktop. (They have to be reliable for one thing).
For those moving into embedded (and some of the old hands who have had a sheltered life) there is a very useful section on embedded debug tools. From my experience, this will be a revelation to some. Most embedded systems can not be debugged with 'printf' and traditional software debugging. Also the hardware often has to be debugged at the same time.
All of the chapters are self-contained and make this an excellent book to dip into. This appears to be a book aimed at qualified engineers moving to embedded and real time work rather than new students. As the book spans the whole range of embedded development (apart from coding) I highly recommend this book to all embedded engineers.