📖 Book Recommendations
Test Driven Development for Embedded C
Another day without Test-Driven Development means more time wasted chasing bugs and watching your code deteriorate. You thought TDD was for someone else, but it's not! It's for you, the embedded C programmer. TDD helps you prevent defects and build software with a long useful life. This is the first book to teach the hows and whys of TDD for C programmers.
Embedded Systems with ARM Cortex-M Microcontrollers in Assembly Language and C
The book introduces basic programming of ARM Cortex-M cores in assembly and C at the register level, and the fundamentals of embedded system design. It presents basic concepts such as data representations (integer, fixed-point, floating-point), assembly instructions, stack, and implementing basic controls and functions of C language at the assembly level. It covers advanced topics such as interrupts, mixing C and assembly, direct memory access (DMA), system timers (SysTick), multi-tasking, SIMD instructions for digital signal processing (DSP), and instruction encoding/decoding.
Modern CMake for C++
This book offers a simpler, more comprehensive experience as it treats the subject of building C++ solutions holistically. Modern CMake for C++ is an end-to-end guide to the automatization of complex tasks, including building, testing, and packaging. You'll not only learn how to use the CMake language in CMake projects, but also discover what makes them maintainable, elegant, and clean.
The Pragmatic Programmer
This book offers practical tips and timeless principles for becoming a better programmer. It covers topics such as personal responsibility, career development, architectural techniques, and continuous learning. With engaging anecdotes and concrete advice, it encourages developers to write flexible, adaptable, and maintainable code.
The Art of Electronics 3rd Edition
A classic. You can find the excellent second edition for a great price.
Designing Electronics that Work
The book that teaches the practical secrets of electronics design that most engineers learn the hard way.
And More Books!
- The C Book: Mike Banahan, Declan Brady and Mark Doran
- Good, complete introduction to C
- Modern C: Jens Gustedt
- More advanced C usage and structures.
-
Making Embedded Systems: Design Patterns for Great Software: Elecia White
- A classic. At least the first 4 chapters are a must-read.
- Debugging: David J. Agans
- One of my all time top recommendations. Gives you some principles to follow while debugging embedded systems.
- Better Embedded System Software: Philip Koopman
- A comprehensive guide to writing good embedded software.
- Embedded C Coding Standard: Barr Group
- Though I found this on a blog, it's long enough to be a book. What I like about this standard is that it's not a standard based on stylistic preferences or convention - each rule is designed to minimize software defects, and along with every rule is accompanying reasoning (so you can see for yourself how it minimizes defects) and an idea on how to enforce it.
- Reusable Firmware Development: Jacob Beningo
- A book that focuses on how to write platform-independent embedded software.
- High Speed Digital Design: A Handbook of Black Magic: Howard Johnson, Martin Graham
- Talks about how the problems with analog circuits show up in digital circuits. An important note is that the ideas in this book don't just apply to RF and high frequency digital signals - these issues show up even in low frequency digital signals with high slew rate (dV/dt). So it's applicable to pretty much any modern hardware system that relies on digital signals.
- Troubleshooting Analog Circuits: Robert Pease
- A book that has helped me troubleshoot some analog circuits that I've designed before. Highly recommend.
- The Art of Electronics: Paul Horowitz, Winfield Hill
- Because which electronics book list is complete without this? This has been really useful to troubleshoot some issues with mostly analog circuits. What I like about it is that it contains all the information a designer needs to know in one place.





