# 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 ![[Pasted image 20250220110642.png|500]] ![[Pasted image 20250220110558.png|400]] ![[Pasted image 20250220110616.png]] ### Características - Punteros de datos y de pila de distinto tamaño que PC (Program Counter) o IP (Instruction Pointer) porque es Harvard. - Complejidad de mapa de memoria. - Juego de instrucciones limitado. - La pila está en memoria de datos interna y limitada a 256B por ser el SP de 8b. - Instrucciones de acceso memoria-memoria sin pasar por un acc. - Acumuladores accesibles por dir. directo. - Necesario acceder a memoria de código para datos constantes -> `movc`. ### Mapa de memoria ![[Pasted image 20250220114954.png]] Asignación memoria variables: - DATA: 128B bajos en RAM interna - BDATA: memoria direccionable bit - IDATA: 128B direccionamiento indirecto - PDATA: memoria por bancos - XDATA: memoria datos externa - CODE: memoria de código **Ejemplos:** ```C code unsigned char var1; bdata char var2; sbit var2bit2 = var2^2; var2bit2 = 1; ``` ## 3. Cortex M ### Introducción - Arquitectura ARM (Advanced RISC Machines) - Empezó en 1983 de parte de Acorn Computers Ltd. - Originalmente para PCs (arquitectura Von Neumann) - RISC -> instrucciones de 4B. Los más recientes traen un conjunto de instrucciones de 16 bits adicional, llamado **Thumb**. ### Buses #### Tipos de buses - **AHB (Advanced High performance Bus):** memoria, periféricos rápidos... - **APB (Advanced Peripheral Bus):** periféricos generales - **PPB (Private Peripheral Bus):** acceso al debugger e interrupciones ![[Pasted image 20250227115420.png|600]] #### Buses internos - **Buses CORE:** - **Icode bus AHB:** acceso a la memoria de código (ROM, Flash...) alineados de 32 en 32 bits (al usar instrucciones de 16 bits se toman instrucciones de 2 en 2). - **Dcode bus AHB:** acceso a datos almacenados en memoria de código sin alineamiento. - **System bus AHB:** acceso R/W a la zona de memoria SRAM (interna, externa, extendida), periféricos y controladores rápidos (DMA) - **Internal PPB:** debugger, interrupciones, etc ### Mapa de memoria ![[Pasted image 20250227120032.png|500]] ### Registros ### Set de instrucciones ## 4. Manipulación de bits ## 5. Interrupciones