01 · Punto de partida
Computadoras que no parecen computadoras
Pensá en todo lo que usaste hoy desde que te levantaste: el despertador, la cafetera, el microondas, el semáforo que cruzaste, el molinete del transporte, el auto o la bicicleta eléctrica, el control del aire acondicionado. En cada uno hay un chip que ejecuta un programa. Una casa común tiene decenas de procesadores y, con suerte, una o dos computadoras «de verdad»; un auto moderno supera con facilidad los cien procesadores repartidos en sus módulos de control.
En los cursos anteriores aprendiste a programar un microcontrolador, a leer sensores, a mover actuadores y a hacer que dos dispositivos se comuniquen. Ahora damos el paso que falta: pasar de hacer que algo funcione sobre la mesa a diseñar el software de un producto que se fabrica, se instala y debe seguir andando años después, sin supervisión y con recursos muy ajustados.
Este curso recorre todo lo que rodea al código de un dispositivo así: cómo arranca, cómo reacciona a tiempo, cómo ordena su lógica, cómo cuida su memoria y su batería, cómo se protege de sus propias fallas y cómo se actualiza. Este primer tema arma el mapa conceptual común.
02 · Definición
Definición de sistema embebido
Un sistema embebido (o empotrado, o incrustado) es un sistema de cómputo diseñado para cumplir una función específica y que forma parte de un producto o sistema mayor. El procesador está «embebido» dentro del equipo: el usuario usa un lavarropas, no una computadora que lava.
De esa definición se desprenden cinco rasgos que reaparecen en todo el curso:
- Función dedicada. Hace una tarea, o un conjunto pequeño y fijo de tareas, y el programa se escribe a la medida de esa tarea.
- Interacción con el mundo físico. Lee sensores y gobierna actuadores; su entrada y su salida son magnitudes reales (temperatura, posición, tensión) y no solo archivos o pantallas.
- Restricciones de recursos. Memoria, velocidad, energía, tamaño y costo están limitados por el producto, y casi siempre al límite.
- Exigencias de tiempo. Muchas respuestas tienen un plazo: frenar, abrir una válvula o apagar un motor tarde no es «lento», es incorrecto.
- Autonomía y confiabilidad. Arranca solo, trabaja sin operador y debe recuperarse sola de las fallas.
Notá que la definición habla de la función y no del chip. Un sistema embebido puede usar un microcontrolador de 8 bits o un procesador de varios núcleos con Linux; lo que lo define es su papel dentro de un producto. Por eso una placa de desarrollo sobre tu escritorio es, en sentido estricto, una herramienta de aprendizaje, y se vuelve un sistema embebido cuando queda dentro de un equipo cumpliendo su tarea.
El firmware es el programa que reside de forma permanente en la memoria del dispositivo y lo hace funcionar. Se llama así porque queda «a medio camino» entre el hardware (fijo) y el software (que se cambia con facilidad). En el tema 7 estudiamos qué contiene y cómo se genera.
03 · Contraste
Un sistema embebido no es una PC
Si venís de programar aplicaciones, la manera más rápida de entender el terreno es comparar. Una computadora de propósito general está hecha para correr cualquier programa que el usuario instale; un sistema embebido corre un único programa, que ya viene decidido.
| Aspecto | Computadora de propósito general | Sistema embebido |
|---|---|---|
| Propósito | Muchas tareas, cambiantes | Una tarea fija, conocida de antemano |
| Programas | El usuario instala y cierra aplicaciones | Un solo firmware, grabado de fábrica |
| Sistema operativo | Siempre (Windows, Linux, macOS) | Ninguno, un RTOS pequeño o Linux, según el caso |
| Memoria | Gigabytes de RAM, discos de cientos de GB | Desde unos pocos KB hasta algunos MB |
| Interfaz | Pantalla, teclado y mouse | Botones, LEDs, una pantalla pequeña o ninguna |
| Tiempo | Una respuesta lenta molesta | Una respuesta tardía puede ser una falla |
| Energía | Enchufada, decenas de vatios | Milivatios o microvatios, a veces con batería por años |
| Fallas | El usuario cierra y vuelve a abrir | Nadie cerca: debe recuperarse sola |
| Actualización | Frecuente y asistida por el usuario | Rara y sin supervisión, o nunca |
| Ciclo de vida | Años | Décadas (equipos industriales, automotrices, médicos) |
Cada fila de la tabla se vuelve un tema del curso. Que no haya sistema operativo explica la inicialización del hardware; las exigencias de tiempo, las interrupciones y los temporizadores; la poca memoria, la gestión de memoria; la batería, el consumo energético; que nadie reinicie el equipo, el watchdog; y que se actualice sin supervisión, la actualización segura del firmware.
04 · Estructura básica
El lazo sentir, decidir y actuar
Casi todos los sistemas embebidos, por distintos que sean, hacen lo mismo en un ciclo continuo: sentir el estado del mundo con sensores, decidir qué hacer con un programa y actuar sobre el mundo con actuadores. Como la acción modifica lo que se vuelve a sentir, el ciclo se cierra: es un lazo de control.
Un ejemplo concreto: el termostato de una heladera. El sensor mide la temperatura interior (sentir). El firmware la compara con la temperatura deseada y decide si el compresor debe arrancar o detenerse (decidir). El relé conecta o corta el compresor (actuar). Al enfriarse el interior, el sensor mide otro valor, y el ciclo continúa. El mismo esquema describe un control de crucero, un cargador de batería, una impresora 3D o el piloto automático de un dron.
Aparecen tres componentes más que no cierran el lazo pero lo vuelven útil. La comunicación lo conecta con otros equipos y con el usuario (el tema que cerró el curso anterior). La memoria guarda el programa, las variables de trabajo y la configuración. La alimentación sostiene todo, y define cuánta energía hay para gastar.
05 · Dónde aparece
Dónde viven los sistemas embebidos
Los sistemas embebidos son la mayor parte de los procesadores que se fabrican, y cada sector pone el acento en una exigencia distinta. Conocerlas ayuda a entender por qué una misma técnica sirve en un caso y es un error en otro.
| Sector | Ejemplos | Exigencia dominante |
|---|---|---|
| Electrodomésticos y consumo | Lavarropas, auriculares, control remoto, juguetes | Costo mínimo por unidad, producción de millones |
| Automotriz | Control de motor, ABS, airbag, tablero | Seguridad, plazos estrictos, años de vida útil |
| Industrial | Controladores de motores, PLC, medidores, sensores de planta | Robustez, funcionamiento continuo, larga duración |
| Médico | Bomba de insulina, marcapasos, oxímetro | Seguridad y confiabilidad ante todo; normas y certificación |
| Internet de las cosas | Sensor inalámbrico, medidor inteligente, rastreador | Bajo consumo y conectividad; actualización remota |
| Aeroespacial y defensa | Satélites, aviónica | Fiabilidad extrema, tolerancia a la radiación |
| Comunicaciones | Routers, módems, antenas | Caudal de datos alto y sostenido |
Una misma pregunta de diseño tiene respuestas distintas. En un juguete de pocos dólares, ahorrar un centavo en memoria es una ganancia enorme y un fallo ocasional se tolera. En una bomba de insulina, el costo de una falla es inaceptable y se paga por componentes, diseño y verificación redundantes. El contexto del producto decide cómo se programa.
06 · Cómo se construye
Del chip de centavos al mini Linux
No todos los sistemas embebidos usan el mismo tipo de procesador. Se agrupan en familias según su capacidad, y elegir una buena familia es una de las primeras decisiones de diseño.
| Plataforma | Ejemplo | Memoria de programa | RAM | Reloj | Software típico |
|---|---|---|---|---|---|
| Microcontrolador de 8 bits | ATmega328P (Arduino Uno) | 32 KB | 2 KB | 16 MHz | Bare-metal |
| Microcontrolador de 32 bits | STM32F103 (Cortex-M3) | 64 a 128 KB | 20 KB | 72 MHz | Bare-metal o RTOS |
| Microcontrolador con radio | ESP32 | Flash externa de varios MB | Cerca de 520 KB | Hasta 240 MHz | RTOS (FreeRTOS) |
| Procesador de aplicaciones | Raspberry Pi y similares | Tarjeta o memoria de GB | Cientos de MB a GB | 1 a 2 GHz o más | Linux embebido |
| Referencia: PC de escritorio | — | Disco de cientos de GB | 8 a 64 GB | 3 a 5 GHz | Sistema operativo completo |
Dos comparaciones ayudan a dimensionar. Una PC tiene millones de veces más RAM que un ATmega328P, pero ese pequeño chip basta para manejar una cerradura, un reloj o un controlador de riego, y cuesta una fracción de lo que cuesta una PC. Y la diferencia no es solo de tamaño: un microcontrolador integra en un solo chip el procesador, la memoria y los periféricos (temporizadores, conversores, puertos de comunicación), mientras que un procesador de aplicaciones suele necesitar memoria y almacenamiento externos.
En este curso trabajamos sobre todo con microcontroladores de 32 bits y con sistemas pequeños con RTOS, que son el centro del mercado, aunque casi todo lo que veamos (interrupciones, memoria, estados, bajo consumo, watchdog) se aplica también a los de 8 bits, y gran parte a Linux embebido.
07 · Cambio de forma de pensar
El programa que nunca termina
Una de las primeras diferencias que notás al programar un sistema embebido es que el programa principal no termina. Una aplicación de consola lee datos, calcula, muestra el resultado y sale. Un firmware, en cambio, arranca cuando se enciende el equipo y trabaja hasta que se apaga: si main() retornara, el procesador quedaría sin nada que ejecutar, o saltaría a código cualquiera.
El esquema más simple, que ya usaste en Arduino con setup() y loop(), se llama superloop (bucle infinito):
int main(void) {
hardware_init(); // una sola vez: relojes, pines, periféricos
while (1) { // para siempre
float temp = leer_temperatura(); // sentir
bool encender = decidir(temp); // decidir
escribir_rele(encender); // actuar
}
}
La estructura es la del lazo del apartado anterior: una parte de inicialización que corre una vez y un cuerpo que se repite. Esta forma sencilla alcanza para muchos productos, pero tiene límites que vamos a estudiar: no controla cuándo se ejecuta cada paso, la lectura del sensor puede retrasar la acción, y el procesador no descansa nunca, ni siquiera cuando no hay nada para hacer. Los temas 13 a 23 muestran cómo resolver cada uno con interrupciones, temporizadores y planificación.
Otra consecuencia: no podés suponer que un error se resuelve solo. Mirá este fragmento, que en una PC pasaría desapercibido:
while (1) {
char *mensaje = malloc(32); // reserva memoria...
formatear(mensaje, leer_temperatura());
enviar(mensaje);
// ...pero nunca la libera: en cada vuelta se pierden 32 bytes
}
Con 2 KB de RAM, 32 bytes por vuelta agotan la memoria en menos de un minuto si el lazo corre varias veces por segundo. Una PC con 16 GB tardaría semanas y el sistema operativo la salvaría cerrando el proceso. En un dispositivo así, el equipo se cuelga en la heladera de alguien. Este tipo de error es la razón por la cual el curso dedica un bloque a la memoria y otro a la confiabilidad.
08 · Analogía con programación
Simular el lazo en Python
Para ver el lazo sentir-decidir-actuar funcionando no necesitamos hardware: basta con simular el mundo físico. El programa modela una habitación que se calienta cuando el calefactor está encendido y pierde calor hacia el exterior. Cada segundo avanza la física; cada PERIODO_S segundos corre el firmware, que lee el «sensor», decide con una banda de histéresis (para no conmutar el relé a cada instante) y actúa sobre el calefactor.
Python en tu navegador. Los bloques son editables: cambiá los valores y presioná «Ejecutar Python». La primera vez tarda unos segundos en cargar.
CONSIGNA = 22.0 # temperatura deseada (°C)
HISTERESIS = 0.5 # banda alrededor de la consigna (±°C)
PERIODO_S = 10 # cada cuántos segundos corre el lazo de control
POTENCIA = 0.045 # °C por segundo que sube con el calefactor encendido
PERDIDA = 0.002 # fracción de la diferencia con el exterior que se pierde por segundo
EXTERIOR = 10.0 # temperatura exterior (°C)
DURACION_S = 1800 # 30 minutos
def leer_sensor(temp_real):
return temp_real # en un equipo real: leer el conversor analógico-digital
def decidir(temp, calefactor):
if temp <= CONSIGNA - HISTERESIS:
return True # demasiado frío: encender
if temp >= CONSIGNA + HISTERESIS:
return False # demasiado caliente: apagar
return calefactor # dentro de la banda: no cambiar nada
temp = 18.0 # el mundo físico
calefactor = False # el actuador
conmutaciones = 0
segundos_encendido = 0
ejecuciones = 0
minimo, maximo = 99.0, -99.0
for segundo in range(DURACION_S):
if segundo % PERIODO_S == 0: # el firmware corre cada PERIODO_S
ejecuciones += 1
nuevo = decidir(leer_sensor(temp), calefactor)
if nuevo != calefactor:
conmutaciones += 1
calefactor = nuevo
# física: la habitación se calienta y pierde calor
temp += (POTENCIA if calefactor else 0) - PERDIDA * (temp - EXTERIOR)
segundos_encendido += calefactor
if segundo >= DURACION_S - 600: # últimos 10 minutos
minimo, maximo = min(minimo, temp), max(maximo, temp)
print(f"temperatura final: {temp:.2f} °C")
print(f"últimos 10 min: de {minimo:.2f} a {maximo:.2f} °C")
print(f"veces que corrió el lazo: {ejecuciones}")
print(f"conmutaciones del relé: {conmutaciones}")
print(f"calefactor encendido: {100 * segundos_encendido / DURACION_S:.0f} % del tiempo")
Resultado con los valores iniciales: la temperatura final es 22,64 °C, en los últimos diez minutos oscila entre 21,31 y 22,66 °C, el lazo corre 180 veces, el relé conmuta 31 veces y el calefactor está encendido el 58 % del tiempo. Probá HISTERESIS = 0: el relé conmuta unas 154 veces, porque cada vuelta cruza la consigna. Probá PERIODO_S = 60: se conmuta menos, pero la temperatura se pasa de la banda (entre 20,4 y 23,2 °C). Y con EXTERIOR = -10 la habitación nunca llega a 22 °C: ningún programa puede pedirle al hardware más de lo que da.
El programa deja ver tres compromisos del diseño embebido: una banda de histéresis más estrecha da un control más fino pero desgasta el relé; un período de muestreo más largo ahorra procesador y energía pero reacciona tarde; y el límite físico del actuador acota lo que el firmware puede lograr. Vamos a volver a esas tensiones en cada bloque del curso.
09 · Exploración interactiva
Un termostato embebido, de extremo a extremo
Este laboratorio ejecuta el mismo modelo del código anterior y dibuja la temperatura durante 30 minutos. Elegí la consigna, la histéresis, cada cuántos segundos corre el lazo y la temperatura exterior, y observá qué pasa con la estabilidad, el desgaste del relé y la carga del procesador. La banda amarilla es la zona de histéresis y la línea punteada, la consigna.
Sensor, firmware y calefactor
Elegí los parámetros y presioná «Simular 30 minutos».
Recorrido guiado
- Con los valores iniciales, simulá. La temperatura sube hasta la banda y queda oscilando alrededor de 22 °C. Anotá las conmutaciones y el porcentaje de CPU ocupada: es mínimo, el procesador casi todo el tiempo no hace nada.
- Poné la histéresis en 0 °C. El relé pasa de unas 30 a más de 150 conmutaciones en media hora. Con un relé mecánico de decenas de miles de ciclos de vida, durará pocos meses.
- Con histéresis 0,5 °C, cambiá el período a 60 segundos. Hay menos conmutaciones, pero la temperatura sale de la banda y oscila más de 2,5 °C: el lazo reacciona tarde.
- Probá 1 segundo. La temperatura queda casi clavada dentro de la banda, a costa de ejecutar el lazo 1800 veces. Aun así la CPU se ocupa una fracción mínima del tiempo.
- Con consigna 25 °C y exterior 5 °C, el calefactor trabaja casi siempre; con exterior de -10 °C, nunca llega a la consigna. El hardware limita lo que el firmware puede lograr.
- Subí la histéresis a 2 °C con período de 10 segundos: pocas conmutaciones, pero la temperatura varía varios grados. Compará con la de 0,5 °C y decidí qué importa más en una heladera y qué en un horno.
Desafío: cuánto duerme el procesador
Con un período de 10 segundos, el lazo corre 180 veces en 30 minutos y cada vuelta ocupa 200 µs, es decir 36 ms en total sobre 1.800.000 ms: un 0,002 %. Si el procesador consume 10 mA activo y 5 µA dormido, un diseño que lo deja siempre activo gasta 10 mA, mientras que uno que duerme entre vuelta y vuelta consume en promedio apenas un poco más de 5 µA: unas 2000 veces menos. Con una pila de 1000 mAh pasa de menos de 5 días a varios años (en la práctica, el límite pasa a ser la autodescarga de la pila). De ahí viene el interés de dormir al procesador, que estudiamos en el bloque de consumo.
10 · Método de trabajo
Cómo analizar un sistema embebido
Frente a un producto nuevo, sea uno propio o uno que debas mantener, recorré estas preguntas en orden. Sirven para entenderlo antes de tocar una línea de código:
- ¿Cuál es su función? Escribila en una frase. Si necesita dos, quizá son dos sistemas.
- ¿Qué siente y qué controla? Listá sensores y actuadores, y de qué magnitud física se trata cada uno.
- ¿Qué plazos tiene? Para cada respuesta, ¿cuánto tiempo hay y qué pasa si se pierde?
- ¿Con qué recursos cuenta? Memoria de programa, RAM, velocidad, energía disponible y presupuesto de costo.
- ¿Qué interfaces tiene? Con el usuario y con otros equipos, por qué medios de comunicación.
- ¿Qué entorno soporta? Temperatura, ruido eléctrico, humedad, vibración.
- ¿Qué pasa cuando falla? Cuál es el estado seguro y cómo se recupera sin intervención.
- ¿Cómo se actualiza y se mantiene? Si hay que corregir un error en campo, ¿cómo llega el cambio?
Muchas de estas respuestas se contradicen entre sí (más funciones piden más memoria, más memoria sube el costo, más velocidad sube el consumo) y diseñar es negociar. En el tema 2 formalizamos estas restricciones y en el bloque final las convertimos en requisitos medibles.
11 · Comprensión
Confusiones frecuentes
«Un sistema embebido es una placa Arduino»
Una placa Arduino es una plataforma de aprendizaje y prototipos que contiene un microcontrolador. Un sistema embebido es el equipo en el que un procesador cumple una función; puede construirse con una placa Arduino, con un chip suelto en un circuito propio o con un procesador completamente distinto. La diferencia está en el producto, no en la placa.
«Embebido significa que es pequeño y simple»
Muchos lo son, pero no es parte de la definición. El sistema de control de un avión o de una central eléctrica es embebido y enormemente complejo. Lo que los une es la función dedicada dentro de un producto, no el tamaño.
«Si funciona en la mesa, ya está terminado»
Un prototipo funcionando durante un rato es solo el comienzo. El producto debe sobrevivir a cortes de energía, ruido, temperaturas extremas, entradas inesperadas y años de uso. Gran parte del trabajo profesional está en lo que ocurre cuando las cosas no salen como en la demostración.
«Más potencia de procesador siempre es mejor»
Un procesador más potente consume más, cuesta más y a veces es más difícil de programar con garantías de tiempo. Se elige el que cumple los requisitos con un margen razonable y no más.
«Un sistema embebido no necesita sistema operativo»
Muchos no lo necesitan (bare-metal), pero otros usan un RTOS o Linux embebido cuando manejan varias tareas, redes o pantallas complejas. Es una decisión de diseño, que vemos en el tema 4, sobre arquitectura de software.
«El programa termina y el equipo se apaga»
Un firmware no se «cierra». Si el programa llegara a su final, el procesador seguiría ejecutando lo que haya en la memoria. Por eso todo firmware termina en un bucle infinito o en una instrucción que duerme al procesador hasta el próximo evento.
12 · Práctica guiada
Predecí antes de comprobar
1. ¿Es o no es embebido?
Decidí cuáles de estos son sistemas embebidos y justificá: (a) el controlador de un ascensor; (b) una notebook; (c) un reloj inteligente; (d) un servidor en la nube; (e) la computadora de una máquina de café.
Ver solución
Son embebidos (a), (c) y (e): cada uno ejecuta una función dedicada dentro de un producto. La notebook (b) y el servidor (d) son computadoras de propósito general, que corren los programas que el usuario instale. El reloj inteligente es un caso límite porque admite aplicaciones, pero sigue siendo parte de un producto con recursos limitados.
2. Sentir, decidir y actuar
Para un riego automático que riega cuando la tierra está seca, indicá el sensor, la decisión y el actuador.
Ver solución
Sentir: un sensor de humedad del suelo (analógico o capacitivo). Decidir: si la humedad baja de un umbral y no llovió, regar un tiempo dado, con un mínimo de horas entre riegos. Actuar: una electroválvula o una bomba conmutada por un relé o un transistor. El «entorno» que cierra el lazo es la tierra: al regar sube la humedad, y el sensor lo mide.
3. El costo de un chip
Un producto se fabrica en 500.000 unidades. Pasar de un microcontrolador de 1,20 dólares a uno de 0,90 dólares exige reescribir parte del firmware para que entre en menos memoria, con un costo de ingeniería de 40.000 dólares. ¿Conviene?
Ver solución
El ahorro es 0,30 × 500.000 = 150.000 dólares, contra 40.000 de ingeniería: conviene, con una ganancia neta de 110.000. Con una producción de solo 5.000 unidades, el ahorro sería de 1.500 dólares y no convendría. Por eso la cantidad a fabricar cambia por completo la decisión.
4. Un lazo sin histéresis
Un termostato sin histéresis enciende y apaga el compresor cada vez que la temperatura cruza la consigna. ¿Qué problemas trae y cómo se resuelven?
Ver solución
El compresor conmutaría muchas veces por minuto: desgaste mecánico, ruido eléctrico y, en compresores, daño por arranques seguidos. Se resuelve con una banda de histéresis (encender por debajo de consigna − h y apagar por encima de consigna + h) y, a menudo, con un tiempo mínimo entre cambios de estado.
5. Memoria que se agota
Un lazo corre 20 veces por segundo y pierde 16 bytes en cada vuelta. La RAM libre es de 4 KB. ¿Cuánto tarda en agotarse?
Ver solución
Pierde 20 × 16 = 320 bytes por segundo. 4096 / 320 ≈ 12,8 segundos. Un error que en la PC pasaría inadvertido durante días deja inutilizable este dispositivo en un cuarto de minuto. Es un caso extremo, pero con pérdidas más pequeñas el efecto es el mismo, solo que tarda más en aparecer, y por eso resulta más difícil de reproducir.
6. Ordenar prioridades
Ordená de mayor a menor importancia, para el firmware de un marcapasos, estos criterios: (a) bajo costo; (b) confiabilidad; (c) bajo consumo; (d) facilidad de programación.
Ver solución
Un orden razonable es (b) confiabilidad, (c) bajo consumo (la batería debe durar años dentro del cuerpo), (d) facilidad de programación (reduce errores) y por último (a) el costo. En un juguete el orden sería casi el inverso. Esto confirma que el contexto del producto define la forma de programar.
13 · Síntesis
Ideas para recordar
- Un sistema embebido es una computadora dedicada a una función específica dentro de un producto mayor; lo define su papel, no el tamaño ni el chip.
- Se caracteriza por tener una función fija, interactuar con el mundo físico, tener recursos limitados, exigencias de tiempo y funcionar sin supervisión.
- A diferencia de una PC, ejecuta un solo firmware, suele carecer de sistema operativo completo, tiene memoria y energía acotadas y no puede contar con que alguien lo reinicie.
- Casi todos funcionan con el lazo sentir-decidir-actuar: los sensores miden, el firmware decide y los actuadores modifican el entorno, que se vuelve a medir.
- Cada sector impone su exigencia dominante: costo en el consumo masivo, seguridad en lo médico y automotriz, consumo en IoT, robustez en lo industrial.
- Las plataformas van de microcontroladores de 8 bits con 2 KB de RAM a procesadores con Linux y gigabytes; se elige la más pequeña que cumpla los requisitos con margen.
- El programa principal no termina: tras la inicialización queda en un bucle infinito (superloop), y un error mínimo como una pérdida de memoria acaba matando el equipo.
- Diseñar es negociar compromisos: histéresis frente a desgaste, período de muestreo frente a energía y reacción, capacidad frente a costo.
¿Listo para el tema 2?
Antes de avanzar, definí «sistema embebido» con tus palabras, dibujá de memoria el lazo sentir-decidir-actuar de un producto de tu casa y explicá por qué el programa principal de un firmware no termina. Si podés justificar las tres respuestas, tenés la base del curso.
En el próximo tema estudiamos las restricciones y los requisitos: cuánta memoria, velocidad y energía tiene realmente un sistema embebido, qué significan el costo, el tamaño y el tiempo real, y cómo se traducen en decisiones concretas de diseño.