Whether you’re beginning your career or looking to become more proficient in embedded software and systems, there are plenty of useful resources to help you. With over 25 years of embedded programming experience here at DISTek, I thought I’d take a few minutes and share some practical tips to enhance your skills.
First, learn what you can about both programming for embedded systems and about the hardware you’re writing software for. While there are some similarities, writing software for real-time embedded systems is definitely different than writing desktop applications or scripts. Strengthening your programming skills in embedded software design – using pointers, allocating memory, data structures, loops, task scheduling, state machines, and compilers to name a few – is a good place to start. For the hardware, you’ll want to learn about the processor your software will run on, and you’ll want to understand the system schematics. Talking to the system engineer who designed the embedded system will help you understand the system design.
If you’re like me, your best learning comes through experience – you dive into a project, look at existing code, try things (and fail occasionally), and ask others for advice. One key thing to remember if you enjoy this on-the-job type of training is to not get stuck for too long. It’s important for you to spend time figuring things out on your own, but you don’t want to spend too much time without making progress. After you have tried on your own for a short time without success, don’t be afraid to ask for help. As you’re learning, one of the best things you can do is find a mentor. Having someone with embedded experience you can talk to when you have questions and who can help you turn what you’ve learned into real-world application is essential.
If you enjoy learning through on-line training or by reading books, there’s a wide variety of options available to you. There are shorter trainings from places such as Udemy or Udacity, and there are longer courses from places such as Coursera or edX. A few examples from Udemy are (disclaimer: I have not personally taken any of these, so I can’t comment on their effectiveness):
- Introduction to Embedded Systems
- Embedded Systems Object-Oriented Programming in C and C++
- Master C and Embedded C Programming – Learn as you go
- Microcontroller Embedded C Programming
If you prefer learning through reading, there are plenty of books you can add to your library. Some of the tried-and-true standards in the industry are:
- Programming Embedded Systems in C and C++ by Michael Barr
- Embedded C Coding Standard by Michael Barr
- The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie
- The Complete Edition – Software Engineering for Real-Time Systems by Jim Cooling
- An Embedded Software Primer by David Simon
- Better Embedded System Software by Phil Koopman
- Embedded Systems Design by Arnold Berger
- Peer Reviews in Software by Karl Wiegers
- Real-Time Embedded Systems by Xiaocong Fan
- The Art of Programming Embedded Systems by Jack Ganssle
Regardless of your favorite method, the best thing to do is to continue learning. This industry changes quickly!