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
o Funcionales
o Temporales
o Coste
o Etc.
¿ Arquitectura de Sistema
¿ Co-diseño HW/SW
o Plataformas de pruebas HW/SW
¿ Simulaciones
¿ Emuladores
¿ FPGAs
o Definición de interfaces HW/SW
o HW drivers
o 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
o Diseño para el re-uso
o Capas de abstracción, HAL, OSAL.
o Código independiente de aplicación
o Código dependiente de aplicación
o Componentes de terceros y cuestiones legales
¿ Diseño para compatibilidad hacia atrás
¿ Diseño escalable
¿ Uso extensivo de tecnicas de programacion defensiva (assert)
o Chequeo de hard/soft deadlines
o Cheque o de problemas con la memoria (overwrites, stack overflows, etc)
¿ Sistemas operativos de tiempo real (RTOS)
o Configuracion
o Threads y prioridades
o Interrupciones
o Timers
o Stacks
o Primitivas de comunicacion
o Aplicaciones multiprocesador
o Utilidades de debug y analisis del rendimiento
o Problemas recurrentes:
¿ Thread preemption
¿ Tiempo de respuesta a interrupciones
¿ Inversion de prioridades
¿ Tipos de Componentes
o HOST SW: drivers, apps, libs
o Firmware: dev, prod, BIST, loader
o Herramientas y scripts
o Interface públicos / privados
Tema 7: Funcionalidades usuales en sistemas embebidos (2h)
¿ Configuración especifica del producto
o Producción
o Remota
¿ SW upgrades
¿ SDK para extender/cambiar funcionalidad
¿ Flash FS
¿ Interfaces
o JTAG
o UART
o SPI
o Consola de debug/operacion
¿ Watchdog
¿ Herramientas de debug
¿ Memoria dinámica
Tema 8: Optimización de SW en Sistemas Embebidos (2h)
¿ Memoria vs Rendimiento
¿ Coste vs Facilidad en el desarrollo
¿ Requisitos HW
¿ Optimización de Memoria
o Compactación de estructuras de datos
o Datos en memorias compartidas
o Asignación de memoria (linker script)
o Reutilización de memoria
o Implementación de subsets de librerías (matemáticas, libc¿)
¿ Optimización de rendimiento
o Aritmética de punto fijo
o Uso de ensamblador.
o Re-escritura de código para uso de HW específico (DSP)
o DMA
Tema 9: Análisis de fallos en Sistemas Embebidos (2h)
¿ Requisitos HW
¿ JTAG
¿ Unit Tests
¿ Logs (serial, ethernet, files¿).
¿ Debug Buffers
¿ CPU Trace buffer
¿ Memory dumps
¿ Análisis de problemas en tiempo. Profiling
¿ Parseo y visualización de datos.
¿ Debug en sistemas multiprocesador
LABORATORIO:
La duración de cada laboratorio será de 1,5h:
Laboratorio 1: Diseño de la arquitectura de un sistema embebido
¿ Requisitos
¿ Arquitectura y codiseño HW/SW
¿ Ventajas y desventajas de las distintas opciones en cuanto a coste, facilidad de desarrollo, rendimiento, etc.
Laboratorio 2: Máquina virtualizada para desarrollo
¿ Virtualizac ión de la plataforma de diseño (Docker)
¿ 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
¿ Herramientas habituales de CI:
¿ Jenkins, Teamcity, Jira Workflow
Tema 7: Obtención y análisis de indicadores clave de rendimiento (KPI)
¿ KPI relacionados con el producto:
¿ Rendimiento
¿ Estabilidad
¿ Repetibilidad
¿ KPI relacionados con el entorno de CI:
¿ Cobertura de requisitos
¿ Tiempo entre detección de defecto y el arreglo
¿ Uso de recursos
¿
LABORATORIO (15h)
Laboratorio 1: Definir requisitos a partir de una descripción breve de un producto.
Laboratorio 2: Definición de pruebas a partir de requisitos. Plan de prueba.
Laboratorio 3: Ejecución manual de un plan de prueba. Pruebas exploratorias.
Laboratorio 4: Automatización de las pruebas definidas.
Laboratorio 5: Identificación y reporte de defectos a partir de los resultados de las pruebas.
Laboratorio 6: Creación de un entorno CI completo.
Laboratorio 7: Definición de KPI a partir de requisitos y resultados de las pruebas.
Sistemas operativos en tiempo real (S3) +
TEORIA (10h)
¿ Conceptos generales de arquitectura de computadores
o La arquitectura (ISA: Instruction Set Architecture)
¿ Diferencias entre CISC y RISC
o La CPU (Unidad Central de Proceso)
¿ Unidad de control
¿ ALU (Unidad Aritmético-Lógica)
¿ Buses
¿ Cache de instrucciones
¿ Pipelining
¿ Registros
o Cores
o Memoria (ROM, RAM)
¿ Memoria caché
o Periféricos de entrada/salida
¿ Interrupciones
o Microcontroladores
¿ Conceptos generales de software
o Lenguajes de programación
¿ Relación entre juego de instrucciones, código objeto y lenguaje ensamblador
o Tipos de archivo ejecutable
o Compiladores
o El linker o enlazador
¿ Linker scripts y scatter files
o Memoria estática y dinámica
¿ El stack y el heap
o El cargador de arranque o bootloader
¿ Tiempo real y conceptos de RTOS
o RTOS vs GPOS
¿ Latency
o RTOS vs ¿bare-metal¿ (¿super loop¿)
o Kernel / Scheduler
¿ preemptive time-slicing
¿ cooperative time-slicing
¿ Tick, Idle task, Ticless idle
o Interrupciones hardware y software
o Tareas e hilos
¿ thread stack
¿ prioridades
o 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
o Procesadores multi-core
¿ SMP (Symetric Multi-Processing)
¿ AMP (Asymmetric Multi-Processing)
o Comunicación entre tareas
¿ Análisis de los RTOS más comúnmente usados
o FreeRTOS
o MicroC/OS-II (uCOS)
o ThreadX
o RTEMS
o Zephyr
o VxWorks
¿ RTOS en FPGAs
o 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.