To understand what an embedded system is, it can help to start by describing a standard “desktop” computer.
A desktop computer is a device which [i] contains one or more computer chips; [ii] performs or supports a wide range of different functions (surfing the WWW; word processing; viewing DVDs, etc); [iii] can often be upgraded / reprogrammed by the user (typically through installation of new software).
The type of computer chip employed in a desktop PC will be some form of microprocessor (e.g. Pentium® family, Celeron® family). Typical cost of such processors is in excess of US $100.
By contrast, the phrase “embedded system” is used to describe devices which [i] contain one or more computer chips; [ii] perform a limited range of functions; [iii] are not generally reprogrammable by the user.
The type of computer chip employed in an embedded system is typically a microcontroller, possibly based on an ARM7® or Cortex® core. Typical cost of such processors is around US $1 - $5.
Typical applications for embedded systems are control of the brakes in a passenger car. The application is fixed (upgrades to the system are unlikely, even by service personnel).
The control of brakes in a passenger car is an example of a “deeply embedded” application. This phrase is useful, in part, because the division between desktop computers and handheld computers is now becoming blurred. For example, an advanced modern “mobile ‘phone” may now support GPS, e-mail as well as normal telephone capabilities. This is a form of embedded system, but it is not a deeply embedded system.
Finding a perfect definition of deeply-embedded systems is not easy. We define deeply-embedded systems as follows:
A deeply-embedded system is a device which that contains at least one programmable computer (typically in the form of a microcontroller) and which is used by individuals who are, in the main, unaware that the system is computer-based.
Put another way: an deeply-embedded system is a computer-controlled device which doesn’t look anything like a conventional computer.
Deeply embedded systems are very common. Overall, it is usually estimated that people in the “developed world” encounter around 300 embedded processors every single day in a wide range of devices, including cars, aircraft, medical equipment, white goods, brown goods, etc. It has also been estimated that there are around 400,000 people in the world who develop embedded systems.
When discussing embedded systems, another key phrase is “firmware”.
Most people are familiar with “hardware” (for example, a microcontroller). Similarly, many people have created some form of software (for example, a computer program in C, Java, C++, etc).
The term “firmware” is used to describe the form of software used on deeply-embedded processors.
Most firmware is written in a form of the C programming language, or in assembly language. However, unlike “standard C” (used on desktop computers), C-based firmware — often referred to as “embedded C” — is tightly integrated with the hardware platform upon which it is used. This is not ideal (not least because it tends to make embedded C less portable than desktop C), but it is essential. Microcontrollers and other hardware platforms used in embedded systems have various features (such as support for digital I/O and for various other peripheral devices). The precise set of features vary between platforms and — to make efficient use of these features — the compiler needs to be adapted to match the target hardware.
To summarise, firmware is a specialised form of computer software (often written in a form of “embedded C”) which is used to control deeply-embedded systems.