Enginyeria de programari per a sistemes embeguts (S1)
Tema 1: Introducció als sistemes embeguts (1h)
Conceptes bàsics dels sistemes embeguts. Característiques diferencials
Tipus de sistemes embeguts
Aplicacions dels sistemes embeguts
Seguretat dels sistemes embeguts
Tema 2: Llenguatges de programació per a sistemes embeguts (1h)
Llenguatges de baix nivell per a sistemes embeguts. Assemblador
Llenguatges d'alt nivell per a sistemes embeguts. C i eines de compilació.
Llenguatges de scripting útils
Interfície entre diferents llenguatges de programació
Tema 3: Arquitectures SW/HW per a sistemes embeguts (1h)
CPUs
Memòries
Hosted/Hostless
Flaix/Flashless
SDK i API de clients
EVKs
Tema 4: Desenvolupament de programari per a sistemes embeguts (1h)
Cicle de vida del desenvolupament de programari per a sistemes embeguts
Metodologies agiles de desenvolupament de programari per a sistemes embeguts
Eines de desenvolupament de programari per a sistemes embeguts
Tema 5: Descripció de característiques desitjables del flux de desenvolupament (2h)
Reduccion del Time-to-market
Definició de requisits
o Funcionals
o Temporals
o Cost
o Etc.
Arquitectura de Sistema
Co-disseny HW/SW
o Plataformes de proves HW/SW
Simulacions
Emuladors
FPGAs
o Definició d'interfícies HW/SW
o HW drivers
o Procés de `bringup
Test Driven Development (TDD)
Control de versions (SCM)
Gestió de tasques i errors en projectes (Agile + Jira)
Tests de Sistema
Sistemes d'Integració Contínua
Test benches
Documentació
Tema 6: Disseny de programari per a sistemes embeguts (3h)
SW product line: HW and SW configurations
Arquitectura SW de capes, components i interfícies
o Disseny per al re-use
o Capes d'abstracció, HAL, OSAL.
o Codi independent d'aplicació
o Codi dependent d'aplicació
o Components de tercers i qüestions legals
Disseny per a compatibilitat cap endarrere
Disseny escalable
Ús extensiu de tecnicas de programacion defensiva (assert)
o Revisió mèdica de hard/soft deadlines
o Xec
Virtualizació de la plataforma de disseny (Docker)
Eines de desenvolupament (GNU)
Sistema de control de versions (GIT)
Unit tests (Google Test)
Anàlisi Estàtica de Codi (CppCheck)
Cobertura de testatge (Gcov)
Anàlisi dinàmica de Codi (Valgrind/Electric Fence)

Laboratori 3: Implementació de plataforma SW independent de l'aplicació sobre un simulador de RTOS
Laboratori 4: Implementació d'utilitats per a debug (I)
Laboratori 5: Implementació d'utilitats per a debug (I)
Laboratori 6: Implementació de Mock per a simular un HW especifique
Laboratori 7: Implementació d'una aplicació real estafe exemple sobre la plataforma anterior (I)
Laboratori 8: Implementació d'una aplicació real time exemple sobre la plataforma anterior (II)
Laboratori 9: Debug funcional de l'aplicació
Laboratori 10: Anàlisi de rendiment i ús de memòria
Control de qualitat (QA) en sistemes embeguts (S2)
TEORIA (15h)
Tema 0: Conceptes de validació i assegurament de la qualitat (QA)
Model en V
Requisits
Proves
Depuració i defectes
Conceptes de CI i de #CD (Continuous Integration & Continuous Delivery)
Tema 1: Definició de requisits
Requisits maquinari
Requisits programari
Requisits de sistema
Eines de gestió de requisits
Tema 2: Definició de prova a partir de requisits
Eines existents vs pròpies
Tipus de proves (caixa negra, caixa blanca, funcionals, no funcionals...)
Definició d'indicadors clau de rendiment (KPI) a partir de requisits
Definició de criteris d'acceptació pass/fail
Tema 3: Introducció a la validació de sistemes embeguts
Validació de sistemes embeguts vs sistemes programari:
Disponibilitat de recursos
Temps d'execució
Possibilitat d'automatització
Definició de sistema sota prova
Interacció amb el sistema baix prova
Tema 4: Execució i automatització de proves
Definició de bancs de prova
Proves automàtiques vs manuals: Per què automatitzar
Automatització:
Codificació: Control de canvis
Instrumentació
Execució
Informes
Eines:
Llenguatges de programació per a proves automàtics
Eines per a registrar progrés de proves
Frameworks de prova
Recol·lecció organitzada de dades per a informe de defectes
Tema 5: Defectes
Què és un defecte i com identificar-los
Com reportar un defecte correctament
Eines d'informe i traçabilitat de defectes
Tema 6: CI per a productes embeguts
Què ofereix una eina de CI en la validació de productes embeguts:
Definició de treballs fàcilment repetibles
Distribució dels treballs entre maquinari disponible
Avantatges de tindre un CI automatitzat:
Optimització de temps maquina
Distribució de recursos
Informes de resultats automàtics
Gestió de bancs de prova:
Coexistència entre automatització i ús manual de recursos
Interacció dels components d'un
Sistemes operatius en temps real (S3)
TEORIA (10h)

Conceptes generals d'arquitectura de computadors
o L'arquitectura (ISA: Instruction Set Architecture)
Diferències entre CISC i RISC
o La #CPU (Unitat Central de Procés)
Unitat de control
ALU (Unitat Aritmètic-Lògica)
Busos
Cache d'instruccions
Pipelining
Registres
o Cores
o Memòria (#ROM, #RAM)
Memòria caixet
o Perifèrics d'entrada/eixida
Interrupcions
o Microcontroladors

Conceptes generals de programari
o Llenguatges de programació
Relació entre joc d'instruccions, codi objecte i llenguatge assemblador
o Tipus d'arxiu executable
o Compiladors
o El linker o enlazador
Linker scripts i scatter files
o Memòria estàtica i dinàmica
El stack i el heap
o El carregador d'arrencada o bootloader

Temps real i conceptes de RTOS
o RTOS vs GPOS
Latency
o RTOS vs bare-metall (super loop)
o Kernel / Scheduler
preemptive estafe-slicing
cooperative estafe-slicing
Tick, Aneu-li task, Ticless aneu-li
o Interrupcions maquinari i programari
o Tasques i fils
thread stack
prioritats
o Paral·lelisme i concurrència
Secció Crítica
Semàfors, mutex i operacions atòmiques
Cues de missatges o altres mecanismes
Condition variables
Problemes clàssics
productor/consumidor
condició de carrera
inversió de prioritats
o Processadors multi-core
SMP (Symetric Multi-Processing)
AMP (Asymmetric Multi-Processing)
o Comunicació entre tasques

Anàlisis dels RTOS més comunament usats
o FreeRTOS
o MicroC/US-II (uCOS)
o ThreadX
o RTEMS
o Zephyr
o VxWorks

RTOS en FPGAs
o Processadors softcore. Exemples
Xilinx Microblaze
Tensilica Xtensa
Implementacions RISC-V (La meua-V RV32, NEORV32, FEMTORV32)

LABORATORI (20h)
Projecte d'un xicotet sistema controlat per RTOS:
Control d'un ventilador accionat per motor #DC (PWM) de manera automàtica mitjançant sensor de temperatura i controlable mitjançant comandos per Ethernet.
Projecte industrial en microelectrònica
Els continguts del "Projecte Industrial en Microelectrònica" seran diferents depenent dels objectius concrets del projecte a realitzar. Poden ser objecte de tema d'aquells que siguen propis dels estudis del títol. En particular, es podran projectar tota classe de sistemes i dispositius microelectrónics per quants procediments permeta realitzar l'enginyeria actual. També podrà ser objecte del Projecte Industrial en Microelectrònica els treballs de recerca i desenvolupament, i el modelatge teòric o numèric dels dispositius, circuits o sistemes microelectrónics. Es podran considerar així mateix els estudis relacionats amb els continguts del títol relatius a equips, fàbriques, instal·lacions, serveis o la seua planificació, gestió o explotació.