Embedded systems are designed to perform a specific task, in contrast with general-purpose computers designed for multiple tasks. Some have
real-time performance constraints that must be met, for reasons such as safety and usability; others may have low or no performance requirements, allowing the system hardware to be simplified to reduce costs. Embedded systems are not always standalone devices. Many embedded systems are a small part within a larger device that serves a more general purpose. For example, the
Gibson Robot Guitar features an embedded system for tuning the strings, but the overall purpose of the Robot Guitar is to play music. Similarly, an embedded system in an
automobile provides a specific function as a subsystem of the car itself. 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 interfaces using MicroVGA Embedded systems range from
no user interface at all, in systems dedicated to one task, to complex
graphical user interfaces that resemble modern computer desktop operating systems. Simple embedded devices use
buttons,
light-emitting diodes (LED), graphic or character
liquid-crystal displays (LCD) with a simple
menu system. More sophisticated devices that use a graphical screen with
touch sensing or screen-edge
soft keys provide flexibility while minimizing space used: the meaning of the buttons can change with the screen, and selection involves the natural behavior of pointing at what is desired. Some systems provide user interface remotely with the help of a serial (e.g.
RS-232) or network (e.g.
Ethernet) connection. This approach extends the capabilities of the embedded system, avoids the cost of a display, simplifies the
board support package (BSP) and allows designers to build a rich user interface on the PC. A good example of this is the combination of an
embedded HTTP server running on an embedded device (such as an
IP camera or a
network router). The user interface is displayed in a
web browser on a PC connected to the device.
Processors in embedded systems 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 expense of limited processing resources.
Numerous microcontrollers have been developed for embedded systems use. General-purpose microprocessors are also used in embedded systems, but generally require more support circuitry than microcontrollers.
Ready-made computer boards PC/104 and PC/104+ are examples of standards for ready-made computer boards intended for small, low-volume embedded and ruggedized systems. These are mostly x86-based and often physically small compared to a standard PC, although still large compared to most simple (8/16-bit) embedded systems. They may use a standard operating system such as
Linux or
NetBSD or an embedded
real-time operating system (RTOS) such as
MicroC/OS-II,
QNX or
VxWorks. In certain applications, where small size or power efficiency are not primary concerns, the components used may be compatible with those used in general-purpose x86 personal computers. Boards such as the VIA
EPIA range help to bridge the gap by being PC-compatible but highly integrated, physically smaller or have other attributes making them attractive to embedded engineers. The advantage of this approach is that low-cost commodity components may be used along with the same software development tools used for general software development. Systems built in this way are still regarded as embedded since they are integrated into larger devices and fulfill a single role. Examples of devices that may adopt this approach are
automated teller machines (ATM) and
arcade machines, which contain code specific to the application. However, most ready-made embedded systems boards are not PC-centered and do not use the
ISA or
PCI buses. When a
system-on-a-chip processor is involved, there may be little benefit to having a standardized bus connecting discrete components, and the environment for both hardware and software tools may be very different. One common design style uses a small system module, perhaps the size of a business card, holding high density
BGA chips such as an
ARM-based
system-on-a-chip processor and peripherals, external
flash memory for storage, and
DRAM for runtime memory. The module vendor will usually provide boot software and make sure there is a selection of operating systems, usually including Linux and some real-time choices. These modules can be manufactured in high volume, by organizations familiar with their specialized testing issues and combined with much lower volume custom mainboards with application-specific external peripherals. Prominent examples of this approach include
Arduino and
Raspberry Pi.
ASIC and FPGA SoC solutions A
system on a chip (SoC) contains a complete system - consisting of multiple processors, multipliers, caches, even different types of memory and commonly various peripherals like interfaces for wired or wireless communication on a single chip. Often graphics processing units (GPU) and DSPs are included such chips. SoCs can be implemented as an
application-specific integrated circuit (ASIC) or using a
field-programmable gate array (FPGA), which typically can be reconfigured. ASIC implementations are common for very-high-volume embedded systems like
mobile phones and
smartphones. ASIC or FPGA implementations may be used for not-so-high-volume embedded systems with special needs in terms of signal processing performance, interfaces and reliability, like in avionics.
Peripherals chip Embedded systems talk with the outside world via
peripherals, such as: •
Serial communication interfaces (SCI):
RS-232,
RS-422,
RS-485, etc. •
Synchronous Serial Interface:
I2C,
SPI, SSC and ESSI (Enhanced Synchronous Serial Interface) •
Universal Serial Bus (USB) • Media cards (
SD cards,
CompactFlash, etc.) •
Network interface controller:
Ethernet,
WiFi, etc. •
Fieldbuses:
CAN bus,
LIN-Bus,
PROFIBUS, etc. • Timers:
Phase-locked loops,
programmable interval timers •
General Purpose Input/Output (GPIO) •
Analog-to-digital and
digital-to-analog converters • Debugging:
JTAG,
In-system programming,
background debug mode interface port, BITP, and DB9 ports.
Tools As with other software, embedded system designers use
compilers,
assemblers, and
debuggers to develop embedded system software. However, they may also use 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
computational notebook to simulate the mathematics. • System-level modeling and simulation tools help designers to construct simulation models of a system with hardware components such as processors,
memories,
DMA,
interfaces, buses and software behavior flow as a state diagram or flow diagram using configurable library blocks. Simulation is conducted to select the right components by performing power vs. performance trade-offs, reliability analysis and bottleneck analysis. Typical reports that help a designer make architecture decisions include application latency, device throughput, device utilization, power consumption of the full system, as well as device-level power consumption. • A model-based development tool creates and simulates graphical data flow and UML state chart diagrams of components like digital filters, motor controllers, communication protocol decoding and multi-rate tasks. • Custom compilers and linkers may be used to optimize specialized hardware. • An embedded system may have its own special language or design tool, or add enhancements to an existing language such as
Forth or
Basic. • Another alternative is to add a RTOS or
embedded operating system • Modeling and code generating
tools often based on
state machines Software tools can come from several sources: • Software companies that specialize in the embedded market • Ported from the
GNU software development tools • Sometimes, development tools for a personal computer can be used if the embedded processor is a close relative of a common PC processor Embedded software often requires a variety of development tools, including programming languages such as
C++,
Rust, or
Python, and frameworks like
Qt for graphical interfaces. These tools enable developers to create efficient, scalable, and feature-rich applications tailored to the specific requirements of embedded systems. The choice of tools is driven by factors such as real-time performance, integration with hardware, or energy efficiency. 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 Linux,
NetBSD,
FreeBSD,
OSGi or
Embedded Java is required so that the third-party software provider can sell to a large market. ==Debugging==