Hello everyone, this is not the tutorial post perse, but the basic guideline intending to help those guys who are starting a career in Embedded Systems. Here I am assuming here that you have an idea about what is Embedded systems and also some knowledge of coding in Embedded systems as well. So, let’s get started!
I think that anyone can agree with me that everyone should know about Git.
For beginners, GitHub is the place to take a reference of the code( At least that is what I used to do 😛 ). A git is the code management tool where you can manage your code. You can create branches into your project, commit your code, push the code into the remote repository, release the code and you know what, Github is not the only website where you can remotely keep the code. There are other websites as well namely bitbucket, code collaborator.
For beginners, git can be overwhelming to understand but it is an important tool once you get the hang of it, you will use it for every project. If you want to understand more about Git, I will write a detailed post on that so do check it out later.
For an embedded system engineer, you have to work with boards with custom Operating Systems installed in it. Almost all the board has some sort of Linux distribution in it. So it is good that if you are comfortable in the Linux environment. Start with basic Linux terminal commands and then move ahead.
Again it can be overwhelming for beginners but once you start getting it, you will have a slighter edge than others who are pursuing embedded systems.
Understand Debugging and Linting
You should know about debugging in general. For C/C++ developers, you should know about the GDB debugger. If you want to know more about GDB, refer to this article.
Nowadays, many boards have an ” on-board” debugger. For example, ST’s DISCOIOT01A has a debugger on the development board itself. You can pause the program running inside the microcontroller, you can add a breakpoint, you can step into the function, step out from a function. You can even see the entire backtrace up to the breakpoint. For more information, check out this article.
Also, you can have an idea about Linting. A Linter in C/C++ alerts you if you forgot to free the memory. It also suggests you keep a NULL pointer check if you are freeing the memory. It guides you to write better code in general.
Knowledge of basic circuitry
You should know about the basic circuitry. Why pullup, pulldown resistors are important. Basic knowledge of capacitors and resistors will help you a lot if you get the chance to debug the problem that usually comes in a custom board. Also, it would be great if you know how to operate an Oscilloscope, multimeter, etc.
Understand Basic Communication Protocol
You should know communication protocols like SPI, I2C, UART, etc. Also, you should know to control the timers, counters, ADC, etc.
Understand DataStructure and Pointers
I can not emphasize enough that why data structure is important. You should at least know about the basic data structures like Queue, Stack, LinkedList, etc. Also, you should know about the most dreaded thing in C – Pointers. Also, you should have knowledge of storage classes of C and memory map in C.
I think this should be enough. At least these are the ones that I can think of. I will update this article once I can think of more suggestions. Please do write feedback in the comment section. Any questions and queries are much appreciated.