Today I see a question in Stack Overflow :”How do I get started in embedded programming?“. There are many industries starved of embedded software developers such as Apple, Cisco, also include my current company ZTE. The students graduated from CS or EE major fall into the dilemma that the CS students know nothing about the embedded systems and their most proficient language is JAVA which involved little in embedded systems. On the other hand, The EE students have a amount of knowledge about embedded systems but their programming skill is poor.
If you enjoy embedded programming and want to be the member of this industry, congratulations! You are the people who can make a great living doing work they enjoy and you can across the area which the pure software engineer and electronics engineer want to enter. You know the system information from the bottom to the top and you can handle everything of your system.
Here are Steven’s Four Pieces of Advice for newcomer of embedded programming:
- Become an expert in C
- Familiar with embedded systems software architectures
- Learn to read microcontroller datasheets
- Practice makes perfect
Become an expert in C
First of all, you should read The C Programming Language and write the function samples in your own way and compare your implementation with the book. This will improve your programming ability a lot. If you flip over the pages of the book to fragment, you will become an expert in C. Are you kidding? Yes I do. Despite you can be familiar with C language by means of reading through this book for many times, it is just the basic skill of embedded software developer.
Familiar with embedded systems software architectures
RTOS, scheduling, interrupt, timer, memory management, these stuff are the fundamental stores of programmer. For instance, we know that deadlock caused by the condition that two or more processes form a circular chain where each process is waiting on another resource in the chain. If the resource can use by more than two processes, the deadlock cannot take place. When we dig into, we must exclude preemption, which means one process cannot forcibly remove another process’ resource. If these three conditions listed above met concurrently, it is not the sufficient condition for the deadlock. Why? If the processes holding a resource cannot request new ones, the desire to deadlock vanish.
Learn to read microcontroller datasheets
Intel® 64 and IA-32 Architectures Software Developer’s Manual is the best material for learning the knowledge of CPU and microcontroller. You can learn byte order, memory organization, registers and instructions, interrupts and exceptions and so on. All the things you can learn from the datasheet are very useful for the embedded programming since IA-32 architecture is popular in embedded system with the widespread of ATCA. And certainly, if you read datasheets of MIPS or ARM, It is the same.
Practice makes perfect
Start with basic interrupt driven/background loop processing, then move up to background schedulers, then real-time operating systems. It’s practice. Challenge yourself to re-write your code more efficiently in terms of speed and memory usage. It’s pratice. Don’t use someone else code, just re-invent the wheel when you’re learning. Keep pratice! Maybe one day you find youself become the real embedded software developer!