An embedded system is a computer system with a dedicated function
within a larger mechanical or electrical system, often with real-time
computing constraints. It is embedded as part of a complete
device often including hardware and mechanical parts. Embedded systems
control many devices in common use today. Ninety-eight percent of
all microprocessors are manufactured as components of embedded
Examples of properties of typical embedded computers when compared
with general-purpose counterparts are low power consumption, small
size, rugged operating ranges, and low per-unit cost. This comes at
the price of limited processing resources, which make them
significantly more difficult to program and to interact with. However,
by building intelligence mechanisms on top of the hardware, taking
advantage of possible existing sensors and the existence of a network
of embedded units, one can both optimally manage available resources
at the unit and network levels as well as provide augmented functions,
well beyond those available. For example, intelligent techniques
can be designed to manage power consumption of embedded systems.
Modern embedded systems are often based on microcontrollers (i.e.
CPU's with integrated memory or peripheral interfaces), but
ordinary microprocessors (using external chips for memory and
peripheral interface circuits) are also common, especially in
more-complex systems. In either case, the processor(s) used may be
types ranging from general purpose to those specialized in certain
class of computations, or even custom designed for the application at
hand. A common standard class of dedicated processors is the digital
signal processor (DSP).
Since the embedded system is dedicated to specific tasks, design
engineers can optimize it to reduce the size and cost of the product
and increase the reliability and performance. Some embedded systems
are mass-produced, benefiting from economies of scale.
1 History 2 Applications 3 Characteristics
3.1 User interface
3.3 Peripherals 3.4 Tools
4.1 Tracing 4.2 Reliability 4.3 High vs. low volume
5 Embedded software architectures
5.1 Simple control loop 5.2 Interrupt-controlled system 5.3 Cooperative multitasking 5.4 Preemptive multitasking or multi-threading 5.5 Microkernels and exokernels 5.6 Monolithic kernels 5.7 Additional software components
6 See also 7 Notes 8 References 9 Further reading 10 External links
History One of the very first recognizably modern embedded systems was the Apollo Guidance Computer, developed ca. 1965 by Charles Stark Draper at the MIT Instrumentation Laboratory. At the project's inception, the Apollo guidance computer was considered the riskiest item in the Apollo project as it employed the then newly developed monolithic integrated circuits to reduce the size and weight. An early mass-produced embedded system was the Autonetics D-17 guidance computer for the Minuteman missile, released in 1961. When the Minuteman II went into production in 1966, the D-17 was replaced with a new computer that was the first high-volume use of integrated circuits. Since these early applications in the 1960s, embedded systems have come down in price and there has been a dramatic rise in processing power and functionality. An early microprocessor for example, the Intel 4004, was designed for calculators and other small systems but still required external memory and support chips. In 1978 National Engineering Manufacturers Association released a "standard" for programmable microcontrollers, including almost any computer-based controllers, such as single board computers, numerical, and event-based controllers. As the cost of microprocessors and microcontrollers fell it became feasible to replace expensive knob-based analog components such as potentiometers and variable capacitors with up/down buttons or knobs read out by a microprocessor even in consumer products. By the early 1980s, memory, input and output system components had been integrated into the same chip as the processor forming a microcontroller. Microcontrollers find applications where a general-purpose computer would be too costly. A comparatively low-cost microcontroller may be programmed to fulfill the same role as a large number of separate components. Although in this context an embedded system is usually more complex than a traditional solution, most of the complexity is contained within the microcontroller itself. Very few additional components may be needed and most of the design effort is in the software. Software prototype and test can be quicker compared with the design and construction of a new circuit not using an embedded processor. Applications
e-con Systems eSOM270 & eSOM300
The program instructions written for embedded systems are referred to as firmware, and are stored in read-only memory or flash memory chips. They run with limited computer hardware resources: little memory, small or non-existent keyboard or screen. User interface
A close-up of the SMSC LAN91C110 (SMSC 91x) chip, an embedded Ethernet chip
Serial Communication Interfaces (SCI): RS-232, RS-422, RS-485, etc.
Synchronous Serial Communication Interface: I2C, SPI, SSC and ESSI
(Enhanced Synchronous Serial Interface)
Universal Serial Bus
Tools As with other software, embedded system designers use compilers, assemblers, and debuggers to develop embedded system software. However, they may also use some more specific tools:
In circuit debuggers or emulators (see next section).
Utilities to add a checksum or CRC to a program, so the embedded
system can check if the program is valid.
For systems using digital signal processing, developers may use a math
workbench to simulate the mathematics.
Software tools can come from several sources:
Software companies that specialize in the embedded market
Ported from the
As the complexity of embedded systems grows, higher level tools and
operating systems are migrating into machinery where it makes sense.
For example, cellphones, personal digital assistants and other
consumer computers often need significant software that is purchased
or provided by a person other than the manufacturer of the
electronics. In these systems, an open programming environment such as
Interactive resident debugging, using the simple shell provided by the
embedded operating system (e.g. Forth and Basic)
External debugging using logging or serial port output to trace
operation using either a monitor in flash or using a debug server like
Unless restricted to external debugging, the programmer can typically
load and run software through the tools, view the code running in the
processor, and start or stop its operation. The view of the code may
be as HLL source-code, assembly code or mixture of both.
Because an embedded system is often composed of a wide variety of
elements, the debugging strategy may vary. For instance, debugging a
software- (and microprocessor-) centric embedded system is different
from debugging an embedded system where most of the processing is
performed by peripherals (DSP, FPGA, and co-processor). An increasing
number of embedded systems today use more than one single processor
core. A common problem with multi-core development is the proper
synchronization of software execution. In this case, the embedded
system design may wish to check the data traffic on the busses between
the processor cores, which requires very low-level debugging, at
signal/bus level, with a logic analyzer, for instance.
Real-time operating systems (RTOS) often supports tracing of operating
system events. A graphical view is presented by a host PC tool, based
on a recording of the system behavior. The trace recording can be
performed in software, by the RTOS, or by special tracing hardware.
RTOS tracing allows developers to understand timing and performance
issues of the software system and gives a good understanding of the
high-level system behaviors. Commercial tools like
RTXC Quadros or IAR
The system cannot safely be shut down for repair, or it is too inaccessible to repair. Examples include space systems, undersea cables, navigational beacons, bore-hole systems, and automobiles. The system must be kept running for safety reasons. "Limp modes" are less tolerable. Often backups are selected by an operator. Examples include aircraft navigation, reactor control systems, safety-critical chemical factory controls, train signals. The system will lose large amounts of money when shut down: Telephone switches, factory controls, bridge and elevator controls, funds transfer and market making, automated sales and service.
A variety of techniques are used, sometimes in combination, to recover from errors—both software bugs such as memory leaks, and also soft errors in the hardware:
watchdog timer that resets the computer unless the software periodically notifies the watchdog subsystems with redundant spares that can be switched over to software "limp modes" that provide partial function Designing with a Trusted Computing Base (TCB) architecture ensures a highly secure & reliable system environment A hypervisor designed for embedded systems, is able to provide secure encapsulation for any subsystem component, so that a compromised software component cannot interfere with other subsystems, or privileged-level system software . This encapsulation keeps faults from propagating from one subsystem to another, improving reliability. This may also allow a subsystem to be automatically shut down and restarted on fault detection. Immunity Aware Programming
High vs. low volume
For high volume systems such as portable music players or mobile
phones, minimizing cost is usually the primary design consideration.
Engineers typically select hardware that is just “good enough” to
implement the necessary functions.
For low-volume or prototype embedded systems, general purpose
computers may be adapted by limiting the programs or by replacing the
operating system with a real-time operating system.
Embedded software architectures
Main article: Embedded software
There are several different types of software architecture in common
Simple control loop
In this design, the software simply has a loop. The loop calls
subroutines, each of which manages a part of the hardware or software.
Hence it is called a simple control loop or control loop.
Some embedded systems are predominantly controlled by interrupts. This
means that tasks performed by the system are triggered by different
kinds of events; an interrupt could be generated, for example, by a
timer in a predefined frequency, or by a serial port controller
receiving a byte.
These kinds of systems are used if event handlers need low latency,
and the event handlers are short and simple. Usually, these kinds of
systems run a simple task in a main loop also, but this task is not
very sensitive to unexpected delays.
Sometimes the interrupt handler will add longer tasks to a queue
structure. Later, after the interrupt handler has finished, these
tasks are executed by the main loop. This method brings the system
close to a multitasking kernel with discrete processes.
A nonpreemptive multitasking system is very similar to the simple
control loop scheme, except that the loop is hidden in an API. The
programmer defines a series of tasks, and each task gets its own
environment to “run” in. When a task is idle, it calls an idle
routine, usually called “pause”, “wait”, “yield”,
“nop” (stands for no operation), etc.
The advantages and disadvantages are similar to that of the control
loop, except that adding new software is easier, by simply writing a
new task, or adding to the queue.
Preemptive multitasking or multi-threading
In this type of system, a low-level piece of code switches between
tasks or threads based on a timer (connected to an interrupt). This is
the level at which the system is generally considered to have an
"operating system" kernel. Depending on how much functionality is
required, it introduces more or less of the complexities of managing
multiple tasks running conceptually in parallel.
As any code can potentially damage the data of another task (except in
larger systems using an MMU) programs must be carefully designed and
tested, and access to shared data must be controlled by some
synchronization strategy, such as message queues, semaphores or a
non-blocking synchronization scheme.
Because of these complexities, it is common for organizations to use a
real-time operating system (RTOS), allowing the application
programmers to concentrate on device functionality rather than
operating system services, at least for large systems; smaller systems
often cannot afford the overhead associated with a generic real-time
system, due to limitations regarding memory size, performance, or
battery life. The choice that an
RTOS is required brings in its own
issues, however, as the selection must be done prior to starting to
the application development process. This timing forces developers to
choose the embedded operating system for their device based upon
current requirements and so restricts future options to a large
extent. The restriction of future options becomes more of an issue
as product life decreases. Additionally the level of complexity is
continuously growing as devices are required to manage variables such
as serial, USB, TCP/IP, Bluetooth, Wireless LAN, trunk radio, multiple
channels, data and voice, enhanced graphics, multiple states, multiple
threads, numerous wait states and so on. These trends are leading to
the uptake of embedded middleware in addition to a real-time operating
Microkernels and exokernels
A microkernel is a logical step up from a real-time OS. The usual
arrangement is that the operating system kernel allocates memory and
switches the CPU to different threads of execution. User mode
processes implement major functions such as file systems, network
In general, microkernels succeed when the task switching and intertask
communication is fast and fail when they are slow.
Exokernels communicate efficiently by normal subroutine calls. The
hardware and all the software in the system are available to and
extensible by application programmers.
In this case, a relatively large kernel with sophisticated
capabilities is adapted to suit an embedded environment. This gives
programmers an environment similar to a desktop operating system like
Ports to common embedded chip sets are available. They permit re-use of publicly available code for device drivers, web servers, firewalls, and other code. Development systems can start out with broad feature-sets, and then the distribution can be configured to exclude unneeded functionality, and save the expense of the memory that it would consume. Many engineers believe that running application code in user mode is more reliable and easier to debug, thus making the development process easier and the code more portable. Features requiring faster response than can be guaranteed can often be placed in hardware.
Additional software components In addition to the core operating system, many embedded systems have additional upper-layer software components. These components consist of networking protocol stacks like CAN, TCP/IP, FTP, HTTP, and HTTPS, and also included storage capabilities like FAT and flash memory management systems. If the embedded device has audio and video capabilities, then the appropriate drivers and codecs will be present in the system. In the case of the monolithic kernels, many of these software layers are included. In the RTOS category, the availability of the additional software components depends upon the commercial offering. See also
Electronic Control Unit
Embedded operating systems
Real-time operating system
^ For more details of MicroVGA see this PDF.
^ a b Michael Barr. "Embedded Systems Glossary". Neutrino Technical
Library. Retrieved 2007-04-21.
^ Heath, Steve (2003).
John Catsoulis (May 2005). Designing Embedded Hardware, 2nd Edition. O'Reilly. ISBN 0-596-00755-8. James M. Conrad; Alexander G. Dean (September 2011). Embedded Systems, An Introduction Using the Renesas RX62N Microcontroller. Micrium. ISBN 978-1935-7729-96. Klaus Elk (August 2016). Embedded Software Development for the Internet Of Things, The Basics, The Technologies and Best Practices. ISBN 978-1534602533.
Wikimedia Commons has media related to Embedded systems.
Wikibooks has a book on the topic of: Embedded Systems
Wikiversity has learning resources about Embedded
Embedded Systems course with mbed YouTube, ongoing from 2015 Trends in Cyber Security and Embedded Systems Dan Geer, November 2013 Modern Embedded Systems Programming Video Course YouTube, ongoing from 2013 Embedded Systems Week (ESWEEK) yearly event with conferences, workshops and tutorials covering all aspects of embedded systems and software Workshop on Embedded and Cyber-Physical Systems Education, workshop covering educational aspects of embedded systems
v t e
Classes of computers
Microcomputer, personal computer
Workstation Desktop Home Personal supercomputer SFF
Game arcade cabinet
Home console Microconsole Interactive kiosk Smart TV Smart speaker
Desktop replacement 2-in-1 Subnotebook
Netbook Smartbook Ultrabook
Ultra-mobile PC 2-in-1 Mobile Internet device Tabletop Phablet
Palm-size PC Pocket PC Pocket computer Palmtop PC
Electronic organizer EDA
Feature phone Smartphone
E-reader Handheld game console Portable/Mobile data terminal
Scientific Programmable Graphing
Smartglasses Smart ring
Server Minicomputer Supermini
Super Mainframe Minisuper
Microcontroller Nanocomputer Pizza box form factor Single-board computer Smartdust Wireless sensor network
v t e
Major fields of computer science
Note: This template roughly follows the 2012 ACM Computing Classification System.
Printed circuit board Peripheral Integrated circuit Very-large-scale integration Energy consumption Electronic design automation
Network architecture Network protocol Network components Network scheduler Network performance evaluation Network service
Interpreter Middleware Virtual machine Operating system Software quality
Software notations and tools
Programming paradigm Programming language Compiler Domain-specific language Modeling language Software framework Integrated development environment Software configuration management Software library Software repository
Theory of computation
Model of computation Formal language Automata theory Computational complexity theory Logic Semantics
Mathematics of computing
Discrete mathematics Probability Statistics Mathematical software Information theory Mathematical analysis Numerical analysis
Database management system
Information storage systems
Enterprise information system
Social information systems
Geographic information system
Decision support system
Cryptography Formal methods Security services Intrusion detection system Hardware security Network security Information security Application security
Interaction design Social computing Ubiquitous computing Visualization Accessibility
Concurrent computing Parallel computing Distributed computing Multithreading Multiprocessing
Natural language processing
Knowledge representation and reasoning
Supervised learning Unsupervised learning Reinforcement learning Multi-task learning Cross-validation
Animation Rendering Image manipulation Graphics processing unit Mixed reality Virtual reality Image compression Solid modeling
E-commerce Enterprise software Computational mathematics Computational physics Computational chemistry Computational biology Computational social science Computational engineering Computational healthcare Digital art Electronic publishing Cyberwarfare Electronic voting Video game Word processing Operations research Educational technology Document management
Book Category Portal WikiProject Commons
v t e
Embedded software Original equipment manufacturer (OEM) Embedded database Embedded hypervisor Consumer electronics Microcontroller ASIC/FPGA/SoC Memory footprint Single-board computer IoT Board support package Cross compiler Embedded OS bootloader
Custom firmware Rooting (Android OS) iOS jailbreaking PlayStation 3 Jailbreak Closed platform Vendor lock-in Defective by Design Hacking of consumer electronics Homebrew (video games) Crippleware
uClibc dietlibc Embedded GLIBC musl
Bitbake Buildroot BusyBox Yocto Project Almquist shell Stand-alone shell OpenEmbedded
Ada Assembly language CAPL Embedded C MISRA C nesC Embedded C++ Embedded Java
Lightweight browsers Open-source computing hardware Open-source robotics
LCCN: sh87006632 GND: 4396978-1 BNF: cb12410613b (d