# TEMA 1: Introducción y conceptos básicos ## 1. Clasificación Los sistemas de propósito general se pueden diferenciar de los sistemas empotrados, pero no es una clasificación estricta sino más bien un rango o gradiente. ![[Pasted image 20250206105144.png]] - **Sistema tiempo real VS Sistema convencional:** Freno ABS frente a procesador de texto. - **Sistema de uso industrial VS Producto de consumo:** Máquina de empaquetado de patatas fritas frente a consola de videojuegos. - **Sistema dirigido por eventos VS Sistema dirigido por datos:** Freno ABS frente a MP3. - Procesadores digitales de señal (DSP): para procesar flujos de datos. - **Sistema artesanal/prototipo VS Sistema industrializado:** Puerta de garaje autoconstrucción frente a lavadora comercial. ### Dispositivos comunes - PC sobremesa. - Autómatas Programables Industriales (API) o Controladores Lógicos Programables (PLC). - Microcontroladores. - Procesadores Digitales de Señal (DSP). - Lógica programable (FPGAs, PLDs). - Sistemas _Full Custom_. ### Principales diferencias GPC VS Embedded System [EXAMEN] ![[Pasted image 20250206111909.png]] ## 2. Características especiales de los sistemas empotrados ### Memoria - Siempre ejecutan el mismo código: necesitan normalmente más ROM que RAM, el código se encuentra en la ROM y el _stack_ en la RAM, aunque algunos no tienen. - [EXAMEN] Las variables en la ROM son constantes, pero ¿las globales en RAM se inicializan explícitamente? - Si la variable la declaramos e inicializamos a la vez, mientras tengamos el microcontrolador conectado al IDE, es válido. Sin embargo, al funcionar el microcontrolador independientemente, si queremos inicializar una variable global, deberíamos declararla y luego inicializarla dentro del código, ya que no hay intérprete ni nada que la inicialice en tiempo de ejecución. **ACTUALMENTE** se soluciona con un código _startup_ antes del `main` para inicializar este tipo de variables globales. En el código _startup_ también se inicializan punteros de pila. - Se puede usar la palabra reservada `const` para establecer que ese código está en ROM, y en este caso se podría inicializar en la declaración. - No requiere soporte de almacenamiento tipo HD. - Pueden poseer o no protección para acceder a datos/código internos. - Por compatibilidad y limitaciones, uso de bancos de memoria. ### Datos e instrucciones - Preparados para manipulación de bits - El ISA suele ser recortado: instrucciones de salto condicional, instrucciones aritméticas, signo, modos de direccionamiento, registro de estado "pobre"... ### Fallos y robustez - No suelen ser sistemas atendidos, el usuario no es consciente de que es un computador. - Implementan sistemas de tolerancia y recuperación de fallos - Se han ampliado los rangos de funcionamiento en cuanto a temperatura, radiación, niveles de alimentación, etc ### Consumo - Optimizados para bajo consumo - Utilización en aplicaciones móviles modos de bajo consumo (ej: mando a distancia) ### Programación y desarrollo - Difícil de depurar - Siempre ejecutan el mismo software - Los programas no suelen acabar `while(1) {...}` ### Tamaño y precio - En grandes cantidades son muy baratos - Multitud de formatos para satisfacer la industria ## 3. Sistemas tiempo real ![[Pasted image 20250206122521.png]] ### Sistema Tiempo Real Sistema informático en el que la corrección del resultado depende tanto de su validez lógica como del instante en que se produce. ### Computador Empotrado Computador integrado en algún mecanismo físico para implementar un tipo de control de procesos o toma de datos. ### Sistema Empotrado Tiempo Real Sistema informático que ejecuta alguna aplicación de tiempo real y tiene al menos un elemento que sea un computador empotrado.

Variables en C

### Tareas Esencialmente hay dos tipos de tareas: - **Esencial:** presenta restricciones temporales - **Críticas:** SIEMPRE se debe completar dentro del plazo - **Acríticas:** puede completarse fuera de plazo "sin problemas" - **No esencial:** no presenta restricciones temporales Dadas estas definiciones, se pueden clasificar los sistemas de tiempo real en **duros** y **blandos**: - **STR Duro:** al menos posee una tarea crítica - **STR Blando:** todas sus tareas son acríticas ### Técnicas de programación #### 1. Procesamiento secuencial (`while(1)`) ```C int main() { while(1) { TareaA(); TareaB(); TareaC(); TareaI(); // añadida temporización } } ``` #### 2. Foreground/Background ![[Pasted image 20250213110517.png|500]] #### 3. RTOS # TEMA 2: Estructura de los μC ## 1. Conceptos generales ### Familias de μC - Al igual que los GPP, se agrupan en familias. - Suelen poseer un núcleo común, pero hay más diversidad dentro de las familias. - Los fabricantes sacan una gran variedad para cubrir cada necesidad. - Familias históricas 8 bits: Intel 8051, Motorola 68XX, Atmel AVR, etc. - Familias 32 bits: ARM, Freescale 683XX, etc. ### Estructura de memoria - Desde el punto de vista del programador, hay al menos dos tipos de memoria (ROM y RAM). - Si se usa la arquitectura Harvard, las instrucciones para acceder a código o datos pueden ser distintas, y a los registros internos se le pueden asociar punteros de diversos tamaños. ![[Pasted image 20250213120645.png|500]] La más adecuada para μC es la de Harvard ya que los μC suelen tener ROM/Flash para código y memoria de datos. - En un μC puede estar justificado el que haya múltiples elementos con buses de direcciones distintos: - Memoria Programa Interna - Memoria Datos Interna - Memoria Programa Externa - Memoria Datos Externa - Registros E/S - Direccionamiento bit a bit en memoria y periféricos

Nota

Single Chip (Microcontrolador, MCU): RAM y ROM internas

Modo expandido (Microprocesador, MPU): se sacan desde el chip buses de datos, direcciones y líneas de control hacia fuera para RAM y ROM externas

## 2. Intel 8051 ## 3. Cortex M ## 4. Manipulación de bits ## 5. Interrupciones