Ingeniería de software para sistemas embebidos (S1)
Tema 1: Introducción a los sistemas embebidos (1h)
-Conceptos básicos de los sistemas embebidos. Características diferenciales
-Tipos de sistemas embebidos
-Aplicaciones de los sistemas embebidos
-Seguridad de los sistemas embebidos
Tema 2: Lenguajes de programación para sistemas embebidos (1h)
-Lenguajes de bajo nivel para sistemas embebidos. Ensamblador
-Lenguajes de alto nivel para sistemas embebidos. C y herramientas de compilación.
-Lenguajes de scripting útiles
-Interfaz entre diferentes lenguajes de programación
Tema 3: Arquitecturas SW/HW para sistemas embebidos (1h)
-CPUs
-Memorias
-Hosted/Hostless
-Flash/Flashless
-SDK y API de clientes
-EVKs
Tema 4: Desarrollo de software para sistemas embebidos (1h)
-Ciclo de vida del desarrollo de software para sistemas embebidos
-Metodologías agiles de desarrollo de software para sistemas embebidos
-Herramientas de desarrollo de software para sistemas embebidos
Tema 5: Descripción de características deseables del flujo de desarrollo (2h)
-Reduccion del Time-to-market
-Definición de requisitos
-Funcionales
-Temporales
-Coste
-Etc.
-Arquitectura de Sistema
-Co-diseño HW/SW
-Plataformas de pruebas HW/SW
-Simulaciones
-Emuladores
-FPGAs
-Definición de interfaces HW/SW
-HW drivers
-Proceso de bringup
-Test Driven Development (TDD)
-Control de versiones (SCM)
-Gestión de tareas y errores en proyectos (Agile + Jira)
-Tests de Sistema
-Sistemas de Integración Continua
-Test benches
-Documentación
Tema 6: Diseño de software para sistemas embebidos (3h)
-SW product line: HW and SW configurations
-Arquitectura SW de capas, componentes e interfaces
-Diseño para el re-uso
-Capas de abstracción, HAL, OSAL.
-Código independiente de aplicación
-Código dependiente de aplicación
-Componentes de terceros y cuestiones legales
-Diseño para compatibilidad hacia atrás
-Diseño escalable
-Uso extensivo de tecnicas de programacion defensiva (assert)
-Chequeo de hard/soft deadlines
-Cheque
-Herramientas de desarrollo (GNU)
-Sistema de control de versiones (GIT)
-Unit tests (Google Test)
-Análisis Estático de Código (CppCheck)
-Cobertura de testeo (Gcov)
-Análisis dinámico de Código (Valgrind/Electric Fence)

Laboratorio 3: Implementación de plataforma SW independiente de la aplicación sobre un simulador de RTOS
Laboratorio 4: Implementación de utilidades para debug (I)
Laboratorio 5: Implementación de utilidades para debug (I)
Laboratorio 6: Implementación de Mock para simular un HW especifico
Laboratorio 7: Implementación de una aplicación real time ejemplo sobre la plataforma anterior (I)
Laboratorio 8: Implementación de una aplicación real time ejemplo sobre la plataforma anterior (II)
Laboratorio 9: Debug funcional de la aplicación
Laboratorio 10: Análisis de rendimiento y uso de memoria
Control de calidad (QA) en sistemas embebidos (S2)
TEORIA (15h)
Tema 0: Conceptos de validación y aseguramiento de la calidad (QA)
-Modelo en V
-Requisitos
-Pruebas
-Depuración y defectos
-Conceptos de CI y de CD (Continuous Integration & Continuous Delivery)
Tema 1: Definición de requisitos
-Requisitos hardware
-Requisitos software
-Requisitos de sistema
-Herramientas de gestión de requisitos
Tema 2: Definición de prueba a partir de requisitos
-Herramientas existentes vs propias
-Tipos de pruebas (caja negra, caja blanca, funcionales, no funcionales...)
-Definición de indicadores clave de rendimiento (KPI) a partir de requisitos
-Definición de criterios de aceptación pass/fail
Tema 3: Introducción a la validación de sistemas embebidos
-Validación de sistemas embebidos vs sistemas software:
-Disponibilidad de recursos
-Tiempos de ejecución
-Posibilidad de automatización
-Definición de sistema bajo prueba
-Interacción con el sistema bajo prueba
Tema 4: Ejecución y automatización de pruebas
-Definición de bancos de prueba
-Pruebas automáticas vs manuales: Por qué automatizar
-Automatización:
-Codificación: Control de cambios
-Instrumentación
-Ejecución
-Informes
-Herramientas:
-Lenguajes de programación para pruebas automáticos
-Herramientas para registrar progreso de pruebas
-Frameworks de prueba
-Recolección organizada de datos para informe de defectos
Tema 5: Defectos
-Qué es un defecto y cómo identificarlos
-Cómo reportar un defecto correctamente
-Herramientas de informe y trazabilidad de defectos
Tema 6: CI para productos embebidos
-Qué ofrece una herramienta de CI en la validación de productos embebidos:
-Definición de trabajos fácilmente repetibles
-Distribución de los trabajos entre hardware disponible
-Ventajas de tener un CI automatizado:
-Optimización de tiempo maquina
-Distribución de recursos
-Informes de resultados automáticos
-Gestión de bancos de prueba:
-Coexistencia entre automatización y uso manual de recursos
-Interacción de los componentes de un entorno de CI
Sistemas operativos en tiempo real (S3)
TEORIA (10h)

-Conceptos generales de arquitectura de computadores
-La arquitectura (ISA: Instruction Set Architecture)
-Diferencias entre CISC y RISC
-La CPU (Unidad Central de Proceso)
-Unidad de control
-ALU (Unidad Aritmético-Lógica)
-Buses
-Cache de instrucciones
-Pipelining
-Registros
-Cores
-Memoria (ROM, RAM)
-Memoria caché
-Periféricos de entrada/salida
-Interrupciones
-Microcontroladores

-Conceptos generales de software
-Lenguajes de programación
-Relación entre juego de instrucciones, código objeto y lenguaje ensamblador
-Tipos de archivo ejecutable
-Compiladores
-El linker o enlazador
-Linker scripts y scatter files
-Memoria estática y dinámica
-El stack y el heap
-El cargador de arranque o bootloader

-Tiempo real y conceptos de RTOS
-RTOS vs GPOS
-Latency
-RTOS vs ¿bare-metal¿ (¿super loop¿)
-Kernel / Scheduler
-preemptive time-slicing
-cooperative time-slicing
-Tick, Idle task, Ticless idle
-Interrupciones hardware y software
-Tareas e hilos
-thread stack
-prioridades
-Paralelismo y concurrencia
-Sección Crítica
-Semáforos, mutex y operaciones atómicas
-Colas de mensajes o otros mecanismos
-Condition variables
-Problemas clásicos
-productor/consumidor
-condición de carrera
-inversión de prioridades
-Procesadores multi-core
-SMP (Symetric Multi-Processing)
-AMP (Asymmetric Multi-Processing)
-Comunicación entre tareas

-Análisis de los RTOS más comúnmente usados
-FreeRTOS
-MicroC/OS-II (uCOS)
-ThreadX
-RTEMS
-Zephyr
-VxWorks

-RTOS en FPGAs
-Procesadores softcore. Ejemplos
-Xilinx Microblaze
-Tensilica Xtensa
-Implementaciones RISC-V (Mi-V RV32, NEORV32, FEMTORV32)

LABORATORIO (20h)
Proyecto de un pequeño sistema controlado por RTOS:
Control de un ventilador accionado por motor DC (PWM) de forma automática mediante sensor de temperatura y controlable mediante comandos por Ethernet.
Proyecto industrial en microelectrónica
Los contenidos del "Proyecto Industrial en Microelectrónica" serán diferentes dependiendo de los objetivos concretos del proyecto a realizar. Pueden ser objeto de tema de aquellos que sean propios de los estudios del título. En particular, se podrán proyectar toda clase de sistemas y dispositivos microelectrónicos por cuantos procedimientos permita realizar la ingeniería actual. También podrá ser objeto del Proyecto Industrial en Microelectrónica los trabajos de investigación y desarrollo, y el modelado teórico o numérico de los dispositivos, circuitos o sistemas microelectrónicos. Se podrán considerar asimismo los estudios relacionados con los contenidos del título relativos a equipos, fábricas, instalaciones, servicios o su planificación, gestión o explotación.