El software integrado es un software informático escrito para controlar máquinas o dispositivos que normalmente no se consideran ordenadores, comúnmente conocidos como sistemas integrados . Por lo general, está especializado para el hardware en particular en el que se ejecuta y tiene restricciones 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 todas las funciones del software integrado se inician o controlan a través de una interfaz humana , sino a través de interfaces de máquina. [3]
Los fabricantes incorporan software integrado en la electrónica de automóviles , teléfonos, módems, robots , electrodomésticos, juguetes, sistemas de seguridad, marcapasos , televisores y decodificadores, y relojes digitales , por ejemplo. [4] Este software puede ser muy simple, como controles de iluminación que se ejecutan en un microcontrolador de 8 bits con unos pocos kilobytes de memoria con el nivel adecuado de complejidad de procesamiento determinado con un marco de cálculo probablemente aproximadamente correcto [5] (una metodología basada en algoritmos aleatorios ). Sin embargo, el software integrado puede llegar a ser muy sofisticado en aplicaciones como enrutadores , elementos de redes ópticas, aviones , misiles y sistemas de control de procesos . [6]
A diferencia de las computadoras estándar que generalmente usan un sistema operativo como macOS , Windows o Linux , el software integrado puede no usar ningún sistema operativo. Cuando lo usan, se puede elegir entre una amplia variedad de sistemas operativos, generalmente un sistema operativo en tiempo real . El código para software integrado generalmente se escribe en C o C++ , pero varios lenguajes de programación de alto nivel , como Java , Python y JavaScript , ahora también son de uso común para apuntar a microcontroladores y sistemas integrados. [7] Los lenguajes ensambladores también se usan a menudo, especialmente en el arranque y el manejo de interrupciones . Ada se utiliza en algunos proyectos militares y de aviación.
La mayoría de los consumidores están familiarizados con el software de aplicación que proporciona funcionalidad a una computadora. Sin embargo, el software integrado suele ser menos visible, pero no por ello menos complicado. A diferencia del software de aplicación, el software integrado tiene requisitos y capacidades de hardware fijos, y la incorporación de hardware o software de terceros está estrictamente controlada.
El software integrado debe incluir todos los controladores de dispositivos necesarios en el momento de la fabricación, y los controladores de dispositivos se escriben para los diversos dispositivos de hardware. Estos controladores de dispositivos, llamados BSP ( paquete de soporte de placa ), forman la capa de software que contiene controladores específicos de 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 particular (una computadora o tarjeta de CPU), integrado con el propio RTOS. El software depende en gran medida de la CPU y los chips específicos elegidos. La mayoría de los ingenieros de software integrado tienen al menos un conocimiento básico de lectura de esquemas y hojas de datos de componentes para determinar el uso de registros y el sistema de comunicación. La conversión entre decimal , hexadecimal y binario es útil, así como el uso de la manipulación de bits . [8]
Las aplicaciones web se utilizan a menudo para gestionar el hardware, aunque los archivos XML y otros datos de salida se pueden pasar a un ordenador para su visualización. Normalmente se utilizan sistemas de archivos con carpetas, aunque las bases de datos SQL suelen estar ausentes.
El desarrollo de software requiere el uso de un compilador cruzado , que se ejecuta en una computadora pero produce 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 los depuradores JTAG o SWD . Los desarrolladores de software a menudo tienen acceso al código fuente completo del núcleo (SO).
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 funciona a 8 MHz, otros sistemas pueden rivalizar con las computadoras contemporáneas. [9] Estos requisitos de espacio hacen que se realice más trabajo en C o C++ integrado , en lugar de C++. Los lenguajes interpretados como BASIC (aunque, 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 uso en microcontroladores, por ejemplo, basados en ARM de 32 bits (como BBC micro:bit ) y microcontroladores PIC de 16 bits .
Las comunicaciones entre procesadores y entre un procesador y otros componentes son esenciales. Además del direccionamiento directo de memoria , los protocolos comunes a nivel de hardware incluyen I²C , SPI , puertos seriales , 1-Wires , Ethernet y USB .
Los protocolos de comunicaciones diseñados para su uso en sistemas integrados están disponibles como código cerrado en empresas como InterNiche Technologies y CMX Systems . Los protocolos de código abierto provienen de uIP , lwip y otros.