
Un sistema embebido es un sistema informático especializado —una combinación de un procesador , memoria y dispositivos periféricos de entrada/salida— que tiene una función específica dentro de un sistema mecánico o electrónico más grande. [ 1 ] [ 2 ] Se integra como parte de un dispositivo completo, que a menudo incluye hardware eléctrico o electrónico y componentes mecánicos .
Los sistemas embebidos controlan muchos dispositivos de uso común. [ 3 ] En 2009Se estimó que el 98% de todos los microprocesadores fabricados se utilizaban en sistemas embebidos. [ 4 ]Dado que un sistema embebido normalmente controla las operaciones físicas de la máquina en la que está integrado, a menudo tiene limitaciones de computación en tiempo real .
Los sistemas embebidos modernos suelen basarse en microcontroladores (es decir, microprocesadores con memoria integrada e interfaces periféricas), pero también son comunes los microprocesadores convencionales (que utilizan chips externos para la memoria y los circuitos de interfaz periférica), especialmente en sistemas más complejos. En ambos casos, los procesadores utilizados pueden ser de diversos tipos, desde procesadores de propósito general hasta aquellos especializados en una clase específica de cálculos, o incluso diseñados a medida para la aplicación en cuestión. Un tipo estándar común de procesadores dedicados es el procesador de señal digital (DSP). Dado que el sistema embebido está dedicado a tareas específicas, los ingenieros de diseño pueden optimizarlo para reducir el tamaño y el coste del producto, así como para aumentar su fiabilidad y rendimiento. Algunos sistemas embebidos se producen en masa, beneficiándose de las economías de escala .
Los sistemas embebidos varían en tamaño, desde dispositivos personales portátiles como relojes digitales y reproductores de MP3 hasta máquinas más grandes como electrodomésticos , líneas de montaje industriales , robots , vehículos de transporte, controladores de semáforos y sistemas de imágenes médicas . A menudo, constituyen subsistemas de otras máquinas, como la aviónica en aeronaves y la astrofísica en naves espaciales . Grandes instalaciones como fábricas , oleoductos y redes eléctricas dependen de múltiples sistemas embebidos interconectados. Generalizados mediante la personalización del software, los sistemas embebidos, como los controladores lógicos programables, suelen constituir sus unidades funcionales.
Historia
Fondo
Los orígenes del microprocesador y del microcontrolador se remontan al circuito integrado MOS , un chip de circuito integrado fabricado con MOSFET ( transistores de efecto de campo de metal-óxido-semiconductor ) y desarrollado a principios de la década de 1960. Para 1964, los chips MOS habían alcanzado una mayor densidad de transistores y menores costos de fabricación que los chips bipolares . La complejidad de los chips MOS aumentó aún más a un ritmo predicho por la ley de Moore , lo que condujo a la integración a gran escala (LSI), con cientos de transistores en un solo chip MOS a finales de la década de 1960. La aplicación de los chips LSI MOS a la informática fue la base de los primeros microprocesadores, ya que los ingenieros comenzaron a reconocer que un sistema de procesador informático completo podía estar contenido en varios chips LSI MOS. [ 5 ]
Los primeros microprocesadores multichip, el Four-Phase Systems AL1 en 1969 y el Garrett AiResearch MP944 en 1970, se desarrollaron con múltiples chips MOS LSI. El primer microprocesador de un solo chip fue el Intel 4004 , lanzado en 1971. Fue desarrollado por Federico Faggin , utilizando su tecnología MOS de puerta de silicio , junto con los ingenieros de Intel Marcian Hoff y Stan Mazor , y el ingeniero de Busicom Masatoshi Shima . [ 6 ]
Desarrollo
Uno de los primeros sistemas embebidos reconociblemente modernos fue la computadora de guía del Apolo , [ 7 ] desarrollada alrededor de 1965 por Charles Stark Draper en el Laboratorio de Instrumentación del MIT . Al inicio del proyecto, la computadora de guía del Apolo se consideró el elemento más arriesgado del proyecto, ya que empleaba los circuitos integrados monolíticos, de reciente desarrollo en aquel entonces , para reducir el tamaño y el peso de la computadora.
Un ejemplo temprano de sistema integrado producido en masa fue la computadora de guiado Autonetics D-17 para el misil Minuteman , lanzada en 1961. Cuando el Minuteman II entró en producción en 1966, la D-17 fue reemplazada por una nueva computadora que representó el primer uso a gran escala de circuitos integrados.
Desde sus primeras aplicaciones en la década de 1960, los sistemas embebidos han experimentado una reducción de precio y un aumento drástico en su potencia de procesamiento y funcionalidad. Un microprocesador primitivo, el Intel 4004 (lanzado en 1971), fue diseñado para calculadoras y otros sistemas pequeños, pero aún requería memoria externa y chips de soporte. A principios de la década de 1980, los componentes de memoria, entrada y salida se integraron en el mismo chip que el procesador, dando lugar a los microcontroladores. Los microcontroladores se utilizan en aplicaciones donde un ordenador de propósito general resultaría demasiado costoso. A medida que disminuía el coste de los microprocesadores y microcontroladores, aumentaba la prevalencia de los sistemas embebidos.
Un microcontrolador de coste relativamente bajo puede programarse para cumplir la misma función que un gran número de componentes independientes. Gracias a los microcontroladores, fue posible sustituir, incluso en productos de consumo, componentes analógicos costosos basados en perillas , como potenciómetros y condensadores variables, por botones o perillas de subir/bajar controlados por un microprocesador. Si bien en este contexto un sistema embebido suele ser más complejo que una solución tradicional, la mayor parte de la complejidad reside en el propio microcontrolador. Se requieren muy pocos componentes adicionales y la mayor parte del esfuerzo de diseño se centra en el software. La creación de prototipos y las pruebas de software pueden ser más rápidas que el diseño y la construcción de un nuevo circuito sin utilizar un procesador embebido.
Aplicaciones

Los sistemas embebidos se encuentran habitualmente en aplicaciones de consumo, industriales, automotrices , electrodomésticos , médicas, de telecomunicaciones, comerciales, aeroespaciales y militares.
Los sistemas de telecomunicaciones emplean numerosos sistemas integrados, desde conmutadores telefónicos para la red hasta teléfonos móviles en el dispositivo del usuario final . Las redes informáticas utilizan enrutadores dedicados y puentes de red para enrutar los datos.
Los dispositivos electrónicos de consumo incluyen reproductores de MP3 , televisores , teléfonos móviles , consolas de videojuegos , cámaras digitales , receptores GPS e impresoras . Los electrodomésticos, como hornos microondas , lavadoras y lavavajillas , incorporan sistemas integrados para ofrecer flexibilidad, eficiencia y diversas funciones. Los sistemas avanzados de calefacción, ventilación y aire acondicionado (HVAC) utilizan termostatos conectados en red para controlar la temperatura con mayor precisión y eficiencia, la cual puede variar según la hora del día y la estación del año . La domótica utiliza redes cableadas e inalámbricas para controlar la iluminación, la climatización, la seguridad, los sistemas audiovisuales, la vigilancia, etc., todo ello mediante dispositivos integrados para la detección y el control.
Los sistemas de transporte, desde el vuelo hasta los automóviles, utilizan cada vez más sistemas embebidos. Los aviones modernos incorporan aviónica avanzada , como sistemas de guiado inercial y receptores GPS, que también exigen importantes medidas de seguridad. Las naves espaciales dependen de sistemas astronómicos para la corrección de trayectoria. Diversos motores eléctricos —motores de CC sin escobillas , motores de inducción y motores de CC— utilizan controladores electrónicos . Los automóviles , los vehículos eléctricos y los vehículos híbridos utilizan cada vez más sistemas embebidos para maximizar la eficiencia y reducir la contaminación. Otros sistemas de seguridad automotriz que utilizan sistemas embebidos incluyen el sistema de frenos antibloqueo (ABS), el control electrónico de estabilidad (ESC/ESP), el control de tracción (TCS) y la tracción integral automática .
Los equipos médicos utilizan sistemas integrados para la monitorización y diversas técnicas de imagen médica ( tomografía por emisión de positrones (PET), tomografía computarizada por emisión de fotón único (SPECT), tomografía computarizada (TC) e imagen por resonancia magnética (IRM)) para inspecciones internas no invasivas. Los sistemas integrados en los equipos médicos suelen estar alimentados por ordenadores industriales. [ 9 ]
Los sistemas embebidos se utilizan en sistemas críticos para la seguridad en las industrias aeroespacial y de defensa. A menos que estén conectados a redes cableadas o inalámbricas mediante conectividad celular 3G integrada en el chip u otros métodos para la monitorización y el control del IoT, estos sistemas pueden aislarse de ataques informáticos y, por lo tanto, ser más seguros. En materia de seguridad contra incendios, los sistemas pueden diseñarse para soportar temperaturas elevadas y seguir funcionando. En cuanto a la seguridad, los sistemas embebidos pueden ser autosuficientes y capaces de gestionar cortes en los sistemas eléctricos y de comunicación.
Los dispositivos inalámbricos en miniatura, denominados motes, son sensores inalámbricos conectados en red. La miniaturización, posible gracias al diseño avanzado de circuitos integrados (CI), permite acoplar subsistemas inalámbricos completos a sensores sofisticados. Esto posibilita que personas y empresas midan una gran variedad de parámetros en el mundo físico y actúen en función de esta información mediante sistemas de monitorización y control. Estos motes son completamente autónomos y suelen funcionar con baterías durante años antes de que sea necesario cambiarlas o recargarlas.
Características
Los sistemas embebidos están diseñados para realizar una tarea específica, a diferencia de las computadoras de propósito general, diseñadas para realizar múltiples tareas. Algunos tienen restricciones de rendimiento en tiempo real que deben cumplirse por razones como la seguridad y la facilidad de uso; otros pueden tener requisitos de rendimiento bajos o nulos, lo que permite simplificar el hardware del sistema para reducir costos.
Los sistemas embebidos no siempre son dispositivos independientes. Muchos sistemas embebidos son una pequeña parte de un dispositivo más grande que cumple una función más general. Por ejemplo, la guitarra robot Gibson cuenta con un sistema embebido para afinar las cuerdas, pero su propósito principal es reproducir música. [ 10 ] De manera similar, un sistema embebido en un automóvil proporciona una función específica como subsistema del propio vehículo.

Las instrucciones de programación escritas para sistemas embebidos se denominan firmware y se almacenan en memoria de solo lectura o en chips de memoria flash . Se ejecutan con recursos de hardware limitados: poca memoria, teclado o pantalla pequeños o inexistentes.
Interfaces de usuario

Los sistemas embebidos abarcan desde sistemas sin interfaz de usuario , dedicados a una sola tarea, hasta interfaces gráficas complejas que se asemejan a los sistemas operativos de escritorio de las computadoras modernas. Los dispositivos embebidos sencillos utilizan botones , diodos emisores de luz (LED), pantallas de cristal líquido (LCD) gráficas o de caracteres con un sistema de menú simple . Los dispositivos más sofisticados que utilizan una pantalla gráfica con detección táctil o teclas programables en el borde de la pantalla ofrecen flexibilidad y minimizan el espacio utilizado: el significado de los botones puede cambiar con la pantalla, y la selección implica el comportamiento natural de señalar lo que se desea.
Algunos sistemas proporcionan una interfaz de usuario remota mediante una conexión serie (p. ej., RS-232 ) o de red (p. ej. , Ethernet ). Este enfoque amplía las capacidades del sistema embebido, evita el coste de una pantalla, simplifica el paquete de soporte de la placa (BSP) y permite a los diseñadores crear una interfaz de usuario avanzada en el PC. Un buen ejemplo de esto es la combinación de un servidor HTTP embebido que se ejecuta en un dispositivo embebido (como una cámara IP o un router de red ). La interfaz de usuario se muestra en un navegador web en un PC conectado al dispositivo.
Procesadores en sistemas embebidos
Algunas características típicas de los ordenadores integrados, en comparación con sus homólogos de propósito general, son el bajo consumo energético, el tamaño reducido, la robustez en los rangos de funcionamiento y el bajo coste unitario. Esto se consigue a costa de una menor capacidad de procesamiento.
Se han desarrollado numerosos microcontroladores para su uso en sistemas embebidos. Los microprocesadores de propósito general también se utilizan en estos sistemas, pero generalmente requieren más circuitos de soporte que los microcontroladores.
Placas de ordenador prefabricadas
PC/104 y PC/104+ son ejemplos de estándares para placas base prefabricadas destinadas a sistemas integrados y robustos de pequeño tamaño y baja producción. Suelen estar basadas en la arquitectura x86 y son físicamente pequeñas en comparación con un PC estándar, aunque siguen siendo grandes en comparación con la mayoría de los sistemas integrados sencillos (de 8/16 bits). Pueden utilizar un sistema operativo estándar como Linux o NetBSD , o un sistema operativo en tiempo real (RTOS) integrado como MicroC/OS-II , QNX o VxWorks .
En ciertas aplicaciones, donde el tamaño reducido o la eficiencia energética no son prioritarios, los componentes utilizados pueden ser compatibles con los de las computadoras personales x86 de propósito general. Placas como la gama VIA EPIA ayudan a salvar esta brecha al ser compatibles con PC, pero altamente integradas, físicamente más pequeñas o con otras características que las hacen atractivas para los ingenieros de sistemas embebidos. La ventaja de este enfoque es que se pueden utilizar componentes comerciales de bajo costo junto con las mismas herramientas de desarrollo de software que se utilizan para el desarrollo de software general. Los sistemas construidos de esta manera se siguen considerando embebidos, ya que están integrados en dispositivos más grandes y cumplen una única función. Ejemplos de dispositivos que pueden adoptar este enfoque son los cajeros automáticos (ATM) y las máquinas recreativas , que contienen código específico para la aplicación.
Sin embargo, la mayoría de las placas de sistemas embebidos prefabricadas no están centradas en PC y no utilizan los buses ISA o PCI . Cuando interviene un procesador de sistema en un chip , puede resultar poco beneficioso contar con un bus estandarizado que conecte componentes discretos, y el entorno tanto para el hardware como para el software puede ser muy diferente.
Un estilo de diseño común utiliza un pequeño módulo de sistema, quizás del tamaño de una tarjeta de visita, que contiene chips BGA de alta densidad , como un procesador de sistema en chip (SOC) basado en ARM y periféricos, memoria flash externa para almacenamiento y DRAM para memoria de ejecución. El proveedor del módulo suele proporcionar el software de arranque y se asegura de que haya una selección de sistemas operativos, que normalmente incluyen Linux y algunas opciones en tiempo real. Estos módulos pueden fabricarse en grandes volúmenes por organizaciones familiarizadas con sus problemas de pruebas especializados y combinarse con placas base personalizadas de menor volumen con periféricos externos específicos para la aplicación. Ejemplos destacados de este enfoque son Arduino y Raspberry Pi .
Soluciones SoC ASIC y FPGA
Un sistema en un chip (SoC) contiene un sistema completo, compuesto por múltiples procesadores, multiplicadores, cachés, incluso diferentes tipos de memoria y, comúnmente, varios periféricos como interfaces para comunicación cableada o inalámbrica, todo en un solo chip. A menudo, estos chips incluyen unidades de procesamiento gráfico (GPU) y DSP. Los SoC pueden implementarse como un circuito integrado de aplicación específica (ASIC) o mediante una matriz de puertas programables en campo (FPGA), que generalmente es reconfigurable.
Las implementaciones ASIC son comunes en sistemas embebidos de muy alto volumen, como teléfonos móviles y smartphones . Las implementaciones ASIC o FPGA pueden utilizarse en sistemas embebidos de menor volumen con necesidades especiales en cuanto a rendimiento de procesamiento de señales, interfaces y fiabilidad, como en la aviónica.
Periféricos

Los sistemas embebidos se comunican con el mundo exterior a través de periféricos , tales como:
- Interfaces de comunicación serie (SCI): RS-232 , RS-422 , RS-485 , etc.
- Interfaz serie síncrona : I2C , SPI , SSC y ESSI (Interfaz serie síncrona mejorada)
- Bus serie universal (USB)
- Tarjetas de memoria ( tarjetas SD , CompactFlash , etc.)
- Controlador de interfaz de red : Ethernet , WiFi , etc.
- Buses de campo : bus CAN , bus LIN , PROFIBUS , etc.
- Temporizadores: Bucles de enganche de fase , temporizadores de intervalo programables
- Entrada/Salida de Propósito General (GPIO)
- Convertidores analógico-digitales y digital-analógicos
- Depuración: JTAG , programación en sistema , puerto de interfaz de modo de depuración en segundo plano , BITP y puertos DB9.
Herramientas
Al igual que con otros programas, los diseñadores de sistemas embebidos utilizan compiladores , ensambladores y depuradores para desarrollar software para sistemas embebidos. Sin embargo, también pueden utilizar herramientas más específicas:
- En depuradores o emuladores de circuitos (véase la siguiente sección ).
- Utilidades para agregar una suma de verificación o CRC a un programa, de modo que el sistema embebido pueda comprobar si el programa es válido.
- En los sistemas que utilizan procesamiento digital de señales , los desarrolladores pueden usar un cuaderno de cálculo para simular las operaciones matemáticas.
- Las herramientas de modelado y simulación a nivel de sistema ayudan a los diseñadores a construir modelos de simulación de un sistema con componentes de hardware como procesadores, memorias , DMA , interfaces , buses y flujo de comportamiento del software como un diagrama de estados o un diagrama de flujo utilizando bloques de biblioteca configurables. La simulación se lleva a cabo para seleccionar los componentes adecuados mediante el análisis de la relación potencia-rendimiento, el análisis de confiabilidad y el análisis de cuellos de botella. Los informes típicos que ayudan al diseñador a tomar decisiones de arquitectura incluyen la latencia de la aplicación, el rendimiento del dispositivo, la utilización del dispositivo, el consumo de energía del sistema completo, así como el consumo de energía a nivel de dispositivo.
- Una herramienta de desarrollo basada en modelos crea y simula diagramas gráficos de flujo de datos y diagramas de estados UML de componentes como filtros digitales, controladores de motor, decodificación de protocolos de comunicación y tareas multivelocidad.
- Se pueden utilizar compiladores y enlazadores personalizados para optimizar el hardware especializado.
- Un sistema embebido puede tener su propio lenguaje o herramienta de diseño especial, o añadir mejoras a un lenguaje existente como Forth o Basic .
- Otra alternativa es añadir un sistema operativo en tiempo real (RTOS) o un sistema operativo embebido.
- Las herramientas de modelado y generación de código a menudo se basan en máquinas de estados.
Las herramientas de software pueden provenir de diversas fuentes:
- Empresas de software especializadas en el mercado de sistemas embebidos
- Adaptado de las herramientas de desarrollo de software GNU
- En ocasiones, se pueden utilizar herramientas de desarrollo para un ordenador personal si el procesador integrado es un pariente cercano de un procesador de PC común.
El software embebido suele requerir diversas herramientas de desarrollo, como lenguajes de programación como C++ , Rust o Python , y frameworks como Qt para interfaces gráficas. Estas herramientas permiten a los desarrolladores crear aplicaciones eficientes, escalables y con múltiples funcionalidades, adaptadas a los requisitos específicos de los sistemas embebidos. La elección de las herramientas se basa en factores como el rendimiento en tiempo real, la integración con el hardware o la eficiencia energética.
A medida que aumenta la complejidad de los sistemas embebidos, las herramientas y los sistemas operativos de alto nivel se están incorporando a la maquinaria donde resulta conveniente. Por ejemplo, los teléfonos móviles , las agendas electrónicas y otros ordenadores de consumo suelen requerir software importante que se adquiere o se proporciona a un tercero, distinto del fabricante. En estos sistemas, se necesita un entorno de programación abierto como Linux, NetBSD , FreeBSD , OSGi o Java embebido para que el proveedor de software externo pueda vender a un mercado amplio.
Depuración
La depuración de sistemas embebidos puede realizarse en diferentes niveles, según las herramientas disponibles. Algunos aspectos a considerar son: si ralentiza la aplicación principal, qué tan cerca está el sistema o la aplicación depurada del sistema o la aplicación real, qué tan expresivos son los disparadores que se pueden configurar para la depuración (por ejemplo, inspeccionar la memoria cuando se alcanza un valor específico del contador de programa ) y qué se puede inspeccionar durante el proceso de depuración (como, por ejemplo, solo la memoria o la memoria y los registros, etc.).
Desde las más sencillas hasta las más sofisticadas, las técnicas y los sistemas de depuración se agrupan aproximadamente en las siguientes áreas:
- Depuración interactiva en tiempo real, utilizando el intérprete de comandos sencillo proporcionado por el sistema operativo integrado (por ejemplo, Forth y Basic).
- Los depuradores exclusivamente de software tienen la ventaja de que no necesitan ninguna modificación de hardware, pero deben controlar cuidadosamente lo que registran para ahorrar tiempo y espacio de almacenamiento. [ 11 ]
- La depuración externa utiliza el registro de eventos o la salida del puerto serie para rastrear el funcionamiento, ya sea mediante un monitor en memoria flash o mediante un servidor de depuración como Remedy Debugger , que incluso funciona con sistemas multinúcleo heterogéneos.
- Un depurador en circuito (ICD) es un dispositivo de hardware que se conecta al microprocesador mediante una interfaz JTAG o Nexus . [ 12 ] Esto permite controlar externamente el funcionamiento del microprocesador, pero normalmente se limita a capacidades de depuración específicas del procesador.
- Un emulador en circuito (ICE, por sus siglas en inglés) reemplaza el microprocesador con un equivalente simulado, lo que proporciona un control total sobre todos los aspectos del microprocesador.
- Un emulador completo simula todos los aspectos del hardware, permitiendo controlarlo y modificarlo por completo, además de facilitar la depuración en un PC convencional. Sus desventajas son el elevado coste y la lentitud de su funcionamiento, que en algunos casos puede ser hasta 100 veces más lento que el sistema final.
- Para los diseños de SoC, el enfoque típico consiste en verificar y depurar el diseño en una placa prototipo FPGA. Se utilizan herramientas como Certus [ 13 ] para insertar sondas en la implementación FPGA que permiten observar las señales. Esto se emplea para depurar las interacciones de hardware, firmware y software en múltiples FPGAs, en una implementación con capacidades similares a las de un analizador lógico.
Salvo que se restrinja a la depuración externa, el programador normalmente puede cargar y ejecutar el software mediante las herramientas, visualizar el código que se ejecuta en el procesador e iniciar o detener su funcionamiento. La visualización del código puede ser como lenguaje de programación de alto nivel , código ensamblador o una combinación de ambos.
Rastreo
Los sistemas operativos en tiempo real suelen admitir el rastreo de eventos del sistema operativo. Una herramienta de PC host presenta una vista gráfica, basada en un registro del comportamiento del sistema. El registro de rastreo puede realizarse en software, por el RTOS o por hardware de rastreo especial. El rastreo del RTOS permite a los desarrolladores comprender los problemas de tiempo y rendimiento del sistema de software y proporciona una buena comprensión de los comportamientos del sistema de alto nivel. El registro de rastreo en sistemas embebidos puede lograrse utilizando soluciones de hardware o software. El registro de rastreo basado en software no requiere hardware de depuración especializado y puede utilizarse para registrar rastreos en dispositivos implementados, pero puede tener un impacto en el uso de CPU y RAM. [ 14 ] Un ejemplo de un método de rastreo basado en software utilizado en entornos RTOS es el uso de macros vacías que son invocadas por el sistema operativo en lugares estratégicos del código y pueden implementarse para servir como ganchos .
Fiabilidad
Los sistemas embebidos suelen residir en máquinas diseñadas para funcionar de forma continua durante años sin errores y, en algunos casos, para recuperarse automáticamente si se produce algún fallo. Por lo tanto, el software se desarrolla y prueba con mayor rigor que el de los ordenadores personales, y se evitan componentes mecánicos móviles poco fiables, como unidades de disco, interruptores o botones.
Los problemas de fiabilidad específicos pueden incluir:
- El sistema no puede apagarse de forma segura para su reparación, o bien es demasiado inaccesible para repararlo. Algunos ejemplos son los sistemas espaciales, los cables submarinos, las balizas de navegación, los sistemas de perforación y los automóviles.
- El sistema debe mantenerse en funcionamiento por motivos de seguridad. Una funcionalidad reducida en caso de fallo puede resultar intolerable. A menudo, el operador selecciona sistemas de respaldo. Algunos ejemplos son la navegación aérea, los sistemas de control de reactores, los controles de seguridad de fábricas químicas y las señales ferroviarias.
- El sistema perderá grandes cantidades de dinero cuando se desconecte: centrales telefónicas, controles de fábrica, controles de puentes y ascensores, transferencia de fondos y creación de mercado, ventas y servicios automatizados.
Se utilizan diversas técnicas, a veces combinadas, para recuperarse de errores, tanto fallos de software como fugas de memoria , como errores transitorios en el hardware:
- Temporizador de vigilancia que reinicia el sistema a menos que el software notifique periódicamente a los subsistemas de vigilancia.
- El diseño con una arquitectura de base de computación confiable (TCB) garantiza un entorno de sistema altamente seguro y confiable [ 15 ].
- Un hipervisor diseñado para sistemas embebidos puede proporcionar encapsulación segura para cualquier componente del subsistema, de modo que un componente de software comprometido no pueda interferir con otros subsistemas ni con el software del sistema con privilegios. [ 16 ] Esta encapsulación evita que los fallos se propaguen de un subsistema a otro, mejorando así la fiabilidad. Esto también puede permitir que un subsistema se apague y se reinicie automáticamente al detectar un fallo.
- La programación con conciencia de inmunidad puede ayudar a los ingenieros a producir código de sistemas embebidos más fiable. [ 17 ] [ 18 ] Las directrices y reglas de codificación como MISRA C/C++ tienen como objetivo ayudar a los desarrolladores a producir firmware fiable y portable de varias maneras diferentes: normalmente aconsejando o exigiendo prácticas de codificación que puedan provocar errores en tiempo de ejecución (fugas de memoria, usos de punteros no válidos), el uso de comprobaciones en tiempo de ejecución y manejo de excepciones (comprobaciones de rango/cordura, comprobaciones de validez de índices de división por cero y de búfer, casos predeterminados en comprobaciones lógicas), la limitación de bucles, la producción de código legible, bien comentado y bien estructurado, y la evitación de ambigüedades del lenguaje que puedan provocar inconsistencias o efectos secundarios inducidos por el compilador (orden de evaluación de expresiones, recursión, ciertos tipos de macros). Estas reglas a menudo se pueden utilizar junto con comprobadores estáticos de código o comprobación de modelos limitados para fines de verificación funcional, y también ayudan a determinar las propiedades de temporización del código . [ 17 ]
Volumen alto frente a volumen bajo
En sistemas de gran volumen, como los teléfonos móviles , minimizar los costos suele ser la principal consideración de diseño. Los ingenieros generalmente seleccionan hardware que sea lo suficientemente bueno como para implementar las funciones necesarias.
Para sistemas embebidos de bajo volumen o prototipos, los ordenadores de propósito general pueden adaptarse limitando los programas o sustituyendo el sistema operativo por un RTOS (Sistema Operativo en Tiempo Real).
Arquitecturas de software embebido
En 1978, la Asociación Nacional de Fabricantes Eléctricos publicó ICS 3-1978, un estándar para microcontroladores programables, [ 19 ] incluyendo casi cualquier controlador basado en computadora, como computadoras de placa única , controladores numéricos y basados en eventos.
Existen varios tipos diferentes de arquitectura de software de uso común.
Bucle de control simple
En este diseño, el software simplemente tiene un bucle que supervisa los dispositivos de entrada. El bucle llama a subrutinas , cada una de las cuales gestiona una parte del hardware o del software. Por lo tanto, se denomina bucle de control simple o entrada/salida programada.
Sistema controlado por interrupciones
Algunos sistemas embebidos se controlan principalmente mediante interrupciones . Esto significa que las tareas que realiza el sistema se activan por diferentes tipos de eventos; una interrupción podría generarse, por ejemplo, por un temporizador a intervalos predefinidos o por un controlador de puerto serie que recibe datos.
Esta arquitectura se utiliza cuando los manejadores de eventos requieren baja latencia y son cortos y sencillos. Estos sistemas también ejecutan una tarea simple en un bucle principal, pero esta tarea no es muy sensible a retrasos inesperados. En ocasiones, el manejador de interrupciones agrega tareas más largas a una cola. Posteriormente, una vez finalizado el manejador de interrupciones, estas tareas se ejecutan en el bucle principal. Este método acerca el sistema a un núcleo multitarea con procesos discretos.
multitarea cooperativa
La multitarea cooperativa es muy similar al esquema de bucle de control simple, excepto que el bucle está oculto en una API . [ 3 ] [ 1 ] El programador define una serie de tareas, y cada tarea obtiene su propio entorno para ejecutarse. Cuando una tarea está inactiva, llama a una rutina de inactividad, que pasa el control a otra tarea.
Las ventajas y desventajas son similares a las del bucle de control, con la salvedad de que añadir nuevo software es más fácil, simplemente escribiendo una nueva tarea o añadiéndola a la cola.
Multitarea preventiva o multihilo
En este tipo de sistema, un fragmento de código de bajo nivel alterna entre tareas o hilos en función de un temporizador que activa una interrupción. Este es el nivel en el que generalmente se considera que el sistema cuenta con un núcleo operativo. Dependiendo de la funcionalidad requerida, introduce mayor o menor complejidad en la gestión de múltiples tareas que se ejecutan en paralelo.
Dado que cualquier código puede dañar potencialmente los datos de otra tarea (excepto en sistemas que utilizan una unidad de gestión de memoria ), los programas deben diseñarse y probarse cuidadosamente, y el acceso a los datos compartidos debe controlarse mediante alguna estrategia de sincronización, como colas de mensajes , semáforos o un esquema de sincronización sin bloqueo .
Debido a estas complejidades, es común que las organizaciones utilicen un RTOS comercial, lo que permite a los programadores de aplicaciones concentrarse en la funcionalidad del dispositivo en lugar de en los servicios del sistema operativo. Sin embargo, la decisión de incluir un RTOS conlleva sus propios problemas, ya que la selección debe realizarse antes de comenzar el proceso de desarrollo de la aplicación. Este factor de tiempo obliga a los desarrolladores a elegir el sistema operativo integrado para su dispositivo en función de los requisitos actuales, lo que restringe considerablemente las opciones futuras. [ 20 ]
El nivel de complejidad en los sistemas embebidos aumenta continuamente, ya que se requiere que los dispositivos gestionen periféricos y tareas como comunicación serial, USB, TCP/IP, Bluetooth , redes inalámbricas , radio troncal, múltiples canales, datos y voz, gráficos avanzados, múltiples estados, múltiples subprocesos, numerosos estados de espera, etc. Estas tendencias están impulsando la adopción de middleware embebido , además de un sistema operativo en tiempo real (RTOS).
Micronúcleos y exonúcleos
Un microkernel asigna memoria y cambia la CPU a diferentes hilos de ejecución. Los procesos en modo usuario implementan funciones principales como sistemas de archivos, interfaces de red, etc.
Los exokernels se comunican de forma eficiente mediante llamadas a subrutinas normales. El hardware y todo el software del sistema están disponibles para los programadores de aplicaciones, quienes pueden ampliarlos.
núcleos monolíticos
Un núcleo monolítico es un núcleo relativamente grande con capacidades sofisticadas adaptadas a un entorno embebido. Esto proporciona a los programadores un entorno similar al de un sistema operativo de escritorio como Linux o Microsoft Windows , lo que resulta muy productivo para el desarrollo. Sin embargo, requiere muchos más recursos de hardware, suele ser más caro y, debido a su complejidad, puede ser menos predecible y fiable.
Ejemplos comunes de núcleos monolíticos integrados son Linux integrado , VXWorks y Windows CE .
A pesar del aumento del coste del hardware, este tipo de sistema embebido está ganando popularidad, especialmente en los dispositivos embebidos más potentes, como los routers inalámbricos y los sistemas de navegación GPS .
Componentes de software adicionales
Además del sistema operativo principal, muchos sistemas embebidos cuentan con componentes de software de capa superior. Estos componentes incluyen pilas de protocolos de red como CAN , TCP/IP , FTP , HTTP y HTTPS , y capacidades de almacenamiento como FAT y sistemas de gestión de memoria flash. Si el dispositivo embebido dispone de capacidades de audio y vídeo, los controladores y códecs correspondientes estarán presentes en el sistema. En el caso de los núcleos monolíticos, muchas de estas capas de software pueden estar integradas en el núcleo. En la categoría de sistemas operativos en tiempo real (RTOS), la disponibilidad de componentes de software adicionales depende de la oferta comercial.
Arquitecturas específicas de dominio
En el sector de la automoción, AUTOSAR es una arquitectura estándar para software embebido.
Véase también
Notas
- ↑ Para obtener más detalles sobre MicroVGA, consulte este PDF .
Referencias
- 1 2 Michael Barr . "Glosario de sistemas embebidos" . Biblioteca técnica de Neutrino . Consultado el 21 de abril de 2007 .
- ↑ Heath, Steve (2003). Diseño de sistemas embebidos . Serie EDN para ingenieros de diseño (2.ª ed.). Newnes. pág . 2. ISBN 978-0-7506-5546-0Un
sistema embebido es un sistema basado en un microprocesador que está diseñado para controlar una función o un conjunto de funciones.
- 1 2 Michael Barr; Anthony J. Massa (2006). «Introducción» . Programación de sistemas embebidos: con herramientas de desarrollo C y GNU . O'Reilly. págs. 1–2 . ISBN 978-0-596-00983-0.
- ↑ Barr, Michael (1 de agosto de 2009). "Programación para hombres de verdad en C" . Diseño de sistemas embebidos . TechInsights (United Business Media). pág. 2. Recuperado el 23 de diciembre de 2009 .
- ↑ Shirriff, Ken (30 de agosto de 2016). "La sorprendente historia de los primeros microprocesadores" . IEEE Spectrum . 53 (9). Instituto de Ingenieros Eléctricos y Electrónicos : 48–54 . doi : 10.1109/MSPEC.2016.7551353 . S2CID 32003640. Recuperado el 13 de octubre de 2019 .
- ↑ "1971: El microprocesador integra la función de la CPU en un solo chip" . The Silicon Engine . Museo de Historia de la Computación . Consultado el 22 de julio de 2019 .
- ↑ "1962: Los sistemas aeroespaciales son las primeras aplicaciones de los circuitos integrados en las computadoras" . Museo de Historia de la Computación . 2025. Consultado el 13 de marzo de 2025 .
- ↑ "Fundación Frontera Electrónica" . Fundación Frontera Electrónica .
- ↑ Sistemas integrados Soluciones OEM de Dell | Dell Archivado el 27/01/2013 en Wayback Machine . Content.dell.com (04/01/2011). Consultado el 06/02/2013.
- ↑ David Carey (22 de abril de 2008). "Bajo el capó: la guitarra robot incorpora autoafinación" . Embedded Systems Design . Archivado del original el 8 de julio de 2008.
- ↑ Tancreti, Matthew; Sundaram, Vinaitheerthan; Bagchi, Saurabh; Eugster, Patrick (2015). "TARDIS". Actas de la 14.ª Conferencia Internacional sobre Procesamiento de Información en Redes de Sensores . IPSN '15. Nueva York, NY, EE. UU.: ACM. págs. 286–297 . doi : 10.1145/2737095.2737096 . ISBN 9781450334754. S2CID 10120929 .
- ↑ Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha". Actas de la 9.ª Conferencia ACM sobre Sistemas de Sensores en Red Integrados . SenSys '11. Nueva York, NY, EE. UU.: ACM. págs. 288–301 . doi : 10.1145/2070942.2070972 . ISBN 9781450307185. S2CID 14769602 .
- ↑ Morris, Kevin (30 de octubre de 2012). "Tektronix revoluciona el prototipado y la instrumentación integrada eleva las placas a la categoría de emuladores" . Electronic Engineering Journal . Consultado el 30 de octubre de 2012 .
- ^ Kraft, Johan; Muro, Anders; Kienle, Holger (2010), "Grabación de seguimiento para sistemas integrados: lecciones aprendidas de cinco proyectos industriales" , en Barringer, Howard; Falcone, Ylies; Finkbeiner, Bernd; Havelund, Klaus (eds.), Verificación en tiempo de ejecución , vol. 6418, Berlín, Heidelberg: Springer Berlin Heidelberg, págs. 315–329 , doi : 10.1007/978-3-642-16612-9_24 , ISBN 978-3-642-16611-2, consultado el 16 de agosto de 2022
- ↑ Heiser, Gernot (diciembre de 2007). "¿Su sistema es seguro? ¡Demuéstrelo!" (PDF) . ;login: . 2 (6): 35– 8. Archivado (PDF) del original el 29 de noviembre de 2014.
- ↑ Moratelli, C; Johann, S; Neves, M; Hessel, F (2016). «Virtualización integrada para el diseño de aplicaciones IoT seguras» . Actas del 27.º Simposio Internacional sobre Prototipado Rápido de Sistemas: Acortando el camino de la especificación al prototipo . pp. 2–6 . doi : 10.1145/2990299.2990301 . ISBN 9781450345354. S2CID 17466572 . Consultado el 2 de febrero de 2018 .
- 1 2 Short, Michael (marzo de 2008). "Directrices de desarrollo para sistemas embebidos confiables en tiempo real" . Conferencia Internacional IEEE/ACS de 2008 sobre Sistemas y Aplicaciones Informáticas . págs. 1032–1039 . doi : 10.1109/AICCSA.2008.4493674 . ISBN 978-1-4244-1967-8. S2CID 14163138 .
- ↑ Asociación de Confiabilidad de Software de la Industria Automotriz. "MISRA C:2012 Tercera Edición, Primera Revisión" . Consultado el 3 de febrero de 2022 .
- ↑ "Preguntas frecuentes: Controladores programables" (PDF) . Consultado el 10 de enero de 2020 .
- ↑ "Trabajando en múltiples plataformas integradas" (PDF) . Clarinox. Archivado (PDF) del original el 19 de febrero de 2011. Consultado el 17 de agosto de 2010 .
Lecturas adicionales
- John Catsoulis (mayo de 2005). Diseño de hardware embebido, 2.ª edición . O'Reilly. ISBN 0-596-00755-8.
- James M. Conrad; Alexander G. Dean (septiembre de 2011). Sistemas embebidos: una introducción con el microcontrolador Renesas RX62N . Micrium. ISBN 978-1935-7729-96.
- Klaus Elk (agosto de 2016). Desarrollo de software embebido para el Internet de las cosas: fundamentos, tecnologías y mejores prácticas . CreateSpace Independent Publishing Platform. ISBN 978-1534602533.
Enlaces externos
- Curso de Sistemas Embebidos con mbed en YouTube, en curso desde 2015.
- Tendencias en ciberseguridad y sistemas embebidos. Dan Geer, noviembre de 2013.
- Curso de programación de sistemas embebidos modernos en vídeo (YouTube), disponible desde 2013.
- La Semana de los Sistemas Embebidos (ESWEEK) es un evento anual con conferencias, talleres y tutoriales que abarcan todos los aspectos de los sistemas embebidos y el software.
- Taller sobre educación en sistemas embebidos y ciberfísicos en Wayback Machine (archivado el 11/02/2018) , taller que abarca aspectos educativos de los sistemas embebidos.
- Desarrollo de sistemas embebidos: Introducción a las herramientas
- Sistemas embebidos