El software embebido es un software informático escrito para controlar máquinas o dispositivos que no se consideran ordenadores, comúnmente conocidos como sistemas embebidos . Generalmente está especializado para el hardware específico en el que se ejecuta y tiene limitaciones de tiempo y memoria. [ 1 ] Este término a veces se usa indistintamente con firmware . [ 2 ]

Una característica precisa y estable es que ninguna o no todas las funciones del software embebido se inician/controlan a través de una interfaz humana , sino a través de interfaces de máquina. [ 3 ]
Los fabricantes incorporan software embebido en la electrónica de automóviles , teléfonos, módems, robots , electrodomésticos, juguetes, sistemas de seguridad, marcapasos , televisores, decodificadores y relojes digitales , por ejemplo. [ 4 ] Este software puede ser muy simple, como el control de la iluminación que se ejecuta en un microcontrolador de 8 bits con unos pocos kilobytes de memoria y un nivel adecuado de complejidad de procesamiento determinado con un marco de Computación Probablemente Aproximadamente Correcta [ 5 ] (una metodología basada en algoritmos aleatorios ). Sin embargo, el software embebido puede volverse muy sofisticado en aplicaciones como enrutadores , elementos de redes ópticas, aviones , misiles y sistemas de control de procesos . [ 6 ]
Sistemas operativos
A diferencia de las computadoras estándar que generalmente usan sistemas operativos como macOS , Windows o Linux , el software embebido puede no usar ningún sistema operativo. Cuando usan uno, pueden elegir entre una amplia variedad de sistemas operativos, generalmente un sistema operativo en tiempo real . El código para software embebido generalmente se escribe en C o C++ , pero varios lenguajes de programación de alto nivel , como C# , Java , Python y JavaScript , también se usan comúnmente para microcontroladores y sistemas embebidos. [ 7 ] Los lenguajes ensamblador también se usan con frecuencia, especialmente en el arranque y el manejo de interrupciones . Ada se usa en algunos proyectos militares y de aviación.
Diferencias con el software de aplicación

La mayoría de los consumidores están familiarizados con el software de aplicación que proporciona funcionalidades en un ordenador. Sin embargo, el software embebido suele ser menos visible, pero no por ello menos complejo. A diferencia del software de aplicación, el software embebido tiene requisitos y capacidades de hardware fijos, y la incorporación de hardware o software de terceros está estrictamente controlada.
El software embebido debe incluir todos los controladores de dispositivo necesarios durante la fabricación, y estos controladores se escriben para los distintos dispositivos de hardware. Estos controladores, denominados BSP ( paquete de soporte de placa ), forman la capa de software que contiene controladores específicos del hardware y otras rutinas que permiten que un sistema operativo particular (tradicionalmente un sistema operativo en tiempo real o RTOS) funcione en un entorno de hardware específico (un ordenador o una tarjeta de CPU), integrado con el propio RTOS. El software depende en gran medida de la CPU y de los chips específicos elegidos. La mayoría de los ingenieros de software embebido tienen al menos un conocimiento básico de la lectura de esquemas y hojas de datos de componentes para determinar el uso de registros y sistemas de comunicación. La conversión entre decimal , hexadecimal y binario también es útil, así como la manipulación de bits . [ 8 ]
Las aplicaciones web se utilizan a menudo para la gestión de hardware, aunque también pueden enviarse archivos XML y otros datos a un ordenador para su visualización. Generalmente se utilizan sistemas de archivos con carpetas, pero las bases de datos SQL suelen estar ausentes.
El desarrollo de software requiere el uso de un compilador cruzado , que se ejecuta en un ordenador pero genera código ejecutable para el dispositivo de destino. La depuración requiere el uso de un emulador en circuito y hardware de depuración como depuradores JTAG o SWD . Los desarrolladores de software suelen tener acceso al código fuente completo del núcleo (sistema operativo).
El tamaño de la memoria de almacenamiento y la RAM puede variar significativamente. Algunos sistemas funcionan con 16 KB de Flash y 4 KB de RAM con una CPU que opera a 8 MHz, otros sistemas pueden rivalizar con las computadoras contemporáneas. [ 9 ] Estos requisitos de espacio hacen que se trabaje más en C o C++ embebido , en lugar de C++. Los lenguajes interpretados como BASIC (mientras que, por ejemplo, Parallax Propeller puede usar BASIC compilado) y Java (Java ME Embedded 8.3 [ 10 ] está disponible para, por ejemplo, microcontroladores ARM Cortex-M4 , Cortex-M7 y ARM11 más antiguo utilizado en Raspberry Pi e Intel Galileo Gen. 2) no se usan comúnmente; mientras que una implementación del lenguaje interpretado Python 3 , MicroPython , está disponible expresamente para su uso en microcontroladores, por ejemplo, basados en ARM de 32 bits (como BBC micro:bit ) y microcontroladores PIC de 16 bits .
protocolos de comunicación
La comunicación entre procesadores y entre un procesador y otros componentes es esencial. Además del direccionamiento directo de memoria , los protocolos comunes a nivel de hardware incluyen I²C , SPI , puertos serie , 1-Wires , Ethernet y USB .
Los protocolos de comunicación diseñados para su uso en sistemas embebidos están disponibles como software propietario en empresas como InterNiche Technologies y CMX Systems . Los protocolos de código abierto provienen de uIP , lwip y otros.
Véase también
Notas
- ↑ Para obtener más detalles sobre MicroVGA, consulte este PDF .
Referencias
- Edward A. Lee, "Software embebido", Advances in Computers ( Marvin Victor Zelkowitz , editor) 56 , Academic Press, Londres, 2002.
- ↑ "Stroustrup sobre C++ para sistemas embebidos (parte inferior, pág. 2)" (PDF) . Consultado el 9 de diciembre de 2012 .
- ↑ Emilio, Maurizio Di Paolo (1 de septiembre de 2014). Diseño de sistemas embebidos para la adquisición y el control de datos de alta velocidad . Springer. ISBN 978-3-319-06865-7.
- ↑ "ICS en software embebido" . Archivado del original el 22 de marzo de 2013. Consultado el 22 de julio de 2013 .
- ↑ "Métodos y tecnologías de sistemas embebidos" . Archivado del original el 29 de octubre de 2013. Consultado el 9 de diciembre de 2012 .
- ↑ Alippi, Cesare (2014), Inteligencia para sistemas embebidos , Springer, ISBN 978-3-319-05278-6.
- ↑ Lee, Edward A. (1 de noviembre de 2001). "Software embebido" (PDF) . ptolemy.berkeley.edu . Consultado el 16 de noviembre de 2025 .
- ↑ Mazzei, Daniele; Montelisciani, Gabriele; Baldi, Giacomo; Fantoni, Gualtiero (2015). Cambiando el paradigma de programación para los sistemas embebidos en el dominio del IoT . Internet de las Cosas (WF-IoT), 2015 IEEE 2nd World Forum on. Milán: IEEE. pp. 239– 244. doi : 10.1109/WF-IoT.2015.7389059 .
- ↑ "Stroustrup sobre software embebido" . Archivado del original el 3 de febrero de 2013. Consultado el 9 de diciembre de 2012 .
- ↑ "Ejemplo de CPU integrada" . Consultado el 9 de diciembre de 2012 .
- ↑ "Java ME Embedded" . Oracle Technology Network .
- Terminología informática
- Sistemas embebidos