Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Embedded software
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Computer software written to control machines not typically thought of as computers}} '''Embedded software''' is computer [[software]], written to control machines or devices that are not typically thought of as computers, commonly known as [[embedded systems]]. It is typically specialized for the particular [[electronic hardware|hardware]] that it runs on and has time and memory constraints.<ref>{{cite web|title=Stroustrup on C++ for embedded (bottom p.2)|url=http://www.stroustrup.com/abstraction-and-machine.pdf|access-date=9 December 2012}}</ref> This term is sometimes used interchangeably with [[firmware]].<ref>{{Cite book|last=Emilio|first=Maurizio Di Paolo|url=https://books.google.com/books?id=NixnBAAAQBAJ&q=This+term+is+sometimes+used+interchangeably+with+firmware.&pg=PA60|title=Embedded Systems Design for High-Speed Data Acquisition and Control|date=2014-09-01|publisher=Springer|isbn=978-3-319-06865-7|language=en}}</ref> [[File:SMSC LAN91C110 ethernet chip.jpg|thumb|A close-up of the SMSC LAN91C110 (SMSC 91x) chip, an embedded [[Ethernet]] chip]] A precise and stable characteristic feature is that no or not all functions of embedded software are initiated/controlled via a human [[Interface (computing)|interface]], but through machine-interfaces instead.<ref>{{cite web|title=I.C.S. on embedded software|url=http://www.ics-control.com|access-date=22 July 2013|url-status=dead|archive-url=https://web.archive.org/web/20130322031258/http://ics-control.com/|archive-date=22 March 2013}}</ref> Manufacturers build embedded software into the electronics of [[cars]], telephones, modems, [[robot]]s, appliances, toys, security systems, [[pacemaker]]s, televisions and set-top boxes, and [[digital watches]], for example.<ref>{{cite web|title=Embedded Systems Methods and Technologies|url=http://www.computer.org/portal/web/certification/Embedded-Systems|access-date=9 December 2012|archive-url=https://web.archive.org/web/20131029203328/http://www.computer.org/portal/web/certification/Embedded-Systems|archive-date=29 October 2013|url-status=dead}}</ref> This software can be very simple, such as lighting controls running on an [[8-bit]] [[microcontroller]] with a few [[kilobytes]] of memory with the suitable level of processing complexity determined with a Probably Approximately Correct Computation framework<ref>{{citation|title=Intelligence for Embedded Systems|first1=Cesare|last1=Alippi|publisher=Springer|year=2014|isbn=978-3-319-05278-6}}.</ref> (a methodology based on [[randomized algorithm]]s). However, embedded software can become very sophisticated in applications such as [[Router (computing)|router]]s, optical network elements, [[airplane]]s, [[missile]]s, and [[process control]] systems.<ref>http://ptolemy.eecs.berkeley.edu/publications/papers/02/embsoft/embsoftwre.pdf {{Bare URL PDF|date=March 2022}}</ref> ==Operating systems== Unlike standard computers that generally use an operating systems such as [[macOS]], [[Microsoft Windows|Windows]] or [[Linux]], embedded software may use no operating system. When they do use one, a wide variety of operating systems can be chosen from, typically a [[real-time operating system]]. Code for embedded software is typically written in [[C (programming language)|C]] or [[C++]], but various [[high-level programming languages]], such as [[C#]], [[Java (programming language)|Java]], [[Python (programming language)|Python]] and [[JavaScript]], are now also in common use to target microcontrollers and embedded systems.<ref>{{cite conference |title= Changing the programming paradigm for the embedded in the IoT domain |last1= Mazzei |first1= Daniele |last2= Montelisciani |first2= Gabriele |last3= Baldi |first3= Giacomo |last4= Fantoni |first4= Gualtiero |date= 2015 |publisher= IEEE |pages= 239β244 |conference= Internet of Things (WF-IoT), 2015 IEEE 2nd World Forum on |location=Milan |doi= 10.1109/WF-IoT.2015.7389059}}</ref> [[Assembly language]]s are often used too, especially in booting and [[interrupt]] handling. [[Ada (programming language)|Ada]] is used in some military and aviation projects. ==Differences from application software== [[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>]] Most consumers are familiar with [[application software]] that provide functionality on a computer. However embedded software is often less visible, but no less complicated. Unlike application software, embedded software has fixed hardware requirements and capabilities, and addition of third-party hardware or software is strictly controlled. Embedded software needs to include all needed [[device driver]]s at manufacturing time, and the device drivers are written for the various hardware devices. These device drivers, called BSP ([[Board support package]]), form the layer of software containing hardware-specific drivers and other routines that allow a particular operating system (traditionally a real-time operating system, or RTOS) to function in a particular hardware environment (a computer or CPU card), integrated with the RTOS itself. The software is highly dependent on the CPU and specific chips chosen. Most embedded software engineers have at least a passing knowledge of reading [[schematic]]s, and reading data sheets for components to determine usage of registers and communication system. Conversion between [[decimal]], [[hexadecimal]] and [[binary numeral system|binary]] is useful as well as using [[bit manipulation]].<ref>{{cite web |title=Stroustrup on embedded software |url=http://www.www.stroustrup.com/Programming/25_embedded.ppt |access-date=9 December 2012 |url-status=dead |archive-url=https://web.archive.org/web/20130203113844/http://www.stroustrup.com/Programming/25_embedded.ppt |archive-date=3 February 2013 }}</ref> Web applications are often used for managing hardware, although XML files and other output may be passed to a computer for display. File systems with folders are typically used, however SQL databases are often absent. Software development requires use of a [[cross compiler]], which runs on a computer but produces executable code for the target device. Debugging requires use of an [[in-circuit emulator]], and debugging hardware such as [[JTAG]] or [[JTAG#Serial Wire Debug|SWD]] debuggers. Software developers often have access to the complete kernel (OS) source code. Size of the storage memory and RAM can vary significantly. Some systems run in 16 KB of Flash and 4 KB of RAM with a CPU operating at 8 MHz, other systems can rival contemporary computers.<ref>{{cite web|title=Example of embedded CPU|url=http://www.st.com/internet/mcu/product/216844.jsp|access-date=9 December 2012}}</ref> These space requirements lead to more work being done in C or [[embedded C++]], instead of C++. Interpreted languages like [[BASIC]] (while e.g. [[Parallax Propeller#BASIC compiler|Parallax Propeller]] can use compiled BASIC) and [[Java programming language|Java]]<!--at least was used, with ARM (and others) JVM bytecode in hardware--> (Java ME Embedded 8.3<ref>{{cite web |url=https://www.oracle.com/technetwork/java/embedded/javame/embed-me/downloads/java-embedded-java-me-download-2162242.html |title=Java ME Embedded |work=Oracle Technology Network}}</ref> is available for e.g. <!--STMicroelectronics--> [[ARM Cortex-M4]], [[Cortex-M7]] microcontrollers and older [[ARM11]] used in [[Raspberry Pi]] and [[Intel Galileo]] Gen. 2) are not commonly used; while an implementation of the interpreted [[Python (programming language)|Python]] 3 language{{snd}} [[MicroPython]]{{snd}} is however available expressly for microcontroller use, e.g. [[32-bit]] [[List of ARM Cortex-M development tools|ARM]]-based (such as BBC [[Micro Bit|micro:bit]]) and <!--say e.g. here? CC3200 seems to be ARM, so only other non-ARM:?-->[[16-bit]] [[PIC microcontroller]]s. ==Communication protocols== Communications between processors and between one processor and other components are essential. Besides [[memory address|direct memory addressing]], hardware level common protocols include [[IΒ²C]], [[Serial Peripheral Interface Bus|SPI]], [[serial port]]s, [[1-Wire]]s, [[Ethernet]]s, and [[Universal Serial Bus|USB]]. Communications protocols designed for use in [[embedded systems]] are available as [[closed source]] from companies including InterNiche Technologies and [[CMX Systems]]. [[Open-source model|Open-source]] protocols stem from [[UIP (micro IP)|uIP]], [[LwIP|lwip]], and others. ==See also== * [[Embedded system]] ==Notes== {{reflist|group=nb}} ==References== * Edward A. Lee, "Embedded Software", ''Advances in Computers'' ([[Marvin Victor Zelkowitz]], editor) '''56''', Academic Press, London, 2002. {{reflist}} {{Embedded systems}} [[Category:Computing terminology]] [[Category:Embedded systems]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Bare URL PDF
(
edit
)
Template:Citation
(
edit
)
Template:Cite book
(
edit
)
Template:Cite conference
(
edit
)
Template:Cite web
(
edit
)
Template:Embedded systems
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Snd
(
edit
)