A review of “Making Embedded System”
I recently read through “Making Embedded Systems” by Elecia White. This book took an interesting approach which allows both a hardware and software engineer to examine the fundamental skills of the other while revitalizing the necessary skills for their own profession. The book was an enjoyable and easy read and structured in a logical manner. At the end of each chapter the author uniquely poses an interview question or problem designed to test the skills from the chapter and challenge the reader to see the process behind the skills. I found this to not only be interesting but found it as a challenge to see if I could successfully answer the questions. Thankfully I was able to answer them mostly correct but sometimes not without a good amount of pondering.
The author does a great job of covering the fundamentals of embedded systems and presenting the material in the order that would be expected if a system was being designed. Right from the start the author dives into designing system architectures, block diagrams and design patterns. This is a critical step in the design process which I have rarely seen presented outside of short white papers. The book then continues with a discussion on bringing up the hardware, creating tests for the hardware and the fundamental tools involved.
The book dives into software with a look at fundamental peripherals such as timers and input and outputs. Techniques for debouncing buttons, measuring time and generating signals such as pulse width modulation (PWM) are covered as well. The basics of real-time scheduling are discussed along with a look into state machines and code organization. I absolutely love using state machines to control program flow so I was ecstatic they were covered albeit briefly. The author doesn’t shy away from more complex topics such as stack behavior, interrupts service routines and memory management; all of which are critical to have a properly functioning system. These are topics that no matter where you are in your career, you can always use a refresher on.
The last few chapters of the book cover optimization techniques such as code vs memory space. When developing embedded software it is of great importance to understand how long a piece of code may execute and even how much RAM/ROM will be used. The author does an excellent job of presenting a few techniques but also really imparts the importance of understanding what library math functions are really doing and how they affect the operation of the system. There are of course also techniques for approximating library math functions as well that greatly reduce execution time. In embedded system design there seems to be a pervasive trade-off between space and time. Finally, a look at optimizing for energy utilization is explored. Turning off peripherals and sleeping the processor are just two examples of techniques presented.
Whether you are a seasoned engineer looking to refresh on fundamentals of making embedded systems or a novice looking to get a better understanding of embedded systems, there are insights to be gained and fun to be had by reading “Making Embedded Systems”. I wish this book had been available more than ten years ago when I started my career. The knowledge in this book would have helped save me countless hours of debugging and troubleshooting in addition to maybe avoiding a few chance encounters with the genie in the microcontroller.
Jacob Beningo is a lecturer and consultant on embedded system design. He works with companies to develop quality and robust products and overcome their embedded design challenges. Feel free to contact him at firstname.lastname@example.org at his website www.beningo.com or on twitter @Jacob_Beningo.