Jump to content

Embedded system: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
edited for NPOV (needs much more)
m unpiped links using script
 
Line 1: Line 1:
{{Short description|Computer system with a dedicated function}}
An '''embedded system''' is a special-purpose [[computer]] system built into a larger device. An embedded system is typically required to meet very different requirements than a general-purpose [[personal computer]].
{{Use American English|date=December 2017}}


[[File:DHCOM Computer On Module - AM35x.jpg|thumb|right|An ''embedded system'' on a plug-in card with processor, memory, power supply, and external interfaces]]
Two major areas of differences are cost and power consumption. Since many embedded systems are produced in the tens of thousands to millions of units range, reducing cost is a major concern. Embedded systems often use a (relatively) slow processor [[clock speed]] and small memory size to cut costs.


An '''embedded system''' is a specialized [[computer system]]&mdash;a combination of a [[computer processor]], [[computer memory]], and [[input/output]] peripheral devices&mdash;that has a dedicated function within a larger mechanical or [[Electronics|electronic]] system.<ref name="Barr-glossary">{{cite web |author=Michael Barr |title=Embedded Systems Glossary |work=Neutrino Technical Library |access-date=2007-04-21 |url=http://www.netrino.com/Embedded-Systems/Glossary |author-link=Michael Barr (software engineer)}}</ref><ref>{{cite book |last=Heath |first=Steve |title=Embedded systems design|publisher=Newnes |year=2003 |edition=2 |series=EDN series for design engineers |page=[https://archive.org/details/embeddedsystemsd0000heat/page/2 2] |url=https://archive.org/details/embeddedsystemsd0000heat |url-access=registration|quote= An embedded system is a [[microprocessor]] based system that is built to control a function or a range of functions. | isbn=978-0-7506-5546-0}}</ref> It is embedded as part of a complete device often including electrical or electronic hardware and mechanical parts.
Programs on an embedded system often must run with [[real-time]] constraints.
Because an embedded system typically controls physical operations of the machine that it is embedded within, it often has [[real-time computing]] constraints. Embedded systems control many devices in common use.<ref name=":0">{{cite book|last=Michael Barr|author2=Anthony J. Massa|title=Programming embedded systems: with C and GNU development tools|publisher=O'Reilly|year=2006|pages=1–2|chapter=Introduction|chapter-url=https://books.google.com/books?id=nPZaPJrw_L0C&pg=PA1 | isbn=978-0-596-00983-0}}</ref> {{as of|2009|alt=In 2009}}, it was estimated that ninety-eight percent of all microprocessors manufactured were used in embedded systems.<ref>{{cite web | title=Real men program in C | last=Barr |first=Michael | page=2 | date=1 August 2009 | work=Embedded Systems Design | publisher=TechInsights (United Business Media) | url=http://www.embedded.com/electronics-blogs/barr-code/4027479/Real-men-program-in-C | access-date=2009-12-23 }}</ref>{{Update inline|reason=Computing has changed a lot since 2009.|date=March 2022}}
Often there is no disk drive, operating system, keyboard or screen.


Modern embedded systems are often based on [[microcontroller]]s (i.e. microprocessors with integrated memory and 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 a 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).
There are many different [[CPU architecture]]s used in embedded designs. This in contrast to the desktop computer market, which as of this writing (2003) is limited to just a few competing architectures, chiefly [[Intel]]'s [[x86]], and the Apple/Motorola/IBM [[PowerPC]], used in the [[Apple Macintosh]].


Since the embedded system is dedicated to specific tasks, [[design engineer]]s can optimize it to reduce the size and cost of the product and increase its reliability and performance. Some embedded systems are mass-produced, benefiting from [[economies of scale]].
One common configuration for embedded systems is the ''system on a chip'', an [[application-specific integrated circuit]], for which the CPU was purchased as intellectual property to add to the IC's design.


Embedded systems range in size from portable personal devices such as [[digital watch]]es and [[MP3 player]]s to bigger machines like [[home appliances]], industrial [[assembly lines]], [[robots]], transport vehicles, [[Traffic light control and coordination|traffic light controllers]], and [[medical imaging]] systems. Often they constitute subsystems of other machines like [[avionics]] in [[aircraft]] and [[astrionics]] in [[spacecraft]]. Large installations like [[factories]], [[pipelines]], and [[electrical grid]]s rely on multiple embedded systems networked together. Generalized through software customization, embedded systems such as [[programmable logic controller]]s frequently comprise their functional units.
The software tools ([[compiler]]s, [[assembler]]s and [[debugger]]) used to develop an embedded system 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 embeded processor is a close relative to a common PC processor.


Embedded systems range from those low in complexity, with a single microcontroller chip, to very high with multiple units, [[peripheral]]s and networks, which may reside in [[equipment rack]]s or across large geographical areas connected via long-distance communications lines.
They often have no [[operating system]], or a [[real-time operating system]], or the programmer is assigned to port one of these to the new system.


==History==
Debugging is usually performed with an in-circuit emulator, or some type of debugger that can interrupt the microcontroller's internal [[microcode]].
=== Background ===
{{See also|Microprocessor chronology}}


The origins of the microprocessor and the microcontroller can be traced back to the [[MOS integrated circuit]], which is an [[integrated circuit]] chip [[semiconductor device fabrication|fabricated]] from [[MOSFET]]s (metal–oxide–semiconductor [[field-effect transistor]]s) and was developed in the early 1960s. By 1964, MOS chips had reached higher [[transistor density]] and lower manufacturing costs than [[bipolar junction transistor|bipolar]] chips. MOS chips further increased in complexity at a rate predicted by [[Moore's law]], leading to [[large-scale integration]] (LSI) with hundreds of [[transistors]] on a single MOS chip by the late 1960s. The application of MOS LSI chips to [[computing]] was the basis for the first microprocessors, as engineers began recognizing that a complete [[computer processor]] system could be contained on several MOS LSI chips.<ref name="ieee">{{cite journal |last1=Shirriff |first1=Ken |title=The Surprising Story of the First Microprocessors |journal=[[IEEE Spectrum]] |volume=53 |issue=9 |pages=48–54 |date=30 August 2016 |publisher=[[Institute of Electrical and Electronics Engineers]] |url=https://spectrum.ieee.org/the-surprising-story-of-the-first-microprocessors |access-date=13 October 2019|doi=10.1109/MSPEC.2016.7551353 |s2cid=32003640 }}</ref>
The microcode interrupt lets the debugger operate in hardware in which only the CPU works. The CPU-based debugger can be used to test and debug the electronics of the computer from the viewpoint of the CPU. This feature was pioneered on the [[PDP-11]].


The first multi-chip microprocessors, the [[Four-Phase Systems AL1]] in 1969 and the [[Garrett AiResearch]] [[MP944]] in 1970, were developed with multiple MOS LSI chips. The first single-chip microprocessor was the [[Intel 4004]], released in 1971. It was developed by [[Federico Faggin]], using his [[silicon-gate]] MOS technology, along with [[Intel]] engineers [[Marcian Hoff]] and [[Stan Mazor]], and [[Busicom]] engineer [[Masatoshi Shima]].<ref>{{cite web |title=1971: Microprocessor Integrates CPU Function onto a Single Chip |website=The Silicon Engine |url=https://www.computerhistory.org/siliconengine/microprocessor-integrates-cpu-function-onto-a-single-chip/ |publisher=[[Computer History Museum]] |access-date=22 July 2019}}</ref>
Developers should insist on debugging which shows the high-level language, with breakpoints and single-stepping, because these features are widely available. Also, developers should write and use simple logging facilities to debug sequences of real-time events.


=== Development ===
PC or mainframe programmers first encountering this sort of programming often become confused. Mentoring, code-reviews and egoless programming are recommended.
One of the first recognizably modern embedded systems was the [[Apollo Guidance Computer]],{{citation needed|reason=linked article claims it is the first IC-based computer. nothing there supports it being the first embedded system.|date=August 2018}} 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 circuit]]s to reduce the computer's size and weight.


An early mass-produced embedded system was the [[D-17B|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 represented the first high-volume use of integrated circuits.
== History ==


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, the [[Intel 4004]] (released in 1971), was designed for [[calculator]]s and other small systems but still required external memory and support chips. 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. As the cost of microprocessors and microcontrollers fell, the prevalence of embedded systems increased.
The first recognizably modern embedded system was the [[Apollo program|Apollo]] flight computer, developed by [[Charles Draper]] and the [[MIT Instrumentation Laboratory]]. Each flight to the moon had two. They ran the inertial navigation systems of both the command module and LEM.


A comparatively low-cost microcontroller may be programmed to fulfill the same role as a large number of separate components. With microcontrollers, it became feasible to replace, even in consumer products, expensive knob-based [[Analogue electronics|analog]] components such as [[potentiometer]]s and [[variable capacitor]]s with up/down buttons or knobs read out by a microprocessor. 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.
The Apollo flight computer was the first to use integrated circuits. The computer consisted of roughly a thousand identical [[integrated circuit]]s, NAND gates. They were interconnected by a technique called [[wire wrap]], in which the circuits are pushed into sockets, the sockets have square posts, and wire is wrapped around the posts. The edges of the posts bite the wire with tons of pressure per square inch, causeing gas-tight connections that are more reliable thansoldered PC boards. The wiring was then embedded in cast epoxy plastic.


==Applications==
The memory consisted of magnetic cores strung on wire to make "ropes."
[[File:Accupoll-embedded-computer.jpg|thumb|Embedded Computer Sub-Assembly for Accupoll Electronic Voting Machine<ref>{{cite web|url=https://www.eff.org/|title=Electronic Frontier Foundation|website=Electronic Frontier Foundation}}</ref>]]


Embedded systems are commonly found in consumer, industrial, [[automotive]], [[home appliance]]s, medical, telecommunication, commercial, aerospace and military applications.
The user interface was an array of numerals and a calculator-style keyboard. Commands were entered numerically as "verb" and "noun" numbers. The numerals were light-emitting diodes, arranged in an array of seven segments-per-numeral to display numbers. Input was by press-buttons. This "calculator-style" interface was the first of its kind, the prototype for all similar interfaces.


[[Telecommunications system]]s employ numerous embedded systems from [[telephone switch]]es for the network to [[cell phone]]s at the [[end user]]. Computer networking uses dedicated [[Router (computing)|routers]] and [[network bridge]]s to route data.
It's not widely known, but the system failed during the lunar descent, with an "error 1220" (tasks not finished)because the terminal approach (docking) radar was left on and unexpected radar returns from the moon overloaded the CPU. This almost caused a mission abort. The software failed-soft, shedding unnecessary tasks, and the inertial guidance tasks continued to operate reliably.


[[Consumer electronics]] include [[MP3 player]]s, [[television set]]s, [[mobile phone]]s, [[video game console]]s, [[digital camera]]s, [[GPS receiver]]s, and [[computer printer|printers]]. Household appliances, such as [[microwave oven]]s, [[washing machine]]s and [[dishwashers]], include embedded systems to provide flexibility, efficiency and features. Advanced [[heating, ventilation, and air conditioning]] (HVAC) systems use networked [[thermostat]]s to more accurately and efficiently control temperature that can change by time of day and [[season]]. [[Home automation]] uses wired and wireless networking that can be used to control lights, climate, security, audio/visual, surveillance, etc., all of which use embedded devices for sensing and controlling.
The first mass-produced embedded system was the guidance computer for the [[minuteman missile]]. It also used integrated circuits, and was the first volume user of them. Without this program, integrated circuits might never have reached a usable price-point.


Transportation systems from flight to automobiles increasingly use embedded systems. New airplanes contain advanced [[avionics]] such as [[inertial guidance system]]s and GPS receivers that also have considerable safety requirements. [[Spacecraft]] rely on [[astrionics]] systems for trajectory correction. Various electric motors — [[brushless DC motor]]s, [[induction motor]]s and [[DC motor]]s — use electronic [[motor controller]]s. [[Automobile]]s, [[electric vehicle]]s, and [[hybrid vehicle]]s increasingly use embedded systems to maximize efficiency and reduce pollution. Other automotive safety systems using embedded systems include [[anti-lock braking system]] (ABS), [[electronic stability control]] (ESC/ESP), [[traction control]] (TCS) and automatic [[four-wheel drive]].
The crucial design features of the minuteman computer were that its guidance algorithm could be reprogrammed later in the program, to make the missile more accurate, and the computer could also test the missile, saving cable and connector weight.


[[Medical equipment]] uses embedded systems for [[Monitoring (medicine)|monitoring]], and various [[medical imaging]] ([[positron emission tomography]] (PET), [[single-photon emission computed tomography]] (SPECT), [[computed tomography]] (CT), and [[magnetic resonance imaging]] (MRI) for non-invasive internal inspections. Embedded systems within medical equipment are often powered by industrial computers.<ref>[http://content.dell.com/us/en/enterprise/oem-industry-solutions-build-your-product-with-dell Embedded Systems Dell OEM Solutions | Dell] {{Webarchive|url=https://web.archive.org/web/20130127080734/http://content.dell.com/us/en/enterprise/oem-industry-solutions-build-your-product-with-dell |date=2013-01-27 }}. Content.dell.com (2011-01-04). Retrieved on 2013-02-06.</ref>
== Design of embedded systems ==


Embedded systems are used for [[safety-critical system]]s in aerospace and defense industries. Unless connected to wired or wireless networks via on-chip 3G cellular or other methods for IoT monitoring and control purposes, these systems can be isolated from hacking and thus be more secure.{{citation needed|date=April 2021}} For fire safety, the systems can be designed to have a greater ability to handle higher temperatures and continue to operate. In dealing with security, the embedded systems can be self-sufficient and be able to deal with cut electrical and communication systems.
The electronics usually uses either a [[microprocessor]] or a [[microcontroller]]. Some large or old systems use general-purpose [[mainframe]] computers or [[minicomputer]]s.


Miniature wireless devices called [[mote (sensor)|motes]] are networked wireless sensors. [[Wireless sensor networking]] makes use of miniaturization made possible by advanced [[integrated circuit]] (IC) design to couple full wireless subsystems to sophisticated sensors, enabling people and companies to measure a myriad of things in the physical world and act on this information through monitoring and control systems. These motes are completely self-contained and will typically run off a battery source for years before the batteries need to be changed or charged.
== Start-up ==


==Characteristics==
All embedded systems have start-up code. Usually it sets up the electronics, tests the computer (RAM, CPU and program), and then starts the application code. Many embedded systems recover from short-term power failures by skipping the self-tests if the software can prove they were done recently.
Embedded systems are designed to perform a specific task, in contrast with general-purpose computers designed for multiple tasks. Some have [[Real-time computing|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.<ref>{{cite magazine |url=http://www.embedded.com/underthehood/207401418 |title=Under the Hood: Robot Guitar embeds autotuning |archive-url=https://web.archive.org/web/20080708195311/http://embedded.com/underthehood/207401418 |archive-date=2008-07-08 |author=David Carey |date=2008-04-22 |magazine=Embedded Systems Design}}</ref> Similarly, an embedded system in an [[automobile]] provides a specific function as a subsystem of the car itself.
Many designers have found a software-controlled light useful to indicate errors. One common way to handle it is to have the electronics turn it off (which looks broken) at reset. The software turns it on at the first opportunity to prove the light works. After that, the code blinks it during normal operation, and maybe in patterns for errors. This reassures many users and technicians.


[[File:ESOM270 eSOM300 Computer on Modules.jpg|thumb|e-con Systems eSOM270 & eSOM300 Computer on Modules]]
== Types of embedded software architectures ==
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===
There are several basically different types of software architectures in common use.
[[File:MicroVGA TUI demoapp.jpg|thumb|Embedded system [[text user interface]] using MicroVGA<ref group="nb" name="MicroVGA">For more details of MicroVGA see this [http://www.microvga.com/pdf/uvga-text-ds.pdf PDF].</ref>]]


Embedded systems range from [[Headless computer|no user interface]] at all, in systems dedicated to one task, to complex [[graphical user interface]]s that resemble modern computer desktop operating systems. Simple embedded devices use [[Push-button|buttons]], [[light-emitting diode]]s (LED), graphic or character [[liquid-crystal display]]s (LCD) with a simple [[menu (computing)|menu system]]. More sophisticated devices that use a graphical screen with [[touch screen|touch sensing]] or screen-edge [[soft key]]s 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.
=== The control loop ===


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.
In this design, the software simply has a loop. The loop calls subroutines. Each subroutine manages a part of the hardware or software. Interrupts generally set flags, or update counters that are read by the rest of the software.


===Processors in embedded systems===
A simple API disables and enables interrupts. Done right, it handles nested calls in nested subroutines, and restores the preceding interrupt state in the outermost enable. This is one of the simplest methods of creating an [[exokernel]].
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.


[[List of common microcontrollers|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.
Typically, there's some sort of subroutine in the loop to manage a list of software timers, using a periodic real time interrupt. When a timer expires, an associated subroutine is run, or flag is set.


====Ready-made computer boards====
Any expected hardware event should be backed-up with a software timer. Hardware events fail about once in a trillion times. That's about once a year with modern hardware. With a million mass-produced devices, leaving out a software timer is a business disaster.
[[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 quite large compared to most simple (8/16-bit) embedded systems. They may use [[DOS]], [[FreeBSD]], [[Linux]], [[NetBSD]], [[OpenHarmony]] 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 machine]]s (ATM) and [[arcade machines]], which contain code specific to the application.
State machines are implemented with a function-pointer per state-machine (in C++, C or assembly, anyway). A change of state stores a different function into the pointer. The function pointer is executed every time the loop runs.


However, most ready-made embedded systems boards are not PC-centered and do not use the [[Industry Standard Architecture|ISA]] or [[Peripheral Component Interconnect|PCI]] busses. 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.
Many designers recommend reading each IO device once per loop, and storing the result so the logic acts on consistent values.


One common design style uses a small system module, perhaps the size of a business card, holding high density [[Ball grid array|BGA]] chips such as an [[ARM architecture|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]].
Many designers prefer to design their state machines to check only one or two things per state. Usually this is a hardware event, and a software timer.


====ASIC and FPGA SoC solutions====
Designers recommend that hierarchical state machines should run the lower-level state machines before the higher, so the higher run with accurate information.
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 phone]]s and [[smartphone]]s. ASIC or FPGA implementations may be used for not-so-high-volume embedded systems with special needs in kind of signal processing performance, interfaces and reliability, like in avionics.
Complex functions like internal combustion controls are often handled with multi-dimensional tables. Instead of complex calculations, the code looks up the values. The software can interpolate between entries, to keep the tables small and cheap.


===Peripherals===
Some designers keep a utility program to turn data files into code, so that they can include any kind of data in a program.
[[File:SMSC LAN91C110 ethernet chip.jpg|thumb|A close-up of the SMSC LAN91C110 (SMSC 91x) chip, an embedded [[Ethernet]] chip]]


Embedded systems talk with the outside world via [[peripheral]]s, such as:
Most designers also have utility programs to add a checksum or [[CRC]] to a program, so it can check its program data before executing it.
* [[Serial communication interface]]s (SCI): [[RS-232]], [[RS-422]], [[RS-485]], etc.
* [[Synchronous Serial Interface]]: [[I2C]], [[Serial Peripheral Interface Bus|SPI]], SSC and ESSI (Enhanced Synchronous Serial Interface)
* [[Universal Serial Bus]] (USB)
* Media cards ([[SD card]]s, [[CompactFlash]], etc.)
* [[Network interface controller]]: [[Ethernet]], [[WiFi]], etc.
* [[Fieldbus]]es: [[CAN bus]], [[Local Interconnect Network|LIN-Bus]], [[PROFIBUS]], etc.
* Timers: [[Phase-locked loop]]s, [[programmable interval timer]]s
* [[General Purpose Input/Output]] (GPIO)
* [[Analog-to-digital converter|Analog-to-digital]] and [[digital-to-analog converter]]s
* Debugging: [[JTAG]], [[In-system programming]], [[background debug mode interface]] port, BITP, and DB9 ports.


===Tools===
One major weakness of this system is that it does not guarantee a time to respond to any particular hardware event. Another is that it can become complex to add new features.
As with other software, embedded system designers use [[compiler]]s, [[Assembly language|assemblers]], and [[debugger]]s to develop embedded system software. However, they may also use more specific tools:
* In circuit debuggers or emulators (see [[#Debugging|next section]]).
* Utilities to add a checksum or [[Cyclic redundancy check|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]], [[Direct memory access|DMA]], [[Interface (computing)|interface]]s, 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 to 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 (programming language)|Forth]] or [[BASIC Stamp|Basic]].
* Another alternative is to add a RTOS or [[embedded operating system]]
* Modeling and code generating [[UML tool|tools]] often based on [[UML state machine|state machines]]


Software tools can come from several sources:
The strength is that it's simple, and on small pieces of software the loop is usually so fast that nobody cares that it's unpredictable.
* Software companies that specialize in the embedded market

* Ported from the [[GNU]] software development tools
Another advantage is that this system guarantees that the software will run. There's no mysterious operating system to blame for bad behavior.
* Sometimes, development tools for a personal computer can be used if the embedded processor is a close relative to a common PC processor

Careful coding can easily assure that nothing disables interrupts for long. Thus interrupt code can run at very precise timings.

=== Nonpreemptive multitasking ===

This system is very similar to the above, except that the loop is hidden in an [[API]]. One defines a series of tasks, and each task gets its own subroutine stack. Then, when a task is idle, it calls an idle routine (usually called "pause", "wait" or etc.).

An architecture with similar properties is to have an event queue, and have a loop that removes events and calls subroutines based on a field in the queue-entry.

The advantages and disadvantages are very similar to the control loop, except that adding new software is easier. One simply writes a new task, or adds to the queue-interpreter.

=== Preemptive timers ===

Take any of the above systems, but add a timer system that runs subroutines from a timer interrupt. This adds completely new capabilities to the system. FOr the first time, the timer routines can occur at a guaranteed time.

Also, for the first time, the code can step on its own data structures at unexpected times. The timer routines must be treated with the same care as interrupt routines.

=== Preemptive tasks ===

Take the above nonpreemptive task system, and run it from a preemptive timer or other interrupts.

Suddenly the system is quite different. Any piece of task code can damage the data of another task- they must be precisely separated. Access to shared data must be rigidly controlled, with message queues or semaphores.

Often, at this stage, the developing organization buys a [[real-time operating system]]. This can be a wise decision if the organization lacks people with the skills to write one, or if the port of the operating system to the hardware will be used in several products. Otherwise, be aware that it usually adds six to eight weeks to the schedule, and forever after programmers can blame delays on it.

=== Office-style operating Systems ===

These are popular for embedded projects that have no systems budget. In the opinion of at least one author of this article, they are usually a mistake. Here's the logic.


As the complexity of embedded systems grows, higher-level tools and operating systems are migrating into machinery where it makes sense. For example, [[cellphone]]s, [[personal digital assistant]]s 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.
Operating systems are specially-packaged libraries of reusable code. If the code does something useful, the designer saves time and money. If not, it's worthless.


==Debugging==
Operating systems for business systems lack interfaces to embedded hardware. For example, if one uses Linux to write a motor controller or telephone switch, most of the real control operations end up as numbered functions in an IOCTL call. Meanwhile, the normal read, write, fseek, interface is purposeless. So the operating system actually interferes with development.
Embedded [[debugging]] may be performed at different levels, depending on the facilities available. Considerations include: does it slow down the main application, how close is the debugged system or application to the actual system or application, how expressive are the triggers that can be set for debugging (e.g., inspecting the memory when a particular [[program counter]] value is reached), and what can be inspected in the debugging process (such as, only memory, or memory and registers, etc.).


From simplest to most sophisticated debugging techniques and systems are roughly grouped into the following areas:
Operating systems protect the hardware from user programs. That is, they interfere with embedded systems development profoundly.
* Interactive resident debugging, using the simple shell provided by the embedded operating system (e.g. Forth and Basic)
* Software-only debuggers have the benefit that they do not need any hardware modification but have to carefully control what they record in order to conserve time and storage space.<ref>{{Cite book |last1=Tancreti |first1=Matthew |last2=Sundaram |first2=Vinaitheerthan |last3=Bagchi |first3=Saurabh |last4=Eugster |first4=Patrick |title=Proceedings of the 14th International Conference on Information Processing in Sensor Networks |chapter=TARDIS |date=2015 |series=IPSN '15 |location=New York, NY, USA |publisher=ACM |pages=286–297 |doi=10.1145/2737095.2737096 |isbn=9781450334754 |s2cid=10120929}}</ref>
* External debugging using logging or serial port output to trace operation using either a monitor in flash or using a debug server like the [[Remedy Debugger]] that even works for heterogeneous [[multicore]] systems.
* An in-circuit debugger (ICD), a hardware device that connects to the microprocessor via a [[JTAG]] or [[Nexus (standard)|Nexus]] interface.<ref>{{Cite book|last1=Tancreti|first1=Matthew|last2=Hossain|first2=Mohammad Sajjad|last3=Bagchi|first3=Saurabh|last4=Raghunathan|first4=Vijay|title=Proceedings of the 9th ACM Conference on Embedded Networked Sensor Systems |chapter=Aveksha |date=2011|series=SenSys '11|location=New York, NY, USA|publisher=ACM|pages=288–301|doi=10.1145/2070942.2070972|isbn=9781450307185|s2cid=14769602}}</ref> This allows the operation of the microprocessor to be controlled externally, but is typically restricted to specific debugging capabilities in the processor.
* An [[in-circuit emulator]] (ICE) replaces the microprocessor with a simulated equivalent, providing full control over all aspects of the microprocessor.
* A complete [[emulator]] provides a simulation of all aspects of the hardware, allowing all of it to be controlled and modified, and allowing debugging on a normal PC. The downsides are expense and slow operation, in some cases up to 100 times slower than the final system.
* For SoC designs, the typical approach is to verify and debug the design on an FPGA prototype board. Tools such as Certus<ref>{{cite web |url=http://www.eejournal.com/archives/articles/20121030-tektronix/ |title=Tektronix Shakes Up Prototyping, Embedded Instrumentation Boosts Boards to Emulator Status |publisher=Electronic Engineering Journal |date= 2012-10-30 |access-date=2012-10-30}}</ref> are used to insert probes in the FPGA implementation that make signals available for observation. This is used to debug hardware, firmware and software interactions across multiple FPGAs in an implementation with capabilities similar to a logic analyzer.


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 [[high-level programming language]], [[assembly code]] or mixture of both.
Since most embedded systems do not perform office work, most of the code of an office operating systems is waste. For example, most embedded systems never use a file system or screen, so file system amd GUI logic is waste.


===Tracing===
Operating systems must invariably be ported to an embedded system. That is, the hardware driver code must always be written anyway. Since this is the most difficult part of the operating system, little is saved by using one.
Real-time operating systems often support [[tracing (software)|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. Trace recording in embedded systems can be achieved using hardware or software solutions. Software-based trace recording does not require specialized debugging hardware and can be used to record traces in deployed devices, but it can have an impact on CPU and RAM usage.<ref>{{Citation |last1=Kraft |first1=Johan |title=Trace Recording for Embedded Systems: Lessons Learned from Five Industrial Projects |date=2010 |url=http://link.springer.com/10.1007/978-3-642-16612-9_24 |work=Runtime Verification |volume=6418 |pages=315–329 |editor-last=Barringer |editor-first=Howard |place=Berlin, Heidelberg |publisher=Springer Berlin Heidelberg |language=en |doi=10.1007/978-3-642-16612-9_24 |isbn=978-3-642-16611-2 |access-date=2022-08-16 |last2=Wall |first2=Anders |last3=Kienle |first3=Holger |editor2-last=Falcone |editor2-first=Ylies |editor3-last=Finkbeiner |editor3-first=Bernd |editor4-last=Havelund |editor4-first=Klaus}}</ref> One example of a software-based tracing method used in RTOS environments is the use of empty [[Macro (computer science)|macros]] which are invoked by the operating system at strategic places in the code, and can be implemented to serve as [[Hooking|hooks]].


===Reliability===
Last, the genuinely useful, portable features of operating systems are small pieces of code. For example, a basic TCP/IP interface is about 3,000 lines of C code. Likewise, a simple file system. So, if Aa design needs these, they can be had for less than 10% of the typical embedded system's development budget, without a royalty, just by writing them. Also, if the needed code is sufficiently generic, the back of embeded systems magazines typically have vendors selling royalty-free C implmentation.
Embedded systems often reside in machines that are expected to run continuously for years without error, and in some cases recover by themselves if an error occurs. Therefore, the software is usually developed and tested more carefully than that for personal computers, and unreliable mechanical moving parts such as disk drives, switches or buttons are avoided.


Specific reliability issues may include:
A notable, beloved exception to all of these objections is DOS for an IBM-PC. If you use a single-card computer, the BIOS is done, thus no drivers. DOS permits code to write to hardware. Finally, DOS doesn't do much, so it's compact.
* 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. Reduced functionality in the event of failure may be intolerable. 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 leak]]s, and also [[soft error]]s in the hardware:
=== Exotic custom operating systems ===
* [[watchdog timer]] that resets and restarts the system unless the software periodically notifies the watchdog subsystems
* Designing with a [[trusted computing base]] (TCB) architecture ensures a highly secure and reliable system environment<ref>{{cite journal |url=http://c59951.r51.cf2.rackcdn.com/5557-528-heiser.pdf |archive-url=https://web.archive.org/web/20141129070740/http://c59951.r51.cf2.rackcdn.com/5557-528-heiser.pdf |archive-date=2014-11-29 |url-status=live |title=Your System is secure? Prove it! |first1=Gernot |last1=Heiser |date=December 2007 |volume=2 |issue=6 |pages=35–8 |journal=[[;login:]]}}</ref>
* 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.<ref>{{cite book|last1=Moratelli|first1=C|last2=Johann|first2=S|last3=Neves|first3=M|last4=Hessel|first4=F|title=Proceedings of the 27th International Symposium on Rapid System Prototyping: Shortening the Path from Specification to Prototype|chapter=Embedded virtualization for the design of secure IoT applications|pages=2–6|date=2016|chapter-url=https://ieeexplore.ieee.org/document/7909116|access-date=2 February 2018|doi=10.1145/2990299.2990301|isbn=9781450345354|s2cid=17466572}}</ref> This encapsulation keeps faults from propagating from one subsystem to another, thereby improving reliability. This may also allow a subsystem to be automatically shut down and restarted on fault detection.
* Immunity-aware programming can help engineers produce more reliable embedded systems code.<ref name=":1">{{Cite book|last=Short|first=Michael|title=2008 IEEE/ACS International Conference on Computer Systems and Applications |chapter=Development guidelines for dependable real-time embedded systems |date=March 2008|chapter-url=https://ieeexplore.ieee.org/document/4493674|pages=1032–1039|doi=10.1109/AICCSA.2008.4493674|isbn=978-1-4244-1967-8|s2cid=14163138|url=https://figshare.com/articles/conference_contribution/Development_Guidelines_for_Dependable_Real-Time_Embedded_Systems_/10083272 }}</ref><ref>{{Cite web|last=Motor Industry Software Reliability Association|title=MISRA C:2012 Third Edition, First Revision|url=https://www.misra.org.uk/product/misra-c2012-third-edition-first-revision/|access-date=2022-02-03|language=en-GB}}</ref> Guidelines and coding rules such as [[MISRA C|MISRA C/C++]] aim to assist developers produce reliable, portable firmware in a number of different ways: typically by advising or mandating against coding practices which may lead to run-time errors (memory leaks, invalid pointer uses), use of run-time checks and exception handling (range/sanity checks, divide-by-zero and buffer index validity checks, default cases in logic checks), loop bounding, production of human-readable, well commented and well structured code, and avoiding language ambiguities which may lead to compiler-induced inconsistencies or side-effects (expression evaluation ordering, recursion, certain types of macro). These rules can often be used in conjunction with code [[Static program analysis|static checkers]] or bounded [[model checking]] for functional verification purposes, and also assist in determination of code [[Worst-case execution time|timing properties]].<ref name=":1"/>


===High vs. low volume===
Some systems require safe, timely, reliable or efficient behavior unobtainable with the above architectures. There are well-known tricks to construct these systems:
For high-volume systems such as [[mobile phone]]s, 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 an RTOS.
Hire a real system programmer. They cost a little more, but can save years of debugging, and the associated loss of revenue.


==Embedded software architectures==
RMA, rate monotonic analysis, can be used to find whether a set of tasks can run under a defined hardware system. In its simplest form, the designer assures that the quickest-finishing tasks have the highest priorities, and that on average, the CPU has at least 30% of its time free.
{{Main|Embedded software}}


In 1978 [[National Electrical Manufacturers Association]] released ICS&nbsp;3-1978, a standard for programmable microcontrollers,<ref>{{cite web |title=FAQs: Programmable Controllers |url=https://www.nema.org/docs/default-source/standards-document-library/faq-programmable-controllers.pdf?sfvrsn=a03312d_2 |access-date=2020-01-10}}</ref> including almost any computer-based controllers, such as [[single-board computer]]s, numerical, and event-based controllers.
Harmonic tasks optimize CPU efficiency. Basically, designers assure that everything runs from a heartbeat timer. It's hard to do this with a [[real-time operating system]], because these usually switch tasks when they wait for an I/O device.


There are several different types of software architecture in common use.
Systems with exactly two levels of priority (usually ''running'', and ''interrupts-disabled'') cannot have inverted priorities, in which a lower priority task waits for a higher-priority task to release a semaphore or other resource.


===Simple control loop===
Systems with monitors can't have deadlocks. A monitor locks a region of code from interrupts or other preemption. If the monitor is only applied to small, fast pieces of code, this can work acceptably well.
In this design, the software simply has a [[loop (computing)|loop]] which monitors the input devices. The loop calls [[subroutine]]s, each of which manages a part of the hardware or software. Hence it is called a simple control loop or programmed input-output.


===Interrupt-controlled system===
This means that systems that use dual priority and monitors are safe and reliable because hey lack both deadlocks and priority inversion. If they use harmonic tasks, they can even be fairly efficient. However, RMA can't characterize these systems, and levels of priority had better not exist anywhere, including in the operating system.
Some embedded systems are predominantly controlled by [[interrupt]]s. 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 at a predefined interval, or by a serial port controller receiving data.


This architecture is used if event handlers need low latency, and the event handlers are short and simple. These 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.
== User interfaces ==


===Cooperative multitasking===
User interfaces for embedded systems vary wildly, and thus deserve some special comment.
[[Cooperative multitasking]] is very similar to the simple control loop scheme, except that the loop is hidden in an [[API]].<ref name=":0" /><ref name="Barr-glossary" /> 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 which passes control to another task.


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.
Designers recommend testing the user interface for usability at the earliest possible instant. A quick, dirty test is to ask an executive secretary to use cardboard models drawn with magic markers, and manipulated by an engineer. The videotaped result is likely to be both humorous and very educational. In the tapes, every time the engineer talks, the interface has failed: It would cause a service call.


===Preemptive multitasking or multi-threading===
Exactly one person should approve the user interface. Ideally, this should be a customer, the major distributor or someone directly responsible for selling the system. The decisionmaker should be able to decide. The problem is that a committee will never make up its mind, and neither will some people. Not doing this causes avoidable, expensive delays. A usability test is more important than any number of opinions.
In this type of system, a low-level piece of code switches between tasks or threads based on a timer invoking 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 systems using a [[memory management unit]]) programs must be carefully designed and tested, and access to shared data must be controlled by some synchronization strategy such as [[message queue]]s, [[semaphore (programming)|semaphores]] or a [[non-blocking synchronization]] scheme.
Interface designers at [[PARC]], [[Apple]], [[Boeing]] and [[HP]] minimize the number of types of user actions. For example, use two buttons (the absolute minimum) to control a menu system (just to be clear, one button should be "next menu entry" the other button should be "select this menu entry"). A touch-screen or screen-edge buttons also minimize the types of user actions.


Because of these complexities, it is common for organizations to use an off-the-shelf RTOS, allowing the application programmers to concentrate on device functionality rather than operating system services. The choice to include an RTOS brings in its own issues, however, as the selection must be made prior to starting the application development process. This timing forces developers to choose the embedded operating system for their device based on current requirements and so restricts future options to a large extent.<ref>
Another basic trick is to minimize and simplfy the type of output. Designs should consider using a status light for each interface plug, or failure condition, to tell what failed. A cheap variation is to have two light bars with a printed matrix of errors that they select- the user can glue on the labels for the language that she speaks.
{{cite web
|url=http://www.clarinox.com/docs/whitepapers/Whitepaper_06_CrossPlatformDiscussion.pdf |archive-url=https://web.archive.org/web/20110219200027/http://www.clarinox.com/docs/whitepapers/Whitepaper_06_CrossPlatformDiscussion.pdf |archive-date=2011-02-19 |url-status=live
|title= Working across Multiple Embedded Platforms
|publisher=clarinox
|access-date=2010-08-17
}}</ref>


The level of complexity in embedded systems is continuously growing as devices are required to manage peripherals and tasks 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 an RTOS.
For example, Boeing's standard test interface is a button and some lights. When you press the button, all the lights turn on. When you release the button, the lights with failures stay on. The labels are in [[basic english]].


===Microkernels and exokernels===
For another example, look at a small computer printer. You might have one next to your computer. Notice that the lights are labelled with stick-on labels that can be printed in any language. Really look at it.
A [[microkernel]] allocates memory and switches the CPU to different threads of execution. User-mode processes implement major functions such as file systems, network interfaces, etc.


[[Exokernel]]s communicate efficiently by normal subroutine calls. The hardware and all the software in the system are available to and extensible by application programmers.
Designers use colors. Red means the users can get hurt- think of blood. Yellow means something might be wrong. Green means everything's OK.


===Monolithic kernels===
Another essential trick is to make any modes absolutely clear on the user's display.
A [[monolithic kernel]] is a relatively large kernel with sophisticated capabilities adapted to suit an embedded environment. This gives programmers an environment similar to a desktop operating system like [[Linux]] or [[Microsoft Windows]], and is therefore very productive for development. On the downside, it requires considerably more hardware resources, is often more expensive, and, because of the complexity of these kernels, can be less predictable and reliable.


Common examples of embedded monolithic kernels are [[embedded Linux]], [[VXWorks]] and [[Windows CE]].
If an interface has modes, they must be reversible in an obvious way.


Despite the increased cost in hardware, this type of embedded system is increasing in popularity, especially on the more powerful embedded devices such as [[wireless router]]s and [[Automotive navigation system|GPS navigation systems]].
Most designers prefer the display to respond to the user. The display should change immediately after a user action. If the machine is going to do anything, it should start within 7 seconds, or give progress reports.


===Additional software components===
If a design needs a screen, many designers use plain text. It can be sold as a temporary expedient. Why is it better than pictures? Users have been reading signs for years. A [[GUI]] is pretty and can do anything, but typically adds a year from artist, approval and translator delays and one or two programmers to a project's cost, without adding any value. Often, a clever [[GUI]] actually confuses users.
In addition to the core operating system, many embedded systems have additional upper-layer software components. These components include networking protocol stacks like [[Controller–area network|CAN]], [[TCP/IP]], [[FTP]], [[HTTP]], and [[HTTPS]], and storage capabilities like [[File Allocation Table|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 may be included in the kernel. In the RTOS category, the availability of additional software components depends upon the commercial offering.


===Domain-specific architectures===
If a design needs to point to parts of the machine (as in copiers), these label these with numbers on the actual machine, that are visible with the doors closed.
In the automotive sector, [[AUTOSAR]] is a standard architecture for embedded software.<!--[[User:Kvng/RTH]]-->


==See also==
A network interface is just a remote screen. It needs the same caution as any other user interface.
{{Portal|Electronics}}
{{Div col|colwidth=22em}}
* [[Communications server]]
* [[Cyber-physical system]]
* [[Electronic control unit]]
* [[Information appliance]]
* [[Integrated development environment]]
* [[Photonically Optimized Embedded Microprocessors]]
* [[Silicon compiler]]
* [[Software engineering]]
* [[System on module]]
* [[Ubiquitous computing]]


{{Div col end}}
One of the most successful general-purpose screen-based interfaces is the two menu buttons and a line of text in the user's native language. It's used in pagers, medium-priced printers, network switches, and other medium-priced situations that require complex behavior from users.


==Notes==
When there's text, there are languages. The default language should be the one most widely understood. Right now this is English. French and Spanish follow.
<references group="nb" />


==References==
Most designers recommend that one use the native character sets, no matter how painful. People with peculiar character sets feel coddled and loved when their language shows up on machinery they use.
{{Reflist}}


==Further reading==
Text should be translated by professional translators, even if native speakers are on staff. Marketing staff have to be able to tell foreign distributors that the translations are professional.
* {{Cite book |title=Designing Embedded Hardware, 2nd Edition |author=John Catsoulis |date=May 2005 |publisher=O'Reilly |isbn=0-596-00755-8}}
* {{Cite book |title=Embedded Systems, An Introduction Using the Renesas RX62N Microcontroller |author1=James M. Conrad |author2=Alexander G. Dean |date=September 2011 |publisher=Micrium |isbn=978-1935-7729-96}}
* {{Cite book |title=Embedded Software Development for the Internet Of Things, The Basics, The Technologies and Best Practices |author=Klaus Elk |date=August 2016 |publisher=CreateSpace Independent Publishing Platform |isbn=978-1534602533}}


==External links==
A foreign organization should give the highest-volume distributor the duty to review and correct any translations in his native language. This stops critiques by other native speakers, who tend to believe that no foreign organization will never know their language as well as they.
{{Commons category|Embedded systems}}
{{Wikibooks|Embedded Systems}}
{{Wikiversity|Embedded System Engineering}}
* [https://www.youtube.com/watch?v=H-OKGOMoCSI&list=PLo7bVbJhQ6qwlDa-R6pz7tA7kPzn1s5Ae Embedded Systems course with mbed] YouTube, ongoing from 2015
* [http://geer.tinho.net/geer.nro.6xi13.txt Trends in Cyber Security and Embedded Systems] Dan Geer, November 2013
* [https://www.youtube.com/playlist?list=PLPW8O6W-1chwyTzI3BHwBLbGQoPFxPAPM Modern Embedded Systems Programming Video Course] YouTube, ongoing from 2013
* [http://www.esweek.org/ Embedded Systems Week (ESWEEK)] yearly event with conferences, workshops and tutorials covering all aspects of embedded systems and software
* {{Webarchive|url=https://web.archive.org/web/20180211173413/http://www.emsig.net/conf/2015/wese/ |date=2018-02-11 |title=Workshop on Embedded and Cyber-Physical Systems Education}}, workshop covering educational aspects of embedded systems
* [https://microcontrollershop.com/An%20Embedded%20Tools%20Introduction.php Developing Embedded Systems - A Tools Introduction]


{{Computer sizes}}
== Examples of embedded systems ==
{{Computer science}}
{{Embedded systems}}
{{Authority control}}


[[Category:Embedded systems| ]]
*[[automatic teller machine]]s
*[[computer printer]]s
*[[disk drive]]s
*[[cellular telephone]]s and [[telephone switch]]es.
*[[inertial guidance system]]s for [[aircraft]] and [[missile]]s.
*[[medical equipment]]s
*[[video game console]]s
*[[industrial machinery]] use [[Programmable logic controller|programmable logic controllers]] to handle automation and monitoring.
*[[engine control computer]]s and [[antilock brake controller]]s for automobiles
*[[wristwatch]]es
*household [[appliance]]s, including [[microwave oven]]s, [[washing machine]]s, and [[television]] sets
*[[network]] equipment, including [[router]]s and [[firewall]]s
See also [[real-time]], [[real-time operating system]], [[microprocessor]]

Latest revision as of 23:55, 17 December 2024

An embedded system on a plug-in card with processor, memory, power supply, and external interfaces

An embedded system is a specialized computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electronic system.[1][2] It is embedded as part of a complete device often including electrical or electronic hardware and mechanical parts. Because an embedded system typically controls physical operations of the machine that it is embedded within, it often has real-time computing constraints. Embedded systems control many devices in common use.[3] In 2009, it was estimated that ninety-eight percent of all microprocessors manufactured were used in embedded systems.[4][needs update]

Modern embedded systems are often based on microcontrollers (i.e. microprocessors with integrated memory and 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 a 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 its reliability and performance. Some embedded systems are mass-produced, benefiting from economies of scale.

Embedded systems range in size from portable personal devices such as digital watches and MP3 players to bigger machines like home appliances, industrial assembly lines, robots, transport vehicles, traffic light controllers, and medical imaging systems. Often they constitute subsystems of other machines like avionics in aircraft and astrionics in spacecraft. Large installations like factories, pipelines, and electrical grids rely on multiple embedded systems networked together. Generalized through software customization, embedded systems such as programmable logic controllers frequently comprise their functional units.

Embedded systems range from those low in complexity, with a single microcontroller chip, to very high with multiple units, peripherals and networks, which may reside in equipment racks or across large geographical areas connected via long-distance communications lines.

History

[edit]

Background

[edit]

The origins of the microprocessor and the microcontroller can be traced back to the MOS integrated circuit, which is an integrated circuit chip fabricated from MOSFETs (metal–oxide–semiconductor field-effect transistors) and was developed in the early 1960s. By 1964, MOS chips had reached higher transistor density and lower manufacturing costs than bipolar chips. MOS chips further increased in complexity at a rate predicted by Moore's law, leading to large-scale integration (LSI) with hundreds of transistors on a single MOS chip by the late 1960s. The application of MOS LSI chips to computing was the basis for the first microprocessors, as engineers began recognizing that a complete computer processor system could be contained on several MOS LSI chips.[5]

The first multi-chip microprocessors, the Four-Phase Systems AL1 in 1969 and the Garrett AiResearch MP944 in 1970, were developed with multiple MOS LSI chips. The first single-chip microprocessor was the Intel 4004, released in 1971. It was developed by Federico Faggin, using his silicon-gate MOS technology, along with Intel engineers Marcian Hoff and Stan Mazor, and Busicom engineer Masatoshi Shima.[6]

Development

[edit]

One of the first recognizably modern embedded systems was the Apollo Guidance Computer,[citation needed] 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 computer's 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 represented 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, the Intel 4004 (released in 1971), was designed for calculators and other small systems but still required external memory and support chips. 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. As the cost of microprocessors and microcontrollers fell, the prevalence of embedded systems increased.

A comparatively low-cost microcontroller may be programmed to fulfill the same role as a large number of separate components. With microcontrollers, it became feasible to replace, even in consumer products, expensive knob-based analog components such as potentiometers and variable capacitors with up/down buttons or knobs read out by a microprocessor. 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

[edit]
Embedded Computer Sub-Assembly for Accupoll Electronic Voting Machine[7]

Embedded systems are commonly found in consumer, industrial, automotive, home appliances, medical, telecommunication, commercial, aerospace and military applications.

Telecommunications systems employ numerous embedded systems from telephone switches for the network to cell phones at the end user. Computer networking uses dedicated routers and network bridges to route data.

Consumer electronics include MP3 players, television sets, mobile phones, video game consoles, digital cameras, GPS receivers, and printers. Household appliances, such as microwave ovens, washing machines and dishwashers, include embedded systems to provide flexibility, efficiency and features. Advanced heating, ventilation, and air conditioning (HVAC) systems use networked thermostats to more accurately and efficiently control temperature that can change by time of day and season. Home automation uses wired and wireless networking that can be used to control lights, climate, security, audio/visual, surveillance, etc., all of which use embedded devices for sensing and controlling.

Transportation systems from flight to automobiles increasingly use embedded systems. New airplanes contain advanced avionics such as inertial guidance systems and GPS receivers that also have considerable safety requirements. Spacecraft rely on astrionics systems for trajectory correction. Various electric motors — brushless DC motors, induction motors and DC motors — use electronic motor controllers. Automobiles, electric vehicles, and hybrid vehicles increasingly use embedded systems to maximize efficiency and reduce pollution. Other automotive safety systems using embedded systems include anti-lock braking system (ABS), electronic stability control (ESC/ESP), traction control (TCS) and automatic four-wheel drive.

Medical equipment uses embedded systems for monitoring, and various medical imaging (positron emission tomography (PET), single-photon emission computed tomography (SPECT), computed tomography (CT), and magnetic resonance imaging (MRI) for non-invasive internal inspections. Embedded systems within medical equipment are often powered by industrial computers.[8]

Embedded systems are used for safety-critical systems in aerospace and defense industries. Unless connected to wired or wireless networks via on-chip 3G cellular or other methods for IoT monitoring and control purposes, these systems can be isolated from hacking and thus be more secure.[citation needed] For fire safety, the systems can be designed to have a greater ability to handle higher temperatures and continue to operate. In dealing with security, the embedded systems can be self-sufficient and be able to deal with cut electrical and communication systems.

Miniature wireless devices called motes are networked wireless sensors. Wireless sensor networking makes use of miniaturization made possible by advanced integrated circuit (IC) design to couple full wireless subsystems to sophisticated sensors, enabling people and companies to measure a myriad of things in the physical world and act on this information through monitoring and control systems. These motes are completely self-contained and will typically run off a battery source for years before the batteries need to be changed or charged.

Characteristics

[edit]

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.[9] Similarly, an embedded system in an automobile provides a specific function as a subsystem of the car itself.

e-con Systems eSOM270 & eSOM300 Computer on Modules

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

[edit]
Embedded system text user interface using MicroVGA[nb 1]

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

[edit]

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

[edit]

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 quite large compared to most simple (8/16-bit) embedded systems. They may use DOS, FreeBSD, Linux, NetBSD, OpenHarmony 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 busses. 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

[edit]

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 kind of signal processing performance, interfaces and reliability, like in avionics.

Peripherals

[edit]
A close-up of the SMSC LAN91C110 (SMSC 91x) chip, an embedded Ethernet chip

Embedded systems talk with the outside world via peripherals, such as:

Tools

[edit]

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 to 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 to a common PC processor

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

[edit]

Embedded debugging may be performed at different levels, depending on the facilities available. Considerations include: does it slow down the main application, how close is the debugged system or application to the actual system or application, how expressive are the triggers that can be set for debugging (e.g., inspecting the memory when a particular program counter value is reached), and what can be inspected in the debugging process (such as, only memory, or memory and registers, etc.).

From simplest to most sophisticated debugging techniques and systems are roughly grouped into the following areas:

  • Interactive resident debugging, using the simple shell provided by the embedded operating system (e.g. Forth and Basic)
  • Software-only debuggers have the benefit that they do not need any hardware modification but have to carefully control what they record in order to conserve time and storage space.[10]
  • External debugging using logging or serial port output to trace operation using either a monitor in flash or using a debug server like the Remedy Debugger that even works for heterogeneous multicore systems.
  • An in-circuit debugger (ICD), a hardware device that connects to the microprocessor via a JTAG or Nexus interface.[11] This allows the operation of the microprocessor to be controlled externally, but is typically restricted to specific debugging capabilities in the processor.
  • An in-circuit emulator (ICE) replaces the microprocessor with a simulated equivalent, providing full control over all aspects of the microprocessor.
  • A complete emulator provides a simulation of all aspects of the hardware, allowing all of it to be controlled and modified, and allowing debugging on a normal PC. The downsides are expense and slow operation, in some cases up to 100 times slower than the final system.
  • For SoC designs, the typical approach is to verify and debug the design on an FPGA prototype board. Tools such as Certus[12] are used to insert probes in the FPGA implementation that make signals available for observation. This is used to debug hardware, firmware and software interactions across multiple FPGAs in an implementation with capabilities similar to a logic analyzer.

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 high-level programming language, assembly code or mixture of both.

Tracing

[edit]

Real-time operating systems often support 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. Trace recording in embedded systems can be achieved using hardware or software solutions. Software-based trace recording does not require specialized debugging hardware and can be used to record traces in deployed devices, but it can have an impact on CPU and RAM usage.[13] One example of a software-based tracing method used in RTOS environments is the use of empty macros which are invoked by the operating system at strategic places in the code, and can be implemented to serve as hooks.

Reliability

[edit]

Embedded systems often reside in machines that are expected to run continuously for years without error, and in some cases recover by themselves if an error occurs. Therefore, the software is usually developed and tested more carefully than that for personal computers, and unreliable mechanical moving parts such as disk drives, switches or buttons are avoided.

Specific reliability issues may include:

  • 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. Reduced functionality in the event of failure may be intolerable. 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 and restarts the system unless the software periodically notifies the watchdog subsystems
  • Designing with a trusted computing base (TCB) architecture ensures a highly secure and reliable system environment[14]
  • 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.[15] This encapsulation keeps faults from propagating from one subsystem to another, thereby improving reliability. This may also allow a subsystem to be automatically shut down and restarted on fault detection.
  • Immunity-aware programming can help engineers produce more reliable embedded systems code.[16][17] Guidelines and coding rules such as MISRA C/C++ aim to assist developers produce reliable, portable firmware in a number of different ways: typically by advising or mandating against coding practices which may lead to run-time errors (memory leaks, invalid pointer uses), use of run-time checks and exception handling (range/sanity checks, divide-by-zero and buffer index validity checks, default cases in logic checks), loop bounding, production of human-readable, well commented and well structured code, and avoiding language ambiguities which may lead to compiler-induced inconsistencies or side-effects (expression evaluation ordering, recursion, certain types of macro). These rules can often be used in conjunction with code static checkers or bounded model checking for functional verification purposes, and also assist in determination of code timing properties.[16]

High vs. low volume

[edit]

For high-volume systems such as 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 an RTOS.

Embedded software architectures

[edit]

In 1978 National Electrical Manufacturers Association released ICS 3-1978, a standard for programmable microcontrollers,[18] including almost any computer-based controllers, such as single-board computers, numerical, and event-based controllers.

There are several different types of software architecture in common use.

Simple control loop

[edit]

In this design, the software simply has a loop which monitors the input devices. The loop calls subroutines, each of which manages a part of the hardware or software. Hence it is called a simple control loop or programmed input-output.

Interrupt-controlled system

[edit]

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 at a predefined interval, or by a serial port controller receiving data.

This architecture is used if event handlers need low latency, and the event handlers are short and simple. These 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.

Cooperative multitasking

[edit]

Cooperative multitasking is very similar to the simple control loop scheme, except that the loop is hidden in an API.[3][1] 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 which passes control to another task.

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

[edit]

In this type of system, a low-level piece of code switches between tasks or threads based on a timer invoking 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 systems using a memory management unit) 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 an off-the-shelf RTOS, allowing the application programmers to concentrate on device functionality rather than operating system services. The choice to include an RTOS brings in its own issues, however, as the selection must be made prior to starting the application development process. This timing forces developers to choose the embedded operating system for their device based on current requirements and so restricts future options to a large extent.[19]

The level of complexity in embedded systems is continuously growing as devices are required to manage peripherals and tasks 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 an RTOS.

Microkernels and exokernels

[edit]

A microkernel allocates memory and switches the CPU to different threads of execution. User-mode processes implement major functions such as file systems, network interfaces, etc.

Exokernels communicate efficiently by normal subroutine calls. The hardware and all the software in the system are available to and extensible by application programmers.

Monolithic kernels

[edit]

A monolithic kernel is a relatively large kernel with sophisticated capabilities adapted to suit an embedded environment. This gives programmers an environment similar to a desktop operating system like Linux or Microsoft Windows, and is therefore very productive for development. On the downside, it requires considerably more hardware resources, is often more expensive, and, because of the complexity of these kernels, can be less predictable and reliable.

Common examples of embedded monolithic kernels are embedded Linux, VXWorks and Windows CE.

Despite the increased cost in hardware, this type of embedded system is increasing in popularity, especially on the more powerful embedded devices such as wireless routers and GPS navigation systems.

Additional software components

[edit]

In addition to the core operating system, many embedded systems have additional upper-layer software components. These components include networking protocol stacks like CAN, TCP/IP, FTP, HTTP, and HTTPS, and 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 may be included in the kernel. In the RTOS category, the availability of additional software components depends upon the commercial offering.

Domain-specific architectures

[edit]

In the automotive sector, AUTOSAR is a standard architecture for embedded software.

See also

[edit]

Notes

[edit]
  1. ^ For more details of MicroVGA see this PDF.

References

[edit]
  1. ^ a b Michael Barr. "Embedded Systems Glossary". Neutrino Technical Library. Retrieved 2007-04-21.
  2. ^ Heath, Steve (2003). Embedded systems design. EDN series for design engineers (2 ed.). Newnes. p. 2. ISBN 978-0-7506-5546-0. An embedded system is a microprocessor based system that is built to control a function or a range of functions.
  3. ^ a b Michael Barr; Anthony J. Massa (2006). "Introduction". Programming embedded systems: with C and GNU development tools. O'Reilly. pp. 1–2. ISBN 978-0-596-00983-0.
  4. ^ Barr, Michael (1 August 2009). "Real men program in C". Embedded Systems Design. TechInsights (United Business Media). p. 2. Retrieved 2009-12-23.
  5. ^ Shirriff, Ken (30 August 2016). "The Surprising Story of the First Microprocessors". IEEE Spectrum. 53 (9). Institute of Electrical and Electronics Engineers: 48–54. doi:10.1109/MSPEC.2016.7551353. S2CID 32003640. Retrieved 13 October 2019.
  6. ^ "1971: Microprocessor Integrates CPU Function onto a Single Chip". The Silicon Engine. Computer History Museum. Retrieved 22 July 2019.
  7. ^ "Electronic Frontier Foundation". Electronic Frontier Foundation.
  8. ^ Embedded Systems Dell OEM Solutions | Dell Archived 2013-01-27 at the Wayback Machine. Content.dell.com (2011-01-04). Retrieved on 2013-02-06.
  9. ^ David Carey (2008-04-22). "Under the Hood: Robot Guitar embeds autotuning". Embedded Systems Design. Archived from the original on 2008-07-08.
  10. ^ Tancreti, Matthew; Sundaram, Vinaitheerthan; Bagchi, Saurabh; Eugster, Patrick (2015). "TARDIS". Proceedings of the 14th International Conference on Information Processing in Sensor Networks. IPSN '15. New York, NY, USA: ACM. pp. 286–297. doi:10.1145/2737095.2737096. ISBN 9781450334754. S2CID 10120929.
  11. ^ Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha". Proceedings of the 9th ACM Conference on Embedded Networked Sensor Systems. SenSys '11. New York, NY, USA: ACM. pp. 288–301. doi:10.1145/2070942.2070972. ISBN 9781450307185. S2CID 14769602.
  12. ^ "Tektronix Shakes Up Prototyping, Embedded Instrumentation Boosts Boards to Emulator Status". Electronic Engineering Journal. 2012-10-30. Retrieved 2012-10-30.
  13. ^ Kraft, Johan; Wall, Anders; Kienle, Holger (2010), Barringer, Howard; Falcone, Ylies; Finkbeiner, Bernd; Havelund, Klaus (eds.), "Trace Recording for Embedded Systems: Lessons Learned from Five Industrial Projects", Runtime Verification, vol. 6418, Berlin, Heidelberg: Springer Berlin Heidelberg, pp. 315–329, doi:10.1007/978-3-642-16612-9_24, ISBN 978-3-642-16611-2, retrieved 2022-08-16
  14. ^ Heiser, Gernot (December 2007). "Your System is secure? Prove it!" (PDF). ;login:. 2 (6): 35–8. Archived (PDF) from the original on 2014-11-29.
  15. ^ Moratelli, C; Johann, S; Neves, M; Hessel, F (2016). "Embedded virtualization for the design of secure IoT applications". Proceedings of the 27th International Symposium on Rapid System Prototyping: Shortening the Path from Specification to Prototype. pp. 2–6. doi:10.1145/2990299.2990301. ISBN 9781450345354. S2CID 17466572. Retrieved 2 February 2018.
  16. ^ a b Short, Michael (March 2008). "Development guidelines for dependable real-time embedded systems". 2008 IEEE/ACS International Conference on Computer Systems and Applications. pp. 1032–1039. doi:10.1109/AICCSA.2008.4493674. ISBN 978-1-4244-1967-8. S2CID 14163138.
  17. ^ Motor Industry Software Reliability Association. "MISRA C:2012 Third Edition, First Revision". Retrieved 2022-02-03.
  18. ^ "FAQs: Programmable Controllers" (PDF). Retrieved 2020-01-10.
  19. ^ "Working across Multiple Embedded Platforms" (PDF). clarinox. Archived (PDF) from the original on 2011-02-19. Retrieved 2010-08-17.

Further reading

[edit]
  • 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. CreateSpace Independent Publishing Platform. ISBN 978-1534602533.
[edit]