See around yourself, we all are surrounded by electronic gadgets around ourselves. The mouse which you are using to navigate through desktop, the Earphones via we all used to listen to music and show off our styles while traveling!!!, the doorbell we ring in homes and see who is outside through video, wireless car keys through which we open our cars, high volume speakers and decks we enjoy dancing on playing the music of our choice when we go to pubs/discos or parties, automation in cars which we see in the forms of lights, automatic systems, high graphics infotainment along with cameras and wireless systems, setup boxes, medical devices like oximeter, sugar, and blood pressure machines. The list will not stop but the size of this blog will get par. All the above examples which I have listed can be termed as Embedded products. Embedded Products are like a silent servants of the modern technological society, as most of the time people are not aware of it but they keep on doing their work Silently and efficiently. One thing in common in all types of Embedded products is the presence of Microcontrollers or Microprocessors. Microcontrollers or Microprocessors are like the brain of embedded products. Microcontrollers or Microprocessors are digital systems as they only understand binary language that is 0 or 1\’s. Now the thing that makes these microcontrollers and microprocessors different from the human brain is that we can program these digital systems. Here comes the Embedded Software/Firmware Development.
What is Embedded Software/Firmware Development?
Basically, the programming that is done into microcontrollers/microprocessors is termed Embedded Software Development. The term Embedded makes this different from traditional Software Development ( Web/App Development).By the term embedded, it means that their is s
Embedded products have a constraint of memory, so programming language has to be there that is of less size and easily be converted to binary language of 0 & 1\’s. Programming languages that are widely used: are C and CPP language. Microcontrollers/Microprocessors are physical hardware that can be felt, thus Embedded Software Developers do need some hardware knowledge( like that of Electronics and Computers).
Now the difference in Embedded Software and Embedded Firmware is not much. Both of these are used interchangeably in embedded domain.
Embedded Firmware is used when we are developing programs very close to hardware like: Device driver development, Peripheral Interfacing, Sensors and Modules integration. Embedded Software is much more inclined towards Hardware Abstraction Layers(HAL), RTOSes, Wireless protocol stacks, Code portability on different platforms.
Need of Embedded Firmware/Software Development.
Embedded Software/Firmware development is niche R&D skill in modern world technology whose scope and demand will only increase with growing technologies. All modern world technologies which we see around ourselves: AR-VR gadgets, Industrial PLC-HMI\’s, Next Generation Automotive cars, Internet of Things, Aircrafts, Avionics and many more can only be build by the help of Embedded Software/Firmware Developers. Because it is role of Embedded Software Developers to interact different hardware subsystems interact with each other( through programming and coding) and made the Embedded product work.
How to get Started with Embedded Firmware Development.
I hope by now you have get bit of clarity and idea about Embedded Firmware Development and its need. Also the kind of industries one can work on after getting this skill. These are very important things to know before actually start learning any skill. As learning a skill is long process and one need good and strong motivation down the line to stay dedicated to learn that skill.
Essential things to learn for Embedded Firmware Development.
As if now I have talked much about the high end technologies and big flashy words. But now lets get down to basics and actually see how to learn this skill.
Essential things to learn for Embedded Software/Firmware Development.
- C/CPP language–> This is de-facto and most important. As 95 percent of time programming language which is used by embedded developers would be C/CPP language. Both of the languages are more and less same apart from some concepts. Concept of pointers, bit shifting/bit manipulation, functions, types of data types, strings and arrays are the some concepts that should be gone through. Below are some of the books which one can refer for learning basics of C/CPP.
- Understanding and Using C Pointers: Core Techniques for Memory Management
- Computer Architecture and Organization –> Okay so done with programming part, now hardware knowledge plays equally important role. As Embedded Software/Firmware developers will be programming on Microcontrollers (MCU)/Microprocessors (MPU), so knowledge of them is essential. What exactly is Microcontroller? How do they work? Different kind of architectures in MCU/MPU, difference between MPU&MCU, Boot Process in MPU/MCU, getting familiar with terminologies related to MPU/MCU world are some of the thoughts you can start learning about these. Below are some of the books which one can refer for learning about Computer Architecture and Organization.
- Computer Organization and Architecture: Designing for Performance
- Computer system architecture by morris mano
One of the best ways to learn these languages is by reading already built in codes.
- 3. Basic Electronics and Electrical knowledge: Okay so this is the part because of which majority of people after starting initially with Embedded Development left it further in college days. As there is role of hardware also, so alongside with programming language having knowledge of electronics and electrical is required sometimes and can be beneficial. In Electronics knowledge of Resistors, Capacitors, Inductors, Basic Ohm\’s law (their use cases in real life application: Current sense amplifiers), Opamps, ADC\’s would be good as this would make you understand the Embedded product in better way. In Electrical knowledge of AC-DC voltages, power supplies, Power electronics, basic principles of electricity generation and etc is though not always necessary but would be good to have to make your interactive and interesting DIY projects. Below are the books which one can refer for learning about Basic Electronics and Electricals:
Get started with Embedded Firmware Development with Gettobyte
(To all the viewers, it would be great if you can buy out the modules from below links. They are affiliate links, so buying modules from these links can help me earn some penny\’s in exchange of my work)
- Keypad module: (1) Numeric Keypad Intro: Its working and Logic explanation for writing its code in Embedded C – YouTube
- Character 16*2 LCD(ST7066U) : (1) Getting Started with Character LCD (16*2) Arduino Compatible Part 1: Overview – YouTube
- W25Q32 SPI Flash memory: (1) W25Q128JV SPI Flash Memory: Part1 || Datasheet || SPI || Dual SPI || QUAD SPI || Status || Memory – YouTube
- UART to TTL: (1) Full Device Driver of UART peripheral for AVRMCU(replica of hardwareserial.h): Uarts.h and Uarts.cpp – YouTube
- HC05: (1) Application Project: Make computer controlled piano/Electric Jal Tarang using UART and GPIO – YouTube
- ESP8266 Control via AT commands using ring buffer : (1) Need of Ring Buffer in Embedded Firmware || Circular Buffer ||Cpp/c ||linked list || stack || UART – YouTube
- RTC3231: (1) RTC3231 Building own library Part1 – YouTube
- PCF8574: (1) How to interface Character LCD screen Via I2C to STM32 MCU: Part1 ||PCF8574 I2C shift Register Intro – YouTube
- INA219: (1) INA219 I2C DC Current/Voltage/Power Module Firmware Part 2: Calibration Configuration|| STM32 || ARM – YouTube