Miscellaneous Embedded Resources
The aim of this repository is to collect all the cool stuff I've come across on the internet related to embedded systems. I like reading and I like embedded systems, so it makes sense that I would maintain a repository of (mostly) reading material related to embedded systems. There are also some videos that I've found useful.
Roadmaps/Compilations:
- Embedded Artistry's Field Atlas
- m3y54m's Embedded Engineering Roadmap
- Embedded Systems Roadmaps - Nathan Jones
- So You Want To Be An Embedded Systems Developer - Steve Branam
- Skills For Embedded Systems Software Developers - Steve Branam
- A skills tree by Elecia White
Tutorials
- Playbook: Writing Portable Embedded Software
- The biggest dilemma of embedded software - how do you write reusable code that is robust to changes in hardware, and yet is customized entirely for the hardware you're working on? Seems like a contradiction, but there are ways around it.
- Introduction to Microcontrollers
- A comprehensive 14-part intro. The sections on interrupts and timers is worth a read, at least.
- Important Programming Concepts
- Some concepts from CS that are relevant to embedded systems
- I2C Communication Protocol: Understanding I2C Primer, PMBus, and SMBus
- One of the best primers I've come across for I2C, I've referenced this on multiple occasions.
- As an add-on, this article [Resolving I2C Address Conflicts] is a succint compilation of ways you can deal with I2C address conflicts.
- Another good resource: I2C in a Nutshell
- A Guide to Undefined Behavior in C and C++
- One of those things that no one likes to talk about. But a big part of writing "good code" involves eliminating these undefined behaviors.
- What Every C Programmer Should Know About Undefined Behavior is also a great read
- You Don't Need an RTOS
- When do you need an RTOS?
- Diving into JTAG
Videos
Embedded Software
- Tricky Parts of Embedded given at IEEE-CS (SiliconValley): Elecia White
- Buried Treasure and Map Files: Elecia White
- An amazing video by an embedded software legend on how to understand and use map files to debug some tricky embedded bugs.
- Resources and graphics for the talk are available on the accompanying Embedded.fm page
- Writing better embedded Software - Dan Saks - Keynote Meeting Embedded 2018
- This talk focuses a lot on C++. However, the underlying principles are what we need to pay attention to.
- Why - Linker script? | Assembly, C on Bare-metal RISC-V
- A good video on linker scripts and when we would want to write them
PCB Design, Circuits
- How to Achieve Proper Grounding: Rick Hartley
- An amazing webinar that completely changed the way I see the humble ground.
- What Every PCB Designer Should Know - Return Current Path: Robert Feranec, Eric Bogatin
- What Every PCB Designer Should Know - Crosstalk Explained: Robert Feranec, Eric Bogatin
- EEVblog #279 - How NOT To Blow Up Your Oscilloscope!
- Very important!
- EEVblog #859 - Bypass Capacitor Tutorial
Miscellaneous
- A General Overview of What Happens Before main()
- For most acolytes of the CS path, life begins at main(). For embedded engineers, it starts before that - right from the time the device is powered on. This is a wonderful model of how to understand all the mechanisms by which code execution ends up at main().
- The Ten Commandments for C Programmers (Annotated Edition)
- The volatile keyword
- Implementing State Machines
- How you implement them in code
- Here's another nice one: How to code a state machine on C or C++
- Small or fast?
- Conveys a lens through which to look at code that's very important to professional embedded firmware
- For example: ++i and i++ : what's the difference?
- A Schematic Review Checklist for Firmware Engineers
- Size Optimization Tricks
- Again, something every professional embedded engineer should be thinking about
- Write Better Code with Block Diagrams and Flowcharts
- The Lost Art of Structure Packing
- A deep dive into how C structures are organized in memory
- C Structure Padding Initialization: Also a good resource for the same thing
- On finding the average of two unsigned integers without overflow
- So you thought finding the average of two numbers was easy? W R O N G. This is a reminder of how overflow errors and C types are nuances that shouldn't be ignored.
- My guiding principles after 20 years of programming
- Life advice. Point 8 and 9 might be the most important things I've learned over the last three years.
- Engineering Lessons I’ve Learned from Working at the Japanese Tea Garden
- More life advice. A lot of this is relevant only when you start working, but it's on point.
- Nash's Four Favorite Firmware Debug Tools
- u/LongUsername's comment on a reddit thread about the future of embedded engineering
- Not a single statement I would disagree with here
- Jaywalking Around the Compiler
- A reminder not to mess with things that your compiler manages
- How to debug a HardFault on an ARM Cortex-M MCU
- If the whole world was made of embedded engineers, hard faults would be an acceptable Halloween costume.
- The Best and Worst GCC Compiler Flags For Embedded
- Understanding how to "customize" your compiler to force you to produce code in a certain way is a useful thing to know
- Best practices in firmware
- Just some general good advice
- Demystifying Arm TrustZone: A Comprehensive Survey
- Inside .git
- A fantastic exposition on the internals of how git manages its repositories
- Related: How HEAD works in git. Detached heads aren't just a problem in real life, they're also a problem in git repos.
- Related: Confusing git terminology