Follow @jack_ganssle

Review: Real-Time Embedded Systems

Summary: The new book Real-Time Embedded Systems is dry, pretty mathy, but very complete with some important topics one rarely sees covered.

Xiaocong Fan's new book, Real-Time Embedded Systems, is a weighty tome at 662 pages.

It's a textbook, not an O'Reilly or Microsoft Press-style quick read. Each chapter ends with problems. The introduction clearly lays out how it should be used in a classroom. Academia is often out of sync with the needs of practicing engineers, so I was surprised, and pleased, to find that this book uses C, not one of the languages-de-jour that no one really uses.

One of the early chapters is about cross-platform development, the environment we embedded people spend our lives in. It does an excellent job of covering the details no one talks about, like ELF/COFF files and link sections (e.g., .bss). Since this is a textbook, I sure hope instructors using it offer open-book exams. The level of detail about the file formats and the number of linker sections is far greater than any of us should memorize.

The "Microprocessor Primer" chapter gives pretty detailed information about four chips: the PIC18F8720, 8086, Pentium and ARM926, including timing diagrams that show how these devices access the bus. Good stuff, especially the choice of the PIC part. However, why the 8086 and Pentium in a book about embedded systems? I'm not sure if you can even buy an 8086 anymore; Digi-Key doesn't list the part. The ARM is a decent choice, but I would have added a Cortex-M device.

A chapter on interrupts delves deeply and quickly into the important nuances of the subject. Chaining and cascading are covered, as are the critical issues in sharing data with interrupt handlers.

170 pages are devoted to UML. Pretty much all of the books I have on UML are big, fat and boring. Mr. Fan can't bring any excitement to this dry subject, but this is a reasonably tight and thorough description of the subject.

Architectural design is covered well. One chapter deals with non-RTOS design; for example, using an interrupt-driven queue to sequence activities. The next 11 chapters deal with just about every aspect of using an RTOS. Some of the material has been well-covered in other books (like priority inversion). But there's much that's really interesting. We all think about avoiding deadlocks, for example. What about detecting them? Mr. Fan gives the theory and an algorithm for just that.

The book's take on task schedulability is more complete than any other reference I know. It's thick stuff; the math isn't hard, but the author prefers equations to prose at times. Developers of safety-critical systems may well benefit from this, and from the discussions about scheduling aperiodic and sporadic tasks.

POSIX in general and QNX in particular get a lot of attention. A chapter about QNX resource management will be useless to anyone not using that RTOS. But the vast majority of the material is OS agnostic.

Guess what's not in the book: any description about number systems and related subjects that, it seems, every computer book must exhaustively natter on about. Sometimes I think I could free up a few meters of shelf space by ripping out those chapters from all of the computer books stacked up here.

This book is not a beach read. It's heavy going at times. There's a lot of formal mathematical notation. But the subjects are covered well and there are plenty of very pertinent illustrations - state charts, flow charts and more - that clarify complex ideas. I recommend it for those willing to struggle a bit with the book; you'll get some really worthwhile ideas.

Published July 23, 2015