Temario
Objetivos
Aprender a diseñar metodologías para la creación de software en el área de los sistemas embebidos de una forma eficiente y robusta. Analizar y diseñar la lógica de control de aplicaciones industriales, para ello se utilizan las Maquinas de Estados Finitas. Para la implementación del software se realiza en el lenguaje &ldquo,C&rdquo, aplicado a los procesadores digitales de la Familia C2000 de Texas.
Temas a desarrollar
1. Introducción a la Ingeniería del Software en sistemas Embebidos.
* Introducción a los Sistemas Embebidos.
* Crisis del Software.
* Ingeniería del Software. Introducción.
* Necesidades en los Sistemas Embebidos.
* Diseño de programas para Sistemas Embebidos.
* Proyectos de Software en los Sistemas Embebidos.
* Modelos de Computación.
o Técnicas de programación en Hardware in the Loop (HIL).
o Lenguaje de modelado Unificado (UML). Introducción.
o Desarrollo basado en Modelos. StateFlow (Simulink).
2. Sistemas embebidos.
* Sistemas en Tiempo Real.
o Clasificación.
o Características.
* Ejemplo de un sistema en Tiempo Real.
* Sistemas Embebidos de propósito general.
* Qué es un sistema empotrado. Diferencia entre microcontroladores y DSPs.
* Compañías más relevantes en los sistemas embebidos. Familia C2000 de Texas.
* Diseño de Sistemas Embebidos.
o Fases de Diseño en sistemas digitales. Especificaciones.
o Diseño del Hardware.
o Diseño del Software.
3. Lenguaje C ANSI para Sistemas embebidos. Base.
* Qué es un lenguaje de programación Clasificación.
* Introducción a lenguaje C Ansi.
o Tipos de Datos: Enteros y Reales.
o Modificadores. Auto, extern, register, static y typedef.
o Casting.
o Operadores Aritméticos, Lógicos y manejo de bits.
o Declaración de funciones.
o Estructuras de control. If, while, for swtich,&hellip,.
4. Lenguaje C ANSI para Sistemas embebidos. Estilo de Programación.
* Objetivo del estilo en la programación.
* Introducción al estilo en la programación con lenguaje C Ansi.
* Dónde aplicar el estilo de programación del código C
* Comentarios en la programación del código C Ansi.
* Estructura de un programa en código C Ansi.
* Estilo en las sentencias del código C Ansi.
* Archivos en el desarrollo del código C Ansi.
* Ejemplo del Estilo de Programa en C-Ansi.
5. Lenguaje C ANSI para Sistemas embebidos. Avanzado.
* Ámbito o alcance (scope) de las variables.
* Duración de las variables en la programación con lenguaje C Ansi. Estáticas y dinámicas.
* Modificadores de las variables en la programación del código C Ansi. Variables externas, register, volatile y const. Ejemplos.
* Variables Tipo Enumerados en código C Ansi. Ejemplos.
* Macros aplicadas al código C Ansi. Ejemplos.
* Preprocesado en el código C Ansi. Ejemplos.
* Optimizar el compilador. Ejemplos.
* Utilización optima de estructuras y funciones. Ejemplos.
* Punteros a variables y a funciones en el código C Ansi. Ejemplos.
* Definición de nuevos datos mediante &ldquo,typedef&rdquo, en el código C Ansi. Ejemplos.
* Ahorro de memoria mediante la instrucción &ldquo,unión&rdquo, en el código C Ansi. Ejemplos.
* Estructura de datos más utilizados. Colas, Pilas y Listas. Ejemplos.
6. Interrupciones y Timers en los Sistemas embebidos.
* Introducción a las subrutinas anidadas.
* Tratamiento de interrupciones y Timers en los sistemas embebidos.
* ¿,Cómo se gestiona una interrupción en los sistemas embebidos?.
* Latencia de una interrupción en los sistemas embebidos.
* Ventajas de las interrupciones en los sistemas embebidos. Ejemplos.
* Manejo de funciones exclusivas para los Timers.
* Ejemplo del manejo de los Timers en un sistema embebido de la familia C2000 de Texas (TMS320F28027).
7. Lenguaje C ANSI para Sistemas embebidos. Objetos.
* Objetivos de la Programación para sistemas embebidos.
* Objetivos de la Programación Orientada a Objetos (POO) para sistemas embebidos.
* Introducción de la Programación Orientada a Objetos para sistemas embebidos. Ejemplo de un la clase de un coche.
* Terminología de la Programación Orientada a Objetos: Abstracción, encapsulamiento, herencia, poliformismo, constructor.
* Resumen comparativo entre la POO y la Procedural.
* Abordar la POO mediante el lenguaje C Ansi. Ejemplos.
* Ejemplos de cómo implementar una Clase de un filtro paso-bajo en el lenguaje C Ansi.
* Diseño de una aplicación de control de unos leds con unos tiempos manejados por un Timer de la CPU mediante la Programación Orientada a Objetos (POO) para sistemas embebidos, en concreto para el TMS320F28027 de la familia C2000 de Texas Instruments.
* Diseño de una aplicación de un sistemas de medidas local mediante la Programación Orientada a Objetos (POO) para sistemas embebidos, en concreto para el TMS320F28027 de la familia C2000 de Texas Instruments.
8. Lenguaje C ANSI para Sistemas embebidos. Optimización.
* Objetivos de la Optimización en la Programación para sistemas embebidos.
* ¿,Cómo escribir mejor el código C Ansi para sistemas embebidos?.
* Técnicas de Optimización manual. Ejemplos.
* Mejoras de la Optimización del código mediante:
o Declaración de variables. Globales y locales
o Manejo de Flags para las condiciones.
o Reutilización del código.
* Recomendaciones en programación en C-Ansi.
* Optimización desde el compilador de C Ansi.
* Evaluación de prestaciones del software sobre la CPU.
o Definiciones: Tiempo de respuesta, tiempo de CPU y productividad.
o Rendimiento de la CPU.
o Comparativa entre dos CPU&rsquo,s.
o Ley de Amdahl.
o Componentes para medir el tiempo de ejecución de un programa sobre una CPU.
* Medidas de prestaciones sobre la CPU: MIPS y MFLOPs.
* Programas para la evaluación de las prestaciones sobre la CPU. Benchmark.
* Medidas Benchmark: Ocupación de espacio y tiempo de ejecución. Ejemplos.
* Como medir nuestra velocidad de nuestro código. Ejemplos.
9. Flujogramas. Representación del código en los Sistemas Embebidos.
* Introducción a las fases de un proyecto Software: visión de los diagramas de flujo.
* Definición de un flujograma o diagrama de flujo. Características principales
* Utilización de los flujogramas o diagrama de flujos.
* Simbología más utilizada (ANSI) en los flujogramas.
* Diseño y Ejemplos de Flujogramas.
* Ejercicio de un diseño de un Flujograma para la lectura de canales analógicos.
* Ejemplo de aplicación de Pseudocodigos.
* Flujo de Datos. Modelo de datos y procesos. Definición y ejemplos.
10. Documentación en el diseño del Software en los Sistemas Embebidos.
* Introducción a la documentación del Software.
* Ventajas de aplicar la documentación del Software.
* Tipos de documentación en el Software en los sistemas embebidos.
* Definición de las Especificaciones funcionales.
* Herramientas de Documentación del Software:
o Proceso de producción de documentos.
o Doxygen (herramienta gratuita). Comandos de documentación.
o Ejemplos de Documentación con el Code Composer Studio y Doxygen.
* Normativas del Software.
11. Máquinas de Estados Finitas aplicadas a los Sistemas Embebidos.
* Introducción a los Sistemas Reactivos.
* Metodología de programación de la Lógica de Control:
o Código Espagueti.
o SuperLazo.
o Plano Secundario-Principal.
o Máquinas de Estados Finitas (MEF).
o Planificador de tareas.
* Análisis con ejemplos, aplicando las metodologías de la lógica de control.
* Ejemplo de la metodología de programación del control de una Lavadora.
* Teoría de Autómatas. Máquinas de Estados (MEF). Elemtos de una MEF.
* Tipos de MEF:
o Máquina de Moore.
o Máquina de Mealy.
* Diseño de una MEF:
o Diagramas de Estados.
o Tabla de transiciones.
* Eventos. Generación y su tratamiento.
* Comparativa entre MEF y Flujogramas.
* Diseño e implementación de una MEF simple mediante el lenguaje C Ansi.
* Ejemplo de un diseño de una MEF de la secuencia de Encendido/Apagado de un sistema electrónico.
* Máquinas de Estado del tipo Detectoras: Definición y Ejemplos.
* Diseño completo de una MEF para el control de un montacargas (de dos plantas).
* Diseño para el control simple de un ascensor (con dos pisos y puertas) mediante una MEF.
* Como hacer una plantilla de código general para la implementación de una MEF . Generación de código.
* Ejemplo completo del diseño de una Maquina de Estado del tipo Detectora manejando el puerto serie de un DSC TMS320F28027.
12. StateCharts. Representación del código en los Sistemas Embebidos.
* Introducción a los StateCharts.
* StateCharts de Harel. Características principales.
* Diseño basado en Modelos (MDD).
* Metodología de los StateCharts.
* Representación de un Estado..
* Sintaxis básica de un StateChart.
* Pseudoestados. Definición.
* Máquinas de Estados Extendidas:
o Pseudoestados.
o Concurrencia.
o Jerarquías.
o Ejemplos de Máquinas de Estados Extendidas.
* ¿,Cómo codificar un Statechart?. Ejemplo.
* Máquinas de Estado Jerárquicas. Ejemplo: Implementación en lenguaje C Ansi.
* Metodología del diseño de una MEF. Diseño de capas de la MEF:
o Capa General.
o Capa requisitos.
o Capa Diseño.
o Capa Implementación.
o Capa Test o Depuración.
* Ejemplo de un modelado de una aplicación de una MEF. Control de Velocidad Crucero en un coche. Análisis y diseño.
* Conclusiones de los StateCharts.
* Herramientas de apoyo para el diseño de las MEF:
o StateFlow (Simulink).
o VisualState.
13. StateFlow MATLAB.
* Introducción a los StateFlow.
* Características principales del StateFlow.
* Elementos que componen el StateFlow.
* Ejemplo de diagramas de estados con StateFlow.
* Ejercicio de un control de temperatura mediante StateFlow.
* Aplicar tablas de verdad en la lógica de control mediante el StateFlow.
* Generación de informe de un modelo mediante el StateFlow.
* Ejercicio de Modelar la lógica de control de un reconocedor para una secuencia determinada mediante StateFlow.
* Ejemplo completo del diseño de la lógica de control y simulación de un inversor monofasico de conexión a red a partir de energía solar fotovoltaica,
o Procedimiento para el diseño.
o Definición de Estados de control
o Control Antiislanding.
o Control del bus de continua.
o Control de errores de Hardware y Software.
o Diseño maquina de estados del inversor.
* Cómo codificar un Statechart. Ejemplo.
* Máquinas de Estado Jerárquicas. Ejemplo: Implementación en lenguaje C Ansi.
14. Sistemas Operativos en los Sistemas Embebidos (I).
* Introducción a los procesos (threads) dentro del entorno de los sistemas embebidos.
* Procesos y concurrencia.
* Análisis de la problemática de añadir funciones a un programa. Bajo sistemas embebidos.
* Comunicación y sincronización de procesos o tareas.
* Recursos compartidos. Exclusión Mutua.
* Introducción a los sistemas operativos para sistemas embebidos.
* Diseño básico con Sistemas Operativos en Tiempo Real (RTOS).
* Tareas. Definición y criterios de selección.
* Servicio Básicos de los RTOS.
* Planificador de tareas (scheduling). Tipos existentes:
o Cooperativos o No expropiativos.
o Expropiativos.
* Introducción a la programación dirigida por eventos. Ejemplos.
* Planificador Round-Robin. Características.
* Ejemplo e implementación en lenguaje C ANSI.
* Planificador Round-Robin con Interrupciones. Ejemplos.
* Ejemplo de un Puente (bridge) de comunicaciones mediante el planificador Round-Robin.
* Comparativa de Round Robin Secuencial & Interrupciones.
15. Sistemas Operativos en los Sistemas Embebidos (II).
* Kernel. Algoritmo planificador de Tareas. Conceptos
* Como implementar Algoritmo: Planificador de Tareas en un sistema embebido
o Análisis y diseño de Tareas: Sincronas / Asincronas.
o Planificador de tareas secuenciales.
o Flujogramas del planificador.
o Implementación de un planificador de tareas bajo un sistema embebido TMS320F28027 mediante lenguaje C ANSI.
* Implementación de una aplicación de control digital de temperatura en un aula, realizando el diseño para la codificación de un planificador de tareas.
* Diseñar un micro-Kernel, para un sistema embebido de la familia C2000 de Texas Instruments.
* ProtoThreads. ¿,Qué son
* ProtoThreads. LIMITACIONES.
* ProtoThreads. ¿,En que se basan
* Ejemplo-ProtoThreads para un sistema embebido de la familia C2000 de Texas Instruments.
* Sistemas Operativos en Tiempo Real (RTOS). Conceptos avanzados.
o Tareas Concurrentes (Multitarea).
o Cambio de contexto de las tareas.
o Implementación de un sencillo RTOS.
* Características de los Sistemas Operativos en Tiempo Real (RTOS).
* Comparativa de Round Robin y RTOS.
* Selección de la arquitectura de los RTOS.
* Comparativa de las arquitectura de los RTOS.
* Sistemas Operativos en Tiempo Real (RTOS) Comerciales:
o FreeRTOS.
o Contiki.
o TinyOS.
o QNX.
o RTEMS.
o SYS_BIOS.
16. Depuración del Software en los Sistemas Embebidos.
* Cómo abordar un proyecto de un producto Software
* Conceptos básicos de la Depuración.
* Qué Depurar o Testear
o Test funcional.
o Test de cobertura
* Problemas al realizar la Depuración en los Sistemas Embebidos.
* Métodos básicos de Depuración en los Sistemas Embebidos.
* Cuándo terminar la Depuración o Testeo
* Técnicas de depuración en los sistemas embebidos:
o &ldquo,Software-in-the-loop&rdquo, (SiL).
o &ldquo,Hardware-in-the-loop&rdquo, (HiL).
o &ldquo,System test&rdquo, (ST).
* Diseño basado en Modelos (MBD) con Matlab-Simulink.
* Técnica del &ldquo,Real Time Algorithm in the Loop&rdquo, (RTAIL).
* Ejemplo de diseño e implementación de un filtro digital mediante la técnica RTAIL.
17. Gestión de los proyectos en los Sistemas Embebidos.
* Introducción al procedimiento para la creación de un software en producción.
* El documento de especificaciones.
* El documento de diseño.
* El documento del código.
* Utilización de plantillas documentales.
Laboratorios prácticos:
1. Unidad-3: Lenguaje C-Ansi. Base:
2. Unidad-4: Lenguaje C-Ansi. Estilo:
3. Unidad-5: Lenguaje C-Ansi. Avanzado:
4. Unidad-6: Interrupciones y Timer:
5. Unidad-7: Lenguaje C-Ansi. Programación Orientada a Objetos:
6. Unidad-8: Lenguaje C-Ansi. Optimización:
7. Unidad-10: Documentación:
8. Unidad-11: Maquinas de estados Finitos:
9. Unidad-13: StateFlow-MATLAB:
10. Unidad-14: Sistemas Operativos para Sistemas Embebidos (RTOS):
11. Unidad-16: Depuración del Software: