Thoughts on "Making Embedded Systems" by Elecia White
I recently finished reading Elecia White's book "Making Embedded Systems: Design Patterns for Great Software". Elecia is a highly experienced professional embedded software engineer and also host of one of my favorite podcasts, Embedded.fm.
"Making Embedded Systems" was a great follow up to Jonathan Valvano's book "Realtime Interfacing to ARM Cortex-M Microcontrollers". I've spent a good amount of time reading, reviewing and referencing Valvano's books while working on my various TM4C123G based projects over the past few months.
Valvano's books are very technical, with information usually specifically related to Texas Instrument's TM4C123G development board. This is very helpful in giving insight into fundamental microcontroller concepts and explaining some of the more complicated topics covered in the TM4C123G datasheet.
Elecia White's "Making Embedded Systems" differs from the style of Valvano's books in that it's more of an in depth conversation with a seasoned embedded systems professional. Not only did this style make the book a joy to read, but it felt like the perfect complement to the Valvano books I've read during my self-education of embedded systems.
I felt like "Making Embedded Systems" gave me good insight into what it's like to work as an embedded systems software engineer. It covers everything from the basics (interrupts, communication protocols), to essential tools (yes, I've learned from experience the value of needle-nose pliers and logic analyzers), to software design, to optimization and making the most out of limited microcontroller resources.
The code examples in this book are in C. This is no surprise as it seems to be the language of choice for the vast majority of embedded development. It was interesting to see White's clever ways of effectively using Design Patterns in a non-object-oriented language.
Additionally, in my earlier projects, I've found myself wondering how best to analyze performance of embedded code. I have experience with profiling applications running on standard OS's using tools such as VTune, but it was not obvious how best to go about profiling embedded software running on bare metal. Chapter 8 gave me some excellent suggestions.
Self-teaching embedded systems programming and design over the last nine or ten months has been a lot of fun, but also challenging at times. Information can be difficult to find; often Googling through blogs and forums in hopes of gleaning tidbits of essential information. Elecia White's "Making Embedded Systems" and Jonathan Valvano's "ARM Cortex-M Microcontroller" series have been very helpful in my embedded systems journey and I would recommend them to anyone.