In this article, let us learn what the term “Embedded Software” means and see where Embedded software fits in the spectrum of “Software” with the help of a few examples!
I have been working as an Embedded Software Engineer for the past few years, and whenever I say, I write Embedded Software, people usually ask what “Embedded Software” means and where they can find Embedded Software running, this article is about answering that question!
I have written this article keeping beginners in mind, hence I have tried not to use too much “Technical Jargon” in this article. So, let us begin!
For those of you in a hurry, here is the short version of the answer!
The Short Version of the Answer
What is Embedded Software? Embedded software is code that runs on custom-built special-purpose hardware which is designed to perform a single well-defined duty again and again.
For example, a Bluetooth headphone’s one and only duty is to connect and receive music from another device via Bluetooth and play that out for us. You cannot install any apps on the Bluetooth headphone to change the behavior of the device. Hence the software that controls the Bluetooth headphone is Embedded Software.
Embedded software can also be found running on devices like washing machines, refrigerators, microwave ovens, Xbox controllers, Blood pressure monitors, smartwatches, and other devices that have custom hardware with a microcontroller being used as the main computing component.
If you buy a device that has a chip inside but is not a computer (which is almost everything these days!), then you are probably buying a device that is running Embedded Software!
If you did not completely understand the above few paragraphs, don’t worry as that is just the short version of the answer. Read on for the longer version of the answer below!
Computing devices can be broadly divided into 2 types
- General Purpose computers &
- Special Purpose computers
General Purpose computers, as the name suggests has generic hardware, and can be used for multiple purposes. For example we can use our laptops to browse the internet, write documents, make calls etc.
Special purpose computers, as the name suggests have a specific purpose. For example you cannot install an equalizer app on your Bluetooth-headphones, if you need to change the sound settings, you need to do that via your smartphone, the Bluetooth-headphone will simply play whatever data your smartphone sends.
Examples of Embedded Software
As mentioned in the Short version of the answer, any device that has a microcontroller chip inside usually runs embedded software.
Some example of Embedded Software and their functions include
|Device||Functions Performed by EmbeddedSoftware Running inside|
|Mp3 player||Turn on/off|
Go to the next/previous song
|Sports watch||Shows Time|
Gets location using GPS
Gets elevation using Altimeter
Gets direction using Magnetometer
|Camera||Controls various modes like Auto, Manual, etc|
Controls shutter action
Stores pictures into SD cards
Helps you to transfer/share the pics
|Washing Machine||Plays the preset you selected and turn off the washing machine|
Example: Embedded Software inside the MP3 player
Not so long ago, before the domination of smartphones, we had a special class of devices just to play music known as mp3 players. On mp3 players we could upload songs and listen to them all day long through headphones.
They had a very simple interface with 5 buttons. One button to play/pause music(which also acted as a power button while long-pressed), 2 buttons to go-to next/previous mp3 song, and 2 more buttons to increase/decrease volume.
Compared to general purpose devices like smartphones, the job of mp3 players were very simple, specific and straight forward, which is to play music! The entire hardware is custom built with flash memory to store digital mp3 files, a good Digital to Analog convertor (DAC) to convert this digital signal into an analog signal, then this analog signal is then fed into the 3.5mm ear phone jack.
Let us see how the embedded software running inside the simple microcontroller takes you from powering on the device to listening to music.
- when you turn on the device by long pressing the power button, what happens inside is, the event of “button press” is recorded through a GPIO hardware interrupt and a timer is started,
- when the timer reaches the 2 second period another event is generated through a hardware timer interrupt.
- This calls a function to perform the initialization where the internal and external peripherals are initialized.
- Once initialized, the latest song that was playing is retrieved from the memory and fed to the DAC, which gives the output sound via the 3.5mm headphone jack.
Though the entire experience is very simple, a lot of things go-on in the inside for us to listen to music!
When you long-press the power button again the following events takes place
- as soon as you press the button, another GPIO interrupt is given to our embedded software
- a timer is started
- once the timer expires 2 seconds another interrupt is given to our embedded software inside
- this calls for the clean up procedure, where
- the latest song being played is noted down and saved in memory
- then all the internal peripherals are de-initialized so that they don’t consume power
- then the microcontroller is put into a ultra-low power sleep where the only code that is being run is to listen for the next button press event.
This is done because the mp3 players are usually battery powered, and a good de-initialization routine will make the mp3 player last for days and even weeks while consuming micro-amps of current!
So as you can see when you “Power off” the device, you are actually not powering off, but just keeping the device in a state of sleep where the power consumption is very low, and the only job is to listen for the next button press event!
This is why mp3 players from good companies are usually superior as they design the hardware by choosing a microcontroller which is very good at the job at hand, while consuming microamps while sleeping and by choosing a DAC which produces a high-fidelity output, so that the music sounds awesome!
If you are familiar with Arduino, all the code that you upload into an Arduino is Embedded Software! For example, if you upload a code to make the LED blink, all the code does is to do the “specific action” of turning ON the LED followed by a delay followed by Turning OFF the LED again and again and again, until you upload another code into the Arduino!
The examples given in the above table are just a more complex version of the LED blinking code with lots of decision-making and looping at various stages of the software, along with more specific control of the hardware!
If you still have an “Incomplete feeling” about what “Embedded Software” means, read on for a more informative answer where I explain the answers to the following questions
- What is the meaning of the term “Embedded”?
- How “Embedded Software” differs from other software?
- What are the types of Embedded software?
- How do the examples above fit the description of “Embedded software”?
- What skills are needed to write Embedded Software?
- What type of industries hire Embedded Software Engineers?
Okay, let us begin our exploration of the Embedded software world!
Embedded Software vs Other Software
The meaning of the term “Embedded”?
The term “embedded” stands for placed inside something bigger.
Consider the digital dashboard in your car. The dashboard is a complete system embedded inside another bigger system, the car!
These devices that are a part of a larger system are called Embedded systems.
Hence the software running inside these Embedded systems came to be known as Embedded Software!
We have made a YouTube video explaining the class of devices known as embedded systems which you can find below.
Types of Embedded Systems
Embedded systems can be classified into the following 3 flavors
- Standalone systems &
- Network of systems
This flavor of embedded systems is usually part of larger systems. A popular example as we saw above includes a digital display in your car. This class of system gave rise to the term “embedded”, but these days the term “embedded” is used to refer to the following classes of devices too!
This class is pretty self-explanatory, its a device that can perform its functions independently. Examples include
- USB drives are used to store data
- mp3 players can play music
- digital cameras take pictures and
- digital watches tell us time!
Although they are not “embedded” into something bigger, the components and techniques used to build these systems belong to the same class as the “subsystems” class of embedded systems and hence are viewed as embedded systems too!
Network of systems
A famous example of this type of system is home automation. Here several sensors are placed throughout your home and their collective duty is to perform home automation. This is the latest trend in this field, and more products are developed in this class of embedded systems.
There is a special subclass of this class, where this “network” spans throughout the globe, This type of system is popularly known as the Internet of Things or IoT for short!
These are the 3 main classes of embedded systems.
Types of Embedded Software
Embedded software can be broadly classified into the following types.
- Embedded Bare-metal software
- Embedded Linux Software
- Embedded RTOS software and
- Embedded Networking software
These different embedded softwares need a specific skill set to be an expert in. Big companies often hire engineers who are experts in one given skill set, while small companies need engineers who are the jack of all the above-mentioned trades!
To learn more about what each type means I suggest reading my other article below, where I have explained what each type of software means and what are the skills needed to start developing those types of software
Also I suggest watching our YouTube video below.
Although each variety needs a unique set of skills, some skills are common to all. Let us have a look at them in the following section.
Skills Needed to Develop Embedded Software
Usually, in industries, Hardware engineers focus on choosing the components necessary, designing the PCB and assembling it. Software engineers, on the other hand, focus on the source code needed to accomplish the job in hand.
In other words, hardware engineers build the body and software engineers give the brain. But even though these roles are separate, an Embedded Software Engineer is expected to know hardware at least at the level of a Junior Hardware Engineer and vice versa for the Hardware engineers about software.
If you want to develop Embedded Software, you need to have knowledge about the following 7 important technologies.
- C Programing language
- Microcontrollers and Peripherals
- Operating Systems
- Computer Networking
- Software Engineering
- Debugging Skills
- Basics of Electronics
Here in Embeddedinventor.com we like to call these “The 7 Pillars of Embedded Software”!
Industries that hire Embedded Software Engineers
Embedded Software is being employed in several industries like
- Consumer Electronics
- Industry Automation
- Medical Industry
- Aviation and Space Exploration etc.
Watch our YouTube video below for a nice visual treat!
Okay I will stop here for now.
I hope you enjoyed reading this article as much as I enjoyed writing it!
Feel free to share this article with your friends and colleagues!
Here are some other Articles that might be interesting to you!