Sistema embebido

Sistema informático con una función dedicada

Un sistema integrado en una tarjeta enchufable con procesador, memoria, fuente de alimentación e interfaces externas

Un sistema embebido es un sistema informático especializado (una combinación de un procesador de computadora , memoria de computadora y dispositivos periféricos de entrada/salida ) que tiene una función dedicada dentro de un sistema mecánico o electrónico más grande . [1] [2] Está embebido como parte de un dispositivo completo que a menudo incluye hardware eléctrico o electrónico y partes mecánicas. Debido a que un sistema embebido generalmente controla las operaciones físicas de la máquina en la que está embebido, a menudo tiene restricciones de computación en tiempo real . Los sistemas embebidos controlan muchos dispositivos de uso común. [3] En 2009 [actualizar], se estimó que el noventa y ocho por ciento de todos los microprocesadores fabricados se utilizaron en sistemas embebidos. [4] [ necesita actualización ]

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 ordinarios (que utilizan chips externos para la memoria y circuitos de interfaz periférica), especialmente en sistemas más complejos. En cualquier caso, los procesadores utilizados pueden ser de tipos que van desde los de propósito general hasta los especializados en una determinada clase de cálculos, o incluso diseñados a medida para la aplicación en cuestión. Una clase estándar común de procesadores dedicados es el procesador de señal digital (DSP).

Dado que el sistema integrado está dedicado a tareas específicas, los ingenieros de diseño pueden optimizarlo para reducir el tamaño y el costo del producto y aumentar su confiabilidad y rendimiento. Algunos sistemas integrados se producen en masa, lo que se beneficia de las economías de escala .

Los sistemas integrados 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 astronáutica en naves espaciales . Las grandes instalaciones como fábricas , tuberías y redes eléctricas dependen de múltiples sistemas integrados conectados en red. Generalizados a través de la personalización del software, los sistemas integrados como los controladores lógicos programables con frecuencia comprenden sus unidades funcionales.

Los sistemas integrados varían desde aquellos de baja complejidad, con un solo chip microcontrolador, hasta aquellos de muy alta complejidad con múltiples unidades, periféricos y redes, que pueden residir en racks de equipos o en grandes áreas geográficas conectadas mediante líneas de comunicaciones de larga distancia.

Historia

Fondo

Los orígenes del microprocesador y del microcontrolador se remontan al circuito integrado MOS , que es un chip de circuito integrado fabricado a partir de MOSFET ( transistores de efecto de campo de metal-óxido-semiconductor ) y se desarrolló a principios de la década de 1960. En 1964, los chips MOS habían alcanzado una mayor densidad de transistores y menores costos de fabricación que los chips bipolares . Los chips MOS aumentaron aún más en complejidad a un ritmo predicho por la ley de Moore , lo que llevó a la integración a gran escala (LSI) con cientos de transistores en un solo chip MOS a fines de la década de 1960. La aplicación de chips MOS LSI a la computación fue la base para los primeros microprocesadores, ya que los ingenieros comenzaron a reconocer que un sistema de procesador de computadora completo podría estar contenido en varios chips MOS LSI. [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 compuerta 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 integrados reconocibles como modernos fue el Apollo Guidance Computer , [ cita requerida ] desarrollado alrededor de 1965 por Charles Stark Draper en el Laboratorio de Instrumentación del MIT . Al inicio del proyecto, el Apollo Guidance Computer se consideró el elemento más riesgoso del proyecto Apollo, ya que empleaba los circuitos integrados monolíticos recién desarrollados para reducir el tamaño y el peso del ordenador.

Uno de los primeros sistemas integrados producidos en masa fue la computadora de guía 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 de gran volumen de circuitos integrados.

Desde estas primeras aplicaciones en la década de 1960, los sistemas integrados han bajado de precio y se ha producido un aumento espectacular de la potencia de procesamiento y la funcionalidad. Uno de los primeros microprocesadores, 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 del sistema de entrada y salida y de memoria se habían integrado en el mismo chip que el procesador, formando un microcontrolador. Los microcontroladores encuentran aplicaciones en las que una computadora de uso general sería demasiado costosa. A medida que el costo de los microprocesadores y microcontroladores disminuyó, la prevalencia de los sistemas integrados aumentó.

Un microcontrolador de costo relativamente bajo puede programarse para cumplir la misma función que un gran número de componentes separados. Con los microcontroladores, se hizo posible reemplazar, incluso en productos de consumo, costosos componentes analógicos basados ​​en perillas, como potenciómetros y capacitores variables , por botones de subir/bajar o perillas leídas por un microprocesador. Aunque en este contexto un sistema embebido suele ser más complejo que una solución tradicional, la mayor parte de la complejidad está contenida dentro del propio microcontrolador. Es posible que se necesiten muy pocos componentes adicionales y la mayor parte del esfuerzo de diseño está en el software. La creación de prototipos y pruebas de software pueden ser más rápidas en comparación con el diseño y la construcción de un nuevo circuito que no utilice un procesador embebido.

Aplicaciones

Subconjunto de computadora integrada para máquina de votación electrónica Accupoll [7]

Los sistemas integrados se encuentran comúnmente en aplicaciones de consumo, industriales, automotrices , de 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 celulares en el usuario final . Las redes informáticas utilizan enrutadores y puentes de red dedicados para enrutar los datos.

Los productos 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 , incluyen sistemas integrados para proporcionar flexibilidad, eficiencia y funciones. Los sistemas avanzados de calefacción, ventilación y aire acondicionado (HVAC) utilizan termostatos en red para controlar de forma más precisa y eficiente la temperatura, que puede cambiar según la hora del día y la estación . La automatización del hogar utiliza redes cableadas e inalámbricas que se pueden utilizar para controlar luces, clima, seguridad, audio/video, vigilancia, etc., todos los cuales utilizan dispositivos integrados para detección y control.

Los sistemas de transporte, desde el vuelo hasta los automóviles, utilizan cada vez más sistemas integrados. Los nuevos aviones contienen aviónica avanzada , como sistemas de guía inercial y receptores GPS , que también tienen requisitos de seguridad considerables. Las naves espaciales dependen de sistemas astriónicos para la corrección de la trayectoria. Varios motores eléctricos ( motores de CC sin escobillas , motores de inducción y motores de CC ) utilizan controladores de motor electrónicos . Los automóviles , los vehículos eléctricos y los vehículos híbridos utilizan cada vez más sistemas integrados para maximizar la eficiencia y reducir la contaminación. Otros sistemas de seguridad automotriz que utilizan sistemas integrados 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 a las cuatro ruedas automática .

Los equipos médicos utilizan sistemas integrados para el monitoreo y diversas imágenes médicas ( tomografía por emisión de positrones (PET), tomografía computarizada por emisión de fotón único (SPECT), tomografía computarizada (TC) e imágenes por resonancia magnética (IRM) para inspecciones internas no invasivas. Los sistemas integrados dentro de los equipos médicos a menudo funcionan con computadoras industriales. [8]

Los sistemas integrados se utilizan para sistemas críticos de seguridad en las industrias aeroespacial y de defensa. A menos que estén conectados a redes cableadas o inalámbricas a través de un chip celular 3G u otros métodos para fines de monitoreo y control de IoT, estos sistemas pueden aislarse de la piratería y, por lo tanto, ser más seguros. [ cita requerida ] Para la seguridad contra incendios, los sistemas pueden diseñarse para que tengan una mayor capacidad de soportar temperaturas más altas y continuar funcionando. En lo que respecta a la seguridad, los sistemas integrados pueden ser autosuficientes y ser capaces de lidiar con sistemas eléctricos y de comunicación cortados.

Los dispositivos inalámbricos en miniatura llamados motes son sensores inalámbricos en red. Las redes de sensores inalámbricos hacen uso de la miniaturización que es posible gracias al diseño avanzado de circuitos integrados (CI) para acoplar subsistemas inalámbricos completos a sensores sofisticados, lo que permite a las personas y a las empresas medir una gran cantidad de cosas en el mundo físico y actuar en función de esta información a través de sistemas de control y monitoreo. Estos motes son completamente autónomos y normalmente funcionan con una fuente de batería durante años antes de que sea necesario cambiarlas o cargarlas.

Características

Los sistemas integrados están diseñados para realizar una tarea específica, a diferencia de los ordenadores de uso general diseñados para múltiples tareas. Algunos tienen limitaciones 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 los costos.

Los sistemas integrados no siempre son dispositivos independientes. Muchos de ellos son una pequeña parte de un dispositivo más grande que cumple una función más general. Por ejemplo, la guitarra robótica Gibson cuenta con un sistema integrado para afinar las cuerdas, pero el propósito general de la guitarra robótica es reproducir música. [9] De manera similar, un sistema integrado en un automóvil cumple una función específica como subsistema del propio automóvil.

Computadoras modulares eSOM270 y eSOM300 de e-con Systems

Las instrucciones de los programas escritos para sistemas embebidos se denominan firmware y se almacenan en memorias de solo lectura o chips de memoria flash . Se ejecutan con recursos de hardware informáticos limitados: poca memoria, teclado o pantalla pequeños o inexistentes.

Interfaces de usuario

Interfaz de usuario de texto del sistema integrado que utiliza MicroVGA [nb 1]

Los sistemas integrados varían desde aquellos que no tienen interfaz de usuario , en sistemas dedicados a una tarea, hasta los que tienen interfaces gráficas de usuario complejas que se parecen a los sistemas operativos de escritorio de las computadoras modernas. Los dispositivos integrados simples 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 brindan flexibilidad al mismo tiempo que 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 de forma remota con la ayuda de una conexión en serie (por ejemplo, RS-232 ) o de red (por ejemplo, Ethernet ). Este enfoque amplía las capacidades del sistema integrado, 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 completa en el PC. Un buen ejemplo de esto es la combinación de un servidor HTTP integrado que se ejecuta en un dispositivo integrado (como una cámara IP o un enrutador de red ). La interfaz de usuario se muestra en un navegador web en un PC conectado al dispositivo.

Procesadores en sistemas integrados

Entre las propiedades de los ordenadores integrados típicos, en comparación con sus homólogos de uso general, se encuentran el bajo consumo de energía, el tamaño pequeño, los amplios rangos de operación y el bajo costo por unidad. Todo esto se logra a expensas de recursos de procesamiento limitados.

Se han desarrollado numerosos microcontroladores para su uso en sistemas integrados. Los microprocesadores de uso general también se utilizan en sistemas integrados, pero generalmente requieren más circuitos de soporte que los microcontroladores.

Placas de ordenador listas para usar

PC/104 y PC/104+ son ejemplos de estándares para placas de computadora listas para usar destinadas a sistemas integrados y reforzados pequeños y de bajo volumen. En su mayoría, se basan en x86 y, a menudo, son físicamente pequeños en comparación con un PC estándar, aunque siguen siendo bastante grandes en comparación con la mayoría de los sistemas integrados simples (8/16 bits). Pueden utilizar DOS , FreeBSD , Linux , NetBSD , OpenHarmony o un sistema operativo en tiempo real integrado (RTOS) como MicroC/OS-II , QNX o VxWorks .

En ciertas aplicaciones, donde el tamaño pequeño o la eficiencia energética no son preocupaciones principales, los componentes utilizados pueden ser compatibles con los utilizados en computadoras personales x86 de uso general. Las placas como la gama VIA EPIA ayudan a salvar la brecha al ser compatibles con PC pero altamente integradas, físicamente más pequeñas o tener otros atributos que las hacen atractivas para los ingenieros integrados. La ventaja de este enfoque es que se pueden utilizar componentes básicos 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 aún se consideran integrados ya que están integrados en dispositivos más grandes y cumplen una sola función. Ejemplos de dispositivos que pueden adoptar este enfoque son los cajeros automáticos (ATM) y las máquinas de juegos , que contienen código específico para la aplicación.

Sin embargo, la mayoría de las placas de sistemas embebidos ya preparadas no están centradas en el PC y no utilizan los buses ISA o PCI . Cuando se trata de un procesador de sistema en un chip , puede resultar poco beneficioso tener un bus estandarizado que conecte componentes discretos, y el entorno para las herramientas de hardware y software puede ser muy diferente.

Un estilo de diseño común utiliza un módulo de sistema pequeño, quizás del tamaño de una tarjeta de presentación, que contiene chips BGA de alta densidad, como un procesador de sistema en un chip basado en ARM y periféricos, memoria flash externa para almacenamiento y DRAM para memoria de tiempo de ejecución. El proveedor del módulo generalmente proporcionará software de arranque y se asegurará de que haya una selección de sistemas operativos, que generalmente incluyen Linux y algunas opciones en tiempo real. Estos módulos pueden fabricarse en grandes volúmenes, por organizaciones familiarizadas con sus problemas de prueba especializados, y combinarse con placas base personalizadas de mucho menor volumen con periféricos externos específicos de la aplicación. Ejemplos destacados de este enfoque incluyen Arduino y Raspberry Pi .

Soluciones SoC ASIC y FPGA

Un sistema en un chip (SoC) contiene un sistema completo, que consta de múltiples procesadores, multiplicadores, cachés, incluso diferentes tipos de memoria y, comúnmente, varios periféricos como interfaces para comunicación por cable o inalámbrica en un solo chip. A menudo, las unidades de procesamiento gráfico (GPU) y los DSP se incluyen en dichos chips. Los SoC se pueden implementar como un circuito integrado específico de la aplicación (ASIC) o utilizando una matriz de puertas programables en campo (FPGA) que, por lo general, se puede reconfigurar.

Las implementaciones de ASIC son comunes para sistemas integrados de gran volumen, como teléfonos móviles y teléfonos inteligentes . Las implementaciones de ASIC o FPGA se pueden utilizar para sistemas integrados de volumen no tan alto con necesidades especiales en cuanto a rendimiento de procesamiento de señales, interfaces y confiabilidad, como en aviónica.

Periféricos

Un primer plano del chip SMSC LAN91C110 (SMSC 91x), un chip Ethernet integrado

Los sistemas integrados se comunican con el mundo exterior a través de periféricos , como:

Herramientas

Al igual que con otros programas, los diseñadores de sistemas integrados utilizan compiladores , ensambladores y depuradores para desarrollar software de sistemas integrados. Sin embargo, también pueden utilizar herramientas más específicas:

  • En depuradores o emuladores de circuitos (ver siguiente sección).
  • Utilidades para agregar una suma de comprobación o CRC a un programa, para que el sistema integrado pueda verificar si el programa es válido.
  • Para los sistemas que utilizan procesamiento de señales digitales , los desarrolladores pueden utilizar un cuaderno de cálculo para simular las matemáticas.
  • Las herramientas de simulación y modelado 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 de software como un diagrama de estado o diagrama de flujo utilizando bloques de biblioteca configurables. La simulación se lleva a cabo para seleccionar los componentes correctos realizando compensaciones de potencia frente a rendimiento, análisis de confiabilidad y análisis de cuellos de botella. Los informes típicos que ayudan a un diseñador a tomar decisiones de arquitectura incluyen latencia de la aplicación, rendimiento del dispositivo, utilización del dispositivo, consumo de energía de todo el sistema, así como consumo de energía a nivel de dispositivo.
  • Una herramienta de desarrollo basada en modelos crea y simula diagramas de flujo de datos gráficos y diagramas de estados UML de componentes como filtros digitales, controladores de motores, decodificación de protocolos de comunicación y tareas de múltiples velocidades.
  • Se pueden utilizar compiladores y enlazadores personalizados para optimizar hardware especializado.
  • Un sistema integrado puede tener su propio lenguaje especial o herramienta de diseño, o agregar mejoras a un lenguaje existente como Forth o Basic .
  • Otra alternativa es agregar un RTOS o sistema operativo integrado
  • Herramientas de modelado y generación de código a menudo basadas en máquinas de estados

Las herramientas de software pueden provenir de varias fuentes:

  • Empresas de software que se especializan en el mercado integrado
  • Portado desde las herramientas de desarrollo de software GNU
  • A veces, se pueden utilizar herramientas de desarrollo para una computadora personal si el procesador incorporado es un pariente cercano de un procesador de PC común.

A medida que aumenta la complejidad de los sistemas integrados, las herramientas y los sistemas operativos de nivel superior migran a las máquinas donde tiene sentido hacerlo. Por ejemplo, los teléfonos móviles , los asistentes digitales personales y otras computadoras de consumo a menudo necesitan un software importante que es comprado o proporcionado por una persona distinta al fabricante de los dispositivos electrónicos. En estos sistemas, se requiere un entorno de programación abierto como Linux , NetBSD , FreeBSD , OSGi o Embedded Java para que el proveedor de software externo pueda vender a un mercado grande.

Depuración

La depuración integrada se puede realizar en diferentes niveles, según las funciones disponibles. Entre las consideraciones se incluyen: si ralentiza la aplicación principal, qué tan cerca está el sistema o la aplicación depurados del sistema o la aplicación reales, qué tan expresivos son los desencadenantes que se pueden configurar para la depuración (por ejemplo, inspeccionar la memoria cuando se alcanza un valor de contador de programa en particular ) y qué se puede inspeccionar en el proceso de depuración (por ejemplo, solo memoria, o memoria y registros, etc.).

Desde los sistemas y técnicas de depuración más simples hasta los más sofisticados se pueden agrupar aproximadamente en las siguientes áreas:

  • Depuración residente interactiva, utilizando el shell simple proporcionado por el sistema operativo integrado (por ejemplo, Forth y Basic)
  • Los depuradores que solo utilizan 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. [10]
  • Depuración externa mediante registro o salida de puerto serie para rastrear la operación utilizando un monitor en flash o un servidor de depuración como Remedy Debugger que incluso funciona para sistemas multinúcleo heterogéneos .
  • Un depurador en circuito (ICD), un dispositivo de hardware que se conecta al microprocesador a través de una interfaz JTAG o Nexus . [11] Esto permite que el funcionamiento del microprocesador se controle externamente, pero normalmente está restringido a capacidades de depuración específicas en el procesador.
  • Un emulador en circuito (ICE) reemplaza el microprocesador con un equivalente simulado, proporcionando control total sobre todos los aspectos del microprocesador.
  • Un emulador completo ofrece una simulación de todos los aspectos del hardware, lo que permite controlarlo y modificarlo, y permite la depuración en un PC normal. Las desventajas son el coste y la lentitud de funcionamiento, en algunos casos hasta 100 veces más lento que el sistema final.
  • En el caso de los diseños SoC, el enfoque típico consiste en verificar y depurar el diseño en una placa prototipo FPGA. Se utilizan herramientas como Certus [12] para insertar sondas en la implementación FPGA que hacen que las señales estén disponibles para su observación. Esto se utiliza para depurar interacciones de hardware, firmware y software en múltiples FPGA en una implementación con capacidades similares a las de un analizador lógico.

A menos que se limite a la depuración externa, el programador normalmente puede cargar y ejecutar software a través de las herramientas, ver el código que se ejecuta en el procesador e iniciar o detener su funcionamiento. La vista 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 seguimiento 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 del seguimiento se puede realizar en software, mediante el RTOS o mediante hardware de seguimiento especial. El seguimiento 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 seguimiento en sistemas integrados se puede lograr utilizando soluciones de hardware o software. El registro de seguimiento basado en software no requiere hardware de depuración especializado y se puede utilizar para registrar seguimientos en dispositivos implementados, pero puede tener un impacto en el uso de CPU y RAM. [13] Un ejemplo de un método de seguimiento 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 se pueden implementar para que sirvan como ganchos .

Fiabilidad

Los sistemas integrados suelen estar instalados en máquinas que se espera que funcionen de forma continua durante años sin errores y, en algunos casos, se recuperen por sí solas si se produce un error. Por lo tanto, el software suele desarrollarse y probarse con más cuidado que el de los ordenadores personales y se evitan las piezas mecánicas móviles poco fiables, como unidades de disco, interruptores o botones.

Los problemas específicos de confiabilidad pueden incluir:

  • El sistema no se puede apagar de forma segura para repararlo o es demasiado inaccesible para repararlo. Entre los ejemplos se incluyen 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 razones de seguridad. Una funcionalidad reducida en caso de fallo puede resultar intolerable. A menudo, el operador selecciona sistemas de respaldo. Algunos ejemplos incluyen la navegación de aeronaves, los sistemas de control de reactores, los controles de fábricas químicas críticas para la seguridad y las señales de trenes.
  • El sistema perderá grandes cantidades de dinero cuando se apague: conmutadores telefónicos, 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 en combinación, para recuperarse de errores, tanto errores de software como fugas de memoria , como también errores leves en el hardware:

  • Temporizador de vigilancia que restablece y reinicia el sistema a menos que el software notifique periódicamente a los subsistemas de vigilancia.
  • El diseño con una arquitectura de base informática confiable (TCB) garantiza un entorno de sistema altamente seguro y confiable [14]
  • Un hipervisor diseñado para sistemas integrados puede proporcionar una encapsulación segura para cualquier componente del subsistema, de modo que un componente de software comprometido no pueda interferir con otros subsistemas o con el software del sistema de nivel privilegiado. [15] Esta encapsulación evita que los fallos se propaguen de un subsistema a otro, lo que mejora la fiabilidad. Esto también puede permitir que un subsistema se apague y reinicie automáticamente al detectar un fallo.
  • La programación consciente de la inmunidad puede ayudar a los ingenieros a producir código de sistemas integrados más confiable. [16] [17] Las pautas y reglas de codificación como MISRA C/C++ tienen como objetivo ayudar a los desarrolladores a producir firmware confiable y portátil de varias maneras diferentes: generalmente, aconsejando u ordenando contra prácticas de codificación que pueden conducir a errores en tiempo de ejecución (fugas de memoria, usos de punteros no válidos), uso de controles en tiempo de ejecución y manejo de excepciones (controles de rango/cordura, controles de validez de índice de búfer y división por cero, casos predeterminados en controles lógicos), delimitación de bucles, producción de código legible para humanos, bien comentado y bien estructurado, y evitando ambigüedades del lenguaje que pueden conducir a inconsistencias o efectos secundarios inducidos por el compilador (orden de evaluación de expresiones, recursión, ciertos tipos de macro). Estas reglas a menudo se pueden usar junto con verificadores estáticos de código o verificación de modelo acotado para fines de verificación funcional, y también ayudan a determinar las propiedades de temporización del código . [16]

Volumen alto vs. volumen bajo

En el caso de sistemas de gran volumen, como los teléfonos móviles , la minimización de costes suele ser la consideración principal en el diseño. Los ingenieros suelen seleccionar hardware que sea lo suficientemente bueno para implementar las funciones necesarias.

Para sistemas integrados de bajo volumen o prototipos, se pueden adaptar computadoras de propósito general limitando los programas o reemplazando el sistema operativo con un RTOS.

Arquitecturas de software embebidas

En 1978, la Asociación Nacional de Fabricantes Eléctricos publicó ICS 3-1978, un estándar para microcontroladores programables, [18] que incluye casi todos los controladores basados ​​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 monitorea los dispositivos de entrada. El bucle llama a subrutinas , cada una de las cuales administra una parte del hardware o software. Por eso se le llama bucle de control simple o entrada-salida programada.

Sistema controlado por interrupciones

Algunos sistemas integrados se controlan predominantemente mediante interrupciones . Esto significa que las tareas que realiza el sistema se activan mediante distintos tipos de eventos; una interrupción podría generarse, por ejemplo, mediante un temporizador en un intervalo predefinido o mediante un controlador de puerto serie que recibe datos.

Esta arquitectura se utiliza si los controladores de eventos necesitan una latencia baja y son cortos y simples. Estos sistemas también ejecutan una tarea simple en un bucle principal, pero esta tarea no es muy sensible a demoras inesperadas. A veces, el controlador de interrupciones agregará tareas más largas a una estructura de cola. Más tarde, una vez que el controlador de interrupciones haya terminado, estas tareas son ejecutadas por el bucle principal. Este método acerca al 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 inactiva que pasa el control a otra tarea.

Las ventajas y desventajas son similares a las del bucle de control, excepto que agregar nuevo software es más fácil, simplemente escribiendo una nueva tarea o agregando a la cola.

Multitarea preventiva o multiproceso

En este tipo de sistema, un fragmento de código de bajo nivel cambia entre tareas o subprocesos en función de un temporizador que invoca una interrupción. Este es el nivel en el que generalmente se considera que el sistema tiene un núcleo de sistema operativo. Dependiendo de cuánta funcionalidad se requiera, introduce más o menos complejidades en la gestión de múltiples tareas que se ejecutan conceptualmente en paralelo.

Como cualquier código puede potencialmente dañar los datos de otra tarea (excepto en sistemas que utilizan una unidad de administració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 no bloqueante .

Debido a estas complejidades, es común que las organizaciones utilicen un sistema operativo en tiempo real (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 opció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 momento obliga a los desarrolladores a elegir el sistema operativo integrado para su dispositivo en función de los requisitos actuales y, por lo tanto, restringe en gran medida las opciones futuras. [19]

El nivel de complejidad de los sistemas integrados crece continuamente, ya que se requieren dispositivos para gestionar periféricos y tareas como serial, USB, TCP/IP, Bluetooth , LAN inalámbrica , radio troncal, canales múltiples, datos y voz, gráficos mejorados, estados múltiples, subprocesos múltiples, numerosos estados de espera, etc. Estas tendencias están llevando a la adopción de middleware integrado además de un RTOS.

Micronúcleos y exonúcleos

Un microkernel asigna memoria y conmuta la CPU entre distintos subprocesos de ejecución. Los procesos en modo usuario implementan funciones importantes como sistemas de archivos, interfaces de red, etc.

Los exokernels se comunican de manera eficiente mediante llamadas a subrutinas normales. El hardware y todo el software del sistema están disponibles para los programadores de aplicaciones y pueden ser ampliados por ellos.

Núcleos monolíticos

Un núcleo monolítico es un núcleo relativamente grande con capacidades sofisticadas adaptadas para adaptarse a un entorno integrado. Esto proporciona a los programadores un entorno similar a un sistema operativo de escritorio como Linux o Microsoft Windows y, por lo tanto, es muy productivo para el desarrollo. El inconveniente es que requiere muchos más recursos de hardware, suele ser más caro y, debido a la complejidad de estos núcleos, 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 integrado está aumentando en popularidad, especialmente en los dispositivos integrados más potentes, como enrutadores inalámbricos y sistemas de navegación GPS .

Componentes de software adicionales

Además del sistema operativo central, muchos sistemas integrados tienen componentes de software adicionales 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 integrado tiene capacidades de audio y video, entonces los controladores y códecs apropiados estarán presentes en el sistema. En el caso de los núcleos monolíticos, muchas de estas capas de software pueden estar incluidas en el núcleo. En la categoría 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 integrado.

Véase también

Notas

  1. ^ Para más detalles sobre MicroVGA consulte este PDF.

Referencias

  1. ^ de Michael Barr . "Glosario de sistemas integrados". Biblioteca técnica de Neutrino . Consultado el 21 de abril de 2007 .
  2. ^ Heath, Steve (2003). Diseño de sistemas embebidos . Serie EDN para ingenieros de diseño (2.ª ed.). Newnes. p. 2. ISBN 978-0-7506-5546-0Un sistema integrado es un sistema basado en microprocesador que está diseñado para controlar una función o un rango de funciones.
  3. ^ de Michael Barr; Anthony J. Massa (2006). "Introducción". Programación de sistemas embebidos: con herramientas de desarrollo C y GNU . O'Reilly. pp. 1–2. ISBN 978-0-596-00983-0.
  4. ^ Barr, Michael (1 de agosto de 2009). "Los hombres de verdad programan en C". Diseño de sistemas integrados . TechInsights (United Business Media). pág. 2. Consultado el 23 de diciembre de 2009 .
  5. ^ 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 . Consultado el 13 de octubre de 2019 .
  6. ^ "1971: Microprocessor Integrates CPU Function onto a Single Chip" (1971: Microprocesador integra la función de la CPU en un solo chip). The Silicon Engine (El motor de silicio) . Computer History Museum (Museo de Historia de la Computación) . Consultado el 22 de julio de 2019 .
  7. ^ "Fundación Frontera Electrónica". Fundación Frontera Electrónica .
  8. ^ Soluciones OEM de Dell para sistemas integrados | Dell Archivado el 27 de enero de 2013 en Wayback Machine . Content.dell.com (4 de enero de 2011). Consultado el 6 de febrero de 2013.
  9. ^ David Carey (22 de abril de 2008). "Under the Hood: Robot Guitar incorpora autotuning". Diseño de sistemas integrados . Archivado desde el original el 8 de julio de 2008.
  10. ^ 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.S2CID10120929  .
  11. ^ Tancreti, Matthew; Hossain, Mohammad Sajjad; Bagchi, Saurabh; Raghunathan, Vijay (2011). "Aveksha". Actas de la 9.ª Conferencia de la ACM sobre sistemas de sensores integrados en red . SenSys '11. Nueva York, NY, EE. UU.: ACM. págs. 288–301. doi :10.1145/2070942.2070972. ISBN . 9781450307185. Número de identificación  S2C14769602.
  12. ^ "Tektronix revoluciona la creación de prototipos, la instrumentación integrada eleva las placas al nivel de emulador". Electronic Engineering Journal. 2012-10-30 . Consultado el 2012-10-30 .
  13. ^ Kraft, Johan; Muro, Anders; Kienle, Holger (2010), Barringer, Howard; Falcone, Ylies; Finkbeiner, Bernd; Havelund, Klaus (eds.), "Grabación de seguimiento para sistemas integrados: lecciones aprendidas de cinco proyectos industriales", 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
  14. ^ Heiser, Gernot (diciembre de 2007). "¿Su sistema es seguro? ¡Pruébelo!" (PDF) . ;login: . 2 (6): 35–8. Archivado (PDF) desde el original el 29 de noviembre de 2014.
  15. ^ Moratelli, C; Johann, S; Neves, M; Hessel, F (2016). "Virtualización integrada para el diseño de aplicaciones seguras de IoT". Actas del 27.° Simposio internacional sobre creación rápida de prototipos de sistemas: acortando el camino desde la especificación hasta el prototipo . págs. 2–6. doi :10.1145/2990299.2990301. ISBN . 9781450345354. S2CID  17466572 . Consultado el 2 de febrero de 2018 .
  16. ^ ab Short, Michael (marzo de 2008). "Directrices de desarrollo para sistemas embebidos fiables en tiempo real". Conferencia internacional IEEE/ACS sobre sistemas informáticos y aplicaciones de 2008. págs. 1032–1039. doi :10.1109/AICCSA.2008.4493674. ISBN 978-1-4244-1967-8. Número de identificación  S2C14163138.
  17. ^ Asociación de confiabilidad del software de la industria automotriz. "MISRA C:2012 Tercera edición, primera revisión" . Consultado el 3 de febrero de 2022 .
  18. ^ "Preguntas frecuentes: controladores programables" (PDF) . Consultado el 10 de enero de 2020 .
  19. ^ "Trabajar en múltiples plataformas integradas" (PDF) . clarinox. Archivado (PDF) desde el original el 19 de febrero de 2011 . Consultado el 17 de agosto de 2010 .

Lectura adicional

  • John Catsoulis (mayo de 2005). Diseño de hardware integrado, 2.ª edición . O'Reilly. ISBN 0-596-00755-8.
  • James M. Conrad; Alexander G. Dean (septiembre de 2011). Sistemas integrados: una introducción al uso del microcontrolador Renesas RX62N . Micrium. ISBN 978-1935-7729-96.
  • Klaus Elk (agosto de 2016). Desarrollo de software integrado para la Internet de las cosas: conceptos básicos, tecnologías y mejores prácticas . Plataforma de publicación independiente CreateSpace. ISBN 978-1534602533.
  • Curso de Sistemas Embebidos con mbed YouTube, en curso desde 2015
  • Tendencias en ciberseguridad y sistemas integrados Dan Geer, noviembre de 2013
  • Curso en vídeo sobre programación de sistemas integrados modernos en YouTube, en curso desde 2013
  • Semana de los sistemas integrados (ESWEEK), evento anual con conferencias, talleres y tutoriales que cubren todos los aspectos de los sistemas integrados y el software.
  • Taller sobre educación en sistemas integrados y ciberfísicos en Wayback Machine (archivado el 11 de febrero de 2018), taller que cubre los aspectos educativos de los sistemas integrados
  • Desarrollo de sistemas integrados: una introducción a las herramientas
Obtenido de "https://es.wikipedia.org/w/index.php?title=Sistema_integrado&oldid=1245980598"