Embedded software is a piece of software that is embedded in hardware or non-PC devices. It is written specifically for the particular hardware that it runs on and usually has processing and memory constraints because of the device’s limited computing capabilities. Examples of embedded software include those found in dedicated GPS devices, factory robots, some calculators and even modern smartwatches.
Embedded software is similar to firmware, as they usually serve the same function. The latter, however, is a special type of embedded software that is written in non-volatile memory (such as ROM or EPROM), which cannot easily be modified — hence the name "firm" — and is used primarily for running or booting up the device. In contrast, embedded software is used for the overall operation of the device.
Embedded software can be very simple, such as that used for controlling lighting in homes, and can run on an 8-bit microcontroller with just a few kilobytes of memory, or it can be quite complex such as the software running all of the electronic components of a modern smart car, complete with climate controls, automatic cruising and collision sensing, as well as control navigations. Complex embedded software can also be found in aircraft avionics systems, in very complex fly-by-wire systems used in fighter planes and even in missile guidance systems.
The main difference between embedded software and application software is that the former is usually tied to a specific device, serving as the OS itself, with restrictions tied to that device’s specifications, so updates and additions are strictly controlled, whereas application software provides the functionality in a computer and runs on top of an actual full OS, so it has fewer restrictions in terms of resources.