26/04/2021, hardwarebee
What is embedded software? embedded software refers to a piece of software embedded in a non-PC device. The software is written to control the specific functions of the device that it runs on and it is therefore designed to work within the constraints of the device. The following diagram can help answering the question “what is embedded software?”

Figure 1: What is Embedded Software?
Embedded software is very similar to firmware and they are both used on the same device. However, firmware is a special type of embedded software that is programmed on to a nonvolatile memory like EPROM or ROM, meaning it cannot be modified, and it is used for booting or running the device. All firmware is embedded software but not all embedded software is firmware.
In contrast, the work of embedded software is to control the overall operation of the hardware.
Firmware is essentially developed along with the hardware (chip) so that it can optimize the operations in terms of speed, security and power consumption while embedded software is developed to enable the hardware to meet the needs of the overall product or system.
Embedded software can be as simple as the one used in controlling home lighting that runs on an 8-bit microcontroller requiring just a few kilobytes of memory or as complicated or the one used in aircraft avionics systems.
Examples of common embedded software use cases include factory robots, WiFi-routers, TV, PlayStation, wireless Speakers, GPS devices, calculators, etc.

Figure 2: Examples of Products using Embedded Software
Firstly, embedded software is designed for specific tasks, unlike the general-purpose computers that handle multiple tasks. The hardware components (e.g. chips) within a device that house the embedded software are called embedded systems. Embedded software is what gives the embedded systems their features.
Embedded systems are not stand-alone devices but rather small components within a larger device like a robot or smart car. For example, while the general purpose of the robot vacuum cleaner is to clean the floor, it consists of an embedded system (CPU/SoC and chips) with embedded software that is responsible for running the cleaning process.
In the last decade where SoC (System on Chip) was introduced, the embedded software is running on the SoC because it including a CPU inside (as opposed to an external dedicated CPU chip). Read more about SoC here.
Some of the key characteristics of these embedded systems include:
Embedded systems are classified using two methods; based on their functional requirements and performance and based their complexity. There are four groups of embedded systems based on the functional requirements and performance and these include:

Figure 3: Types of embedded systems

Figure 4: Embedded system circuit for a home security system
On the other hand, there are three groups of embedded systems based on their complexity and these include:
The first embedded system was developed by Charles Start Draper in 1960 at MIT for the Apollo Guidance System. The purpose of developing the embedded system was to reduce the size and weight of the project.
Later, Autonetics developed an upgraded embedded system in 1965 by developing the D-17B computer that was used for the Minuteman missile guidance system.
Later on, the first embedded system for a vehicle was developed in 1968 before the first microcontroller was developed by Texas Instruments in 1971.
Then in 1987, Wind River developed the first embedded operating system (OS) that was called VxWorks. In 1996 Microsoft Windows developed the CE embedded system before Linux also developed its embedded system.
Embedded software is very different from application software, which is the regular type of software known to common users. The former runs on a non-PC device and serves as the operating system (OS), the latter controls the operations of a computer and runs on top of an actual operating system.
By virtual of the fact that the hardware or device where the embedded software run on have limited capabilities compared to PCs, embedded software is restricted to the devices specifications and any additions and updates are highly controlled. But on the other hand, application software has fewer restrictions because of the large number of resources.
The following tools are used in developing embedded software:
The operating systems used in embedded software, commonly referred to as embedded operating systems can be categorized into five categories namely:
Embedded software is commonly written in either C or C++ programming language. However, other high-level programming languages are also used in writing embedded software and these include:
Today the biggest part of an embedded software code is dedicated to timing issues or thread, messages and event management leaving a very small part of the code to take care of the actual application. Also, it is extremely difficult for an application developer to write embedded software for several networked embedded devices without extensive knowledge in embedded software and networking.
Moving into the future new design environments and operating systems will be required to provide a mental model that is more advanced and yet very simple to use. An example of such a framework is the PIECES framework that allows application developers to use a state-centric model of programming to write the embedded software for an application to be used for sensor network signal processing and tracking.
But notwithstanding, Embedded software is a growing industry and its market surpass $140 billion in 2013 and projected to hit $400 billion by 2035.