New to programming or embedded systems? 

When I started working with embedded systems, I was overwhelmed by the lack of information available to beginners. I am sharing useful reference materials to get you started with programming and embedded systems development.

I wish I had this type of resource when I was starting out - I hope it serves as a shortcut on your journey.

Table of Contents

  1. Programming Resources
    1. General Resources
      1. Websites
      2. Books
    2. C++
    3. C
    4. Python
  2. Getting Started With Embedded Systems
    1. Software
    2. Hardware
  3. Managing Your Career
    1. Code Reviews
    2. Startups
  4. Tools I Use

Programming Resources

For programmers looking to work with embedded systems, I recommend learning a few languages:

  • C++
  • C
  • Python (many host tools are written in Python)
  • Assembly (familiarity is helpful, but not required)

Secondary languages to familiarize yourself:

  • JSON the most common data description format that I come across in embedded systems
  • YAML is another common data description format
  • Lua is a lightweight scripting language that can be implemented on embedded processors

General Programming Resources

The following resources do not apply to a specific language, but cover general software principles, git, and the open-source ecosystem.

Websites

Books

C++

  • Effective Modern C++ - Provides tips and strategies for effectively using new C++11 an C++14 features. Definitely worth reading if you are
  • Introductory Modern C++ Course Notes (IFS) - Helpful course notes introducing C++
  • Advanced Modern C++ Course Notes (IFS)[ Expand] - Continuation from the introductory course. This course teaches more advanced Modern C++ concepts
  • C++ Best Practices - a "Collaborative Collection of C++ Best Practices". It's a highly valuable source for modern software development with C++ and general considerations of good C++ code. This general considerations include the safety, maintainability, portability, threadability, and performance of the code.

C

Python

Getting Started with Embedded Systems

The following resources will introduce you to the fundamentals of working with embedded systems.

Software

Hardware

Embedded developers will benefit from having experience with electrical engineering and how circuits work. The following resources will help you get started:

  • 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 with these worksheets
  • Sparkfun - great source of hands-on projects to grow your embedded/hardware knowledge

Managing Your Career

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 provide you with a solid foundation.

  1. Code Reviews - Why?
  2. Code Reviews - What?
  3. Code Reviews - Preparation
  4. Code Reviews - How?
  5. Code Reviews - The Human Aspect

I'd also be remiss not to mention the most useful self-review tool of all: Rubber Duck Debugging

Startups

Startups are popular right now, so here are some helpful resources you can refer to if you are considering a startup.

Tools I Use

  • git lfs - git extension to help versioning of large files (binaries, assets)
  • thefuck - fixes incorrect terminal commands
  • ack - better than grep for searching through source code
  • cscope - a C source code search tool. Geared toward C but also usable with C++.
  • c++filt - demangle C++ names