01/06/2021 | Consejos tecnológicos,Desarrollo de software,Sistema embebido,Tecnologías

Sistemas embebidos y sus características | Conceptos fundamentales

Sistemas embebidos y sus características: ¿Cuáles conceptos fundamentales hay que conocer?

El sistema embebido: ¿Qué es exactamente?

Un sistema embebido (también conocido como “empotrado”, “incrustado” o “integrado”) es un sistema de computación diseñado para realizar funciones específicas, y cuyos componentes se encuentran integrados en una placa base (en inglés. “motherboard”). El procesamiento central del sistema se lleva a cabo gracias a un microcontrolador, es decir, un microprocesador que incluye además interfaces de entrada/salida, así como una memoria de tamaño reducido en el mismo chip.

Estos sistemas pueden ser programados directamente en el lenguaje ensamblador del microcontrolador o microprocesador o utilizando otros lenguajes como C o C++ mediante compiladores específicos.

Son diseñados generalmente para su utilización en tareas que impliquen una computación en tiempo real, pero también destacan otros casos como son Arduino y Raspberry Pi, cuyo fin está más orientado al diseño y desarrollo de aplicaciones y prototipos con sistemas embebidos desde entornos gráficos.

Hasta aquí, ya nos hemos cruzado con términos como Microprocesador, Microcontrolador, C/C++, Arduino, Raspberry, o sistemas en tiempo real, conceptos que son indispensables para entender el “mundo” que reside dentro de un sistema embebido. Por eso, hoy vamos a hablar de estos y otros términos para así, conseguir tener un conocimiento más detallado sobre los sistemas embebidos y sus características fundamentales.

¿Qué es un microprocesador o MPU?

Cuando hablamos de microprocesador, debemos tener en cuenta la evolución del término. Inicialmente, el procesador estaba formado por elementos independientes interconectados entre sí mediante buses. Por ejemplo los registros, el oscilador que da la señal de clock, la ALU, todos eran componentes separados. 

Según se fue desarrollando la tecnología y la escala de integración, estos diferentes componentes se fueron fusionando dentro del mismo circuito. Así se pasó de tener un procesador formado por muchos circuitos integrados interconectados, a tener lo que denominamos microprocesador, que incorporaba todos estos elementos en un único circuito integrado. 

A día de hoy, el uso de los términos microprocesador y procesador es prácticamente intercambiable, ya que la gran mayoría de las veces se hace uso de microprocesadores. El procesador constituye el núcleo del computador, denominado también como CPU (Unidad Central de Procesamiento). Dentro del procesador se encuentra la ALU (Unidad Aritmética Lógica), encargada de realizar las operaciones matemáticas, los registros que guardan datos temporalmente, la unidad de control que sincroniza el funcionamiento del resto de componentes, una pequeña memoria ROM donde se guardan las instrucciones que utilizará, y demás componentes.

Es importante mencionar que los microprocesadores no se utilizan de manera aislada. No tienen uso por sí mismos, sino que se integran dentro de otros sistemas que les dan un uso concreto, como por ejemplo los microcontroladores o los SBCs.

¿Qué es un Microcontrolador o MCU?

Podemos entender un microcontrolador como un computador dedicado. Cuando decimos que son computadores dedicados, nos referimos a la capacidad limitada que suelen tener. Son pequeños, con velocidad relativamente baja y un diseño sencillo y ligero.  En nuestro computador de casa tenemos el procesador por un lado, la RAM por otro, etc.  En cambio, un microcontrolador es un único chip en el que se junta un procesador, una memoria RAM, una memoria ROM y otra serie de componentes que serán útiles al programador como conversores ADC y DAC o entrada/salida en diferentes formatos.

Es por ello, que no están pensados para mantener una infraestructura de software titánica. La gran mayoría de veces los microcontroladores se programan directamente, prescindiendo de un sistema operativo integrado. 

Esta capacidad limitada casi obliga a que haya una amplia gama de microcontroladores formados a partir de elementos variados (diferentes tamaños de RAM, diferentes procesadores, diferentes módulos de entrada/salida) según el uso que se le vaya a dar. Que exista esta diversidad nos permite utilizar el microcontrolador que mejor se adapte a las necesidades de nuestro proyecto, y es uno de los motivos por el que son tan populares en los sistemas empotrados.

Development kit

Un kit de desarrollo es un elemento hardware que facilita las pruebas y la programación de otro componente hardware, ya sea un microcontrolador, un microprocesador, una FPGA, u otros. Normalmente son placas con el componente en cuestión que se quiere utilizar junto con varios elementos extra que facilitan la programación y el prototipado. 

Su principal utilidad es servir como escenario de prácticas y aprendizaje a los ingenieros que más tarde tendrán que trabajar con el microcontrolador o microprocesador de una forma parecida. Ejemplos de dev boards son Arduino (basados en microcontrolador), Raspberry Pi (basado en microprocesador), o las placas de desarrollo de FPGAs.

Qué es Arduino y para qué sirve

Arduino es una plataforma de prototipado.

¿Qué significa eso? Para que Arduino sea todo lo que es, cabe tener en cuenta que la compañía realiza varios servicios con el objetivo de facilitar tanto la entrada de principiantes al mundo de la electrónica como el diseño y el prototipado a los profesionales. Arduino como hardware es una placa de desarrollo de microcontroladores, es decir, un microcontrolador integrado en el mismo chip con todos los componentes electrónicos que necesita para funcionar correctamente (resistencias, condensadores, un oscilador de cristal si el micro no lo trae ya, tiras de pines para poder conectarle cosas, etc.). Además, Arduino produce un entorno de desarrollo que nos evita casi todos los problemas a la hora de subir el código a los microcontroladores, que por sí mismos solían tener métodos muy diferentes de «flasheado» y compilación con un proceso largo y tedioso. El entorno de desarrollo Arduino acorta y facilita este proceso, y de ahí la gran popularidad que han ido ganando a lo largo de los años.

Qué es la Raspberry Pi y para qué sirve

Por su parte, una Raspberry Pi se considera un SBC, es decir, un Single-Board Computer. El concepto es muy parecido al de una placa de desarrollo, pero digamos que de características más robustas. Si un Arduino nos ayuda a programar microcontroladores que tendrán sólo un programa cargado (sin sistema operativo), poca memoria, poca velocidad, etc, una Raspberry Pi es un ordenador completo en una sola placa. Tiene un sistema operativo oficial llamado Raspbian, basado en la distribución Debian de Linux, tienen más memoria RAM y almacenamiento. Suele utilizarse para realizar aplicaciones que necesitan más capacidad de cómputo o simplemente precisan tener un sistema operativo que le garantice determinadas librerías o paquetes.

Arduino vs Rasperry Pi

Si no sabes cómo elegir y quieres ver en detalle tanto las ventajas como los puntos débiles de ambos, para ayudaros a elegir, te recomendamos que leas nuestro post sobre Arduino vs Raspberry Pi. Te ayudamos a escoger la mejor opción ofreciéndote unas recomendaciones prácticas de nuestros desarrolladores expertos.

¿Qué es una FPGA?

Las FPGAs son uno de los últimos escalones en la evolución del hardware reconfigurable. Diseñar y probar componentes hardware era un proceso muy lento y muy costoso. No había muchas formas de probar que tu diseño funcionara hasta que no lo imprimías en una placa, y el proceso de impresión es lento y caro, sobre todo para ir probando cambios en el diseño. 

Las FPGAs llegaron para cambiar esto. En esencia son muchos componentes hardware interconectados entre sí (desde puertas lógicas hasta elementos un poco más complejos), pero de manera que las interconexiones son configurables y las eliges tú. Esto te permite escoger los componentes que tú quieras y conectarlos a tu gusto, sin necesidad de imprimir en hardware. Simplemente haces el diseño en un lenguaje concreto (llamado lenguaje de descripción hardware, HDL por sus siglas en inglés), y una herramienta proporcionada por el fabricante de la FPGA convertirá ese lenguaje en conexiones abiertas o cerradas en los miles de componentes internos de la FPGA. El resultado es que dentro de la FPGA se encontrará tu circuito hardware tal cual, y producirá la misma función que produciría si lo hubieras impreso en una placa.  

Esto facilitó en muchos aspectos el proceso de diseño y construcción, porque permitía probar de manera rápida y barata cada cambio en el diseño. Originalmente, las FPGAs se utilizaban para prototipado y diseño, no como producto final (no se utiliza la FPGA en producción), pero a día de hoy sí existen soluciones que incorporan FPGAs en el producto final (FPGAs por ejemplo que emulan el comportamiento de cierto procesador). En la imagen vemos una placa de desarrollo para una FPGA de Digilent. La FPGA propiamente dicha es el pequeño cuadradito negro arriba de las letras que leen “Basys-3” (Basys-3 es el nombre de la placa). El resto de componentes de la placa sirven para poder probar diferentes funcionalidades y añadirle entrada/salida, entre otras cosas.

¿Qué es un Soc? ¿Para qué sirve?

El término SoC (System-On-Chip) es bastante genérico y suele utilizarse más desde una perspectiva de marketing. Un conjunto de elementos que antes estaban separados pero ahora se integran en un único chip puede llamarse SoC. Es habitual encontrarse SoCs formados por una CPU junto con componentes como FPGAs, o SoCs de microcontroladores como el ESP32, etc. Es un término muy amplio que hace referencia a casi cualquier tecnología que se integra dentro de un único chip o placa.

¿Qué es un DSP?

Un DSP es, por sus siglas en inglés, un Procesador de Señal Digital. Es un componente hardware optimizado para tratar con señales digitales. Se utiliza ampliamente allá donde necesitemos tratar audio, video o telecomunicaciones. Su uso está muy extendido, y casi toda la tecnología que usamos diariamente contiene uno o varios chips DSP. Nuestros teléfonos móviles, por ejemplo, los utilizan para procesar el audio de entrada y salida, para las comunicaciones por wifi o por red de datos (4G, 5G), para el GPS, bluetooth, etc.

Sistemas en tiempo real (Real-Time Systems)

RTS viene de sus siglas en inglés: Sistema en Tiempo Real. Los Real-Time Systems son sistemas capaces de mantener medidas de tiempo estrictas y exactas, útiles para todos aquellos entornos en los que el tiempo de reacción sea crítico y la validez de los resultados obtenidos dependa también de si se han cumplido los plazos de tiempo esperados. Por ejemplo, los sistemas de control que tienen casi todos los coches modernos se sustentan en sistemas de tiempo real. El airbag tiene unos marcos de tiempo muy concretos para activarse o deja de ser útil. Igual que la calibración del ABS, los frenos automáticos al detectar una posible colisión, o la corrección del rumbo al detectar una desviación. A todos estos factores hay que reaccionar rápido porque el tiempo de respuesta es crucial para la efectividad del sistema. Por ello se diseñan sistemas en tiempo real, que aseguren respetar y cumplir estas condiciones temporales con exactitud.

¿Qué es Linux embebido?

Linux embebido (embedded Linux) no es más que un tipo de sistema operativo/kernel Linux que ha sido diseñado para ser instalado y utilizado en dispositivos o sistemas empotrados. Aunque utiliza el mismo kernel, Linux Embebido es bastante diferente del sistema operativo estándar. En primer lugar, está específicamente adaptado a los sistemas embebidos y, por lo tanto, tiene un tamaño mucho menor, requiere menos potencia de procesamiento y tiene características mínimas. En consecuencia y en función de los requisitos del sistema embebido subyacente, el núcleo de Linux se modifica y optimiza como una versión de Linux embebido. Una instancia de Linux de este tipo sólo puede ejecutar aplicaciones creadas específicamente para el dispositivo.

Si necesitas más información sobre este tipo de tecnología, te recomendamos que leas nuestro post sobre Linux embebido: qué es, cómo funciona y para qué se usa. 

Desarrolladores de software para sistema embebido

Después de todo lo que hemos visto hasta aquí, es evidente que los sistemas embebidos son parte de nuestra vida diaria y que las posibilidades que ofrecen para todo sector son casi ilimitadas. El desarrollo de software empotrado es algo tan común actualmente que incluso lenguajes de programación no tradicionales del ámbito, como por ejemplo Python y JavaScript, se utilizan en entornos embebidos. ¿Estás buscando desarrolladores C/C++ expertos para el desarrollo de software y sistemas embebidos? ¿Buscas externalizar el desarrollo de software? Acabas de encontrar todo tipo de solución.

Compartir en:

Relacionados