New to Building Embedded Systems?
When we started working with embedded systems, we were overwhelmed by the lack of information available to beginners. We are sharing useful reference materials to get you started with programming and embedded systems development.
Electrical Engineering | Product Development | Recommended Videos | Career Guidance
Books We Love
Programming Languages
Every programmer needs to be armed with a tool-belt of languages. We think embedded developers should be confident in C, C++, Assembly, and Python.
C
- Learn C the Hard Way – If you’re not comfortable with C yet, Learn Code the Hard Way has an C programming course. I recommend this course because it provides hands-on demos and examples.
- The Basics and Pitfalls of Pointers in C
- When 4 + 1 Equals 8: An Advanced Take on Pointers in C
Python
- Learn Python the Hard Way – Introduction to Python. Learn to program in Python using hands-on challenges.
- Top 43 Free Python Tutorials provides a ranked/reviewed listing of tutorials.
C++
- A Tour of C++ (2nd ed.) is a great introduction to C++ written by the language’s creator. Recently updated for C++17
- Effective Modern C++ – Provides tips and strategies for effectively using new C++11 an C++14 features. Definitely worth reading if you are
- C++ Best Practices – a “Collaborative Collection of C++ Best Practices”. Covers the safety, maintainability, portability, threadability, and performance of C++ code.
Assembly
- Writing ARM Assembly is a great introductory series
- Guide to Instruction Set Architecture (ISA)
Foundational Programming Topics
These skills are essential to programming in a professional environment.
Essential Reading
- Every Programmer Should Know
- Memory management – a requirement for low-level programming
- A Successful git Branching Model – many projects use this git development model
- Debugging: The 9 Indispensable Rules – master a skill you’ll use every day
Other Recommended Reading
- The Architecture of Open Source Applications – learn how popular open-source applications are designed
- Atoms of Confusion – information on making confusing code constructs more understandable
- Is Volatile Useful With Threads – the answer may surprise you
- Jack Ganssle says: “I’ve Never Had a Bug in My Code”
- Myths Programmers Believe about CPU Caches
- Comparing Floating Point Numbers is Tricky
- Threads and Locks Must Go
Open Source Development
- How to Contribute to an Open-Source Project on GitHub
- Make a Pull Request
- First Timers Only – Friendly Open Source projects should reserve specific issues for newbies.
Code reviews
Arne Mertz of Simplify C++ published a series on the topic of code reviews. This is a common software development activity, and these articles will help you prepare for reviews like a pro.
Getting Started with Embedded Systems
As an embedded engineer, you need to be comfortable working at the intersection between hardware and software. These resources will help you develop the fundamental skills needed to build embedded systems.
Firmware
The following resources will help you learn embedded software development techniques:
- Real Time C++: Efficient Object-Oriented Template Microcontroller Programming – This is my FAVORITE embedded C++ reference and a great beginner book
- Making Embedded Systems: Design Patterns for Great Software – Introductory book. Includes interview tips, design patterns, and your first embedded project
- Phil Koopman’s Course Notes
- Programming Embedded Systems -Slightly dated examples, but the concepts are still valid and applicable
- Embedded Wednesdays: Getting Started in Embedded Systems
- Embedded for Everyone – A wiki that provides a path for migrating from Arduino to full-fledged embedded development
- Embedded Software Engineering 101 – Another series by Embedded.fm
- Miro Samek’s Modern Embedded Systems Programming Video Course
- Embedded Systems Lectures by James Conrad
Blogs & Newsletters
- Ganssle Group – Jack Ganssle’s website. I recommend reading everything he has written
- The Embedded Muse – Jack Ganssle’s long-running firmware newsletter
- Embedded.fm – embedded systems podcast. Here’s a list of all episodes.
- Steve Branam writes about Embedded Systems and also has an excellent beginner’s guide.
- ElectronVector – Test-First Embedded – Matt Chernosky’s blog, focused on TDD
- Meeting Embedded – A collection of embedded systems articles from around the web, updated weekly
- Embedded Systems Weekly – a curated list of technical links related to embedded systems design
- Sticky Bits – a real-time and embedded software blog
- Embedded Gurus – A group blog run by embedded pros. Inactive, but full of good information.
- Better Embedded Software – the blog of Phil Koopman, an embedded professor
Hardware
Embedded developers will benefit from having experience with electrical engineering and how circuits work. The following resources will help you get started:
- Practical Electronics for Inventors
- All About Circuits
- Free Textbooks – covering DC, AC, Semiconductors, Digital signals, Experiments, and RF Analysis and design
- Video Lectures
- Sparkfun – great source of hands-on projects to grow your embedded/hardware skills
- Adafruit – another great source for hands-on projects and tutorials to grow your embedded/hardware skills
Real-Time Operating Systems
- Miro Samek’s Modern Embedded Systems Programming Course contains a series of videos on RTOS concepts (starting at episode 22)
- RTOS Revealed Series by Colin Walls explains RTOS concepts in detail
- Architecture of Open Source Applications: FreeRTOS gives you an inside look at FreeRTOS
References
- Phil Koopman’s Course Notes
- Real-Time Software Design for Embedded Systems – Course Notes
- Bithacks – An excellent resource for bit manipulation routines. This code is in the public domain and is used in a variety of projects I’ve worked on.
- OS Development Wiki – wiki for diving into low-level operating-system concepts and OS design.
- IoT Security Maturity Model – Security must be a core system concern
Electrical Engineering
References, rules of thumb, and other useful resources.
References
- All About Circuits
- Textbooks – A set of free textbooks covering DC, AC, Semiconductors, Digital signals, Experiments, and RF Analysis and design
- Video Lectures
- Worksheets – test your EE knowledge!
- The Art of Electronics is our favorite general book for electronics
- WikiDev – A hardware database, especially useful for chipset comparisons
- Battery University – Your product probably has a battery, and this website contains an information treasure trove.
Rules of Thumb
- Bogatin’s Rules of Thumb – A series of 32 articles covering electrical design techniques. Recommended for all EEs
- Decoupling Capacitors (And Other Power Rules of Thumb)
- PCB Layout Tips and Tricks: Minimizing Decoupling Inductance
- How to Choose the Frequency Of Your Switching Regulator
- I2C Design Mathematics: Capacitance and Resistance
Resources
- DatasheetPro – Datasheet Search Engine
- Circuit Cellar: PCB Vendors for Quick Prototyping Solutions
- CapacitorFaks – capacitor search tool
Product Development
Resources for those working on the product design and manufacturing
Websites We Like
- Bolt VC Blog – advice on hardware product development
- Dragon Innovation Blog – manufacturing-focused blog
- China Law Blog – read this website before you start manufacturing in China to avoid common mistakes
Helpful Links
-
USB PID Codes – Provides open source hardware projects with an official VID/PID, saving you $5000
Recommended Videos
Our YouTube channel has a curated set of playlists related to programming and embedded systems. We’ve also saved high quality lectures and playlists from other channels on YouTube.
On Embedded
On Hardware
On Programming
Career Guidance
The following resources will build a solid foundation for your career. Keeping your career on track is just as important as improving your engineering abilities. If you only read one item from the links below, we think the most important is The Unwritten Laws of Engineering
- The Unwritten Laws of Engineering was written in 1944, and its advice on career management still applies today
- Marc Andreesen’s Career Planning Guide
- Marc Andreesen’s Guide to Personal Productivity
Books We Love
The following books were mentioned throughout this page. By purchasing books using our Amazon affiliate links, you enable us to continue supporting the embedded community.