Sistemas embebidos de tiempo real - Datos compartidos: soluciones 1 Unidad Didáctica 3: Arquitectura de microcontroladores & Interrupciones Sistemas embebidos.

Slides:



Advertisements
Presentaciones similares
Funciones. Programación, Algoritmos y Estructuras de Datos.
Advertisements

FUNCIONES EN C.
INFORMATICA I Funciones CLASE 13.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
ESTRUCTURAS DE SECUENCIA
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
El lenguaje de programación C - Funciones -
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Programación orientada a objetos
INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica.
Semana 5 Subprogramas..
Concurrencia: Exclusión Mútua y Sincronización
Repaso/resumen 1.lectura/escritura y asignación 2.funciones 3.selección de instrucciones (if-else) 4.repetición de instrucciones (while) 5.recursión 6.operadores/instrucciones.
Desarrollador Profesional de Juegos Programación III Unidad II Una clase thread para window.
Computación II Repaso de java Karina Figueroa Mora.
 El acceso concurrente a datos compartidos puede dar pie a inconsistencia de datos  Mantener la consistencia de los datos requiere mecanismos para asegurar.
Tema 9.6: Sincronización de Procesos
1 Algunas ideas básicas en C++ Agustín J. González ELO-329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
© Mark E. Damon - All Rights Reserved Subject 1 Subject 2 Subject 3 Subject 4 Subject 5 Subject 6 $100 $200 $300 $400 $500 Round 2 Final Jeopardy Scores.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
EL TIPO DE DATO LOGICO y constantes.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Unidad Didáctica 4: Estudio de las diferentes arquitecturas de software Sistemas embebidos para tiempo real.
INTRODUCCION A LOS SISTEMAS DE COMPUTO ARQUITECTURA VON NEUMAN Ing. David Gonzalez.
Funciones en lenguaje C 2 Funciones Definición: – Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad.
Control, adquisición y monitoreo con Arduino y Visual Basic .net
Proceso: Una instancia de un programa en ejecución
Organización de computadoras
2.  Diagramas de Estado.
SISTEMAS OPERATIVOS Sección Crítica.
Métodos y parámetros.
Fundamentos de la programación orientada a objetos
Colecciones Carlos Fontela, 2008.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Organización del caché
LÓGICA DE PROGRAMACIÓN
Unidad 3. Introducción a la programación
HISTORIA El lenguaje fue creado por Yukihiro "Matz" Matsumoto, quien empezó a trabajar en Ruby el 24 de febrero de 1993, y lo presentó al público en el.
PICOBLAZE RESUMEN.
Plantillas (Templates)‏
Algunas Características de C++ no presentes en C
PROGRAMACION: Que es un computador: Es un aparato electrónico que tiene el fin de recibir y procesar datos para realización de diversas operaciones..
8. Diseño del Procesador Fundamentos de los Computadores
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Fundamentos de programación
Algunas ideas básicas de C++
PROGRAMACIÓN (2).
SENTENCIAS CONTROL DE FLUJO EN C I.E. Mario Jiménez.
Concurrencia: exclusión mutua y sincronización Capítulo 5.
Algunas Características de C++ no presentes en C
COLAS O LINEA DE ESPERA EN C# SHARP. ¿QUE ES UNA COLA O LINEA DE ESPERA?  Es una estructura de datos que almacena elemento en una lista y permite acceder.
Tema 2 Estructura de un programa en C. IWI Tema 2 Programa en C U n programa en C es una serie de instrucciones en un lenguaje muy especifico (similar.
Informática Ingeniería en Electrónica y Automática Industrial
El procesador Datapath y control.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Algunas Características de C++ no presentes en C
Templates (en español: Pantillas, modelos, patrones)‏
ALGORITMO DE ORDENAMIENTO POR BURBUJA. El método de la burbuja es uno de los mas simples, es tan fácil como comparar todos los elementos de una lista.
Estructura de Sistemas Operativos
Ha llegado el momento de dar una mirada al interior de los Sistemas Operativos. En las siguientes secciones examinaremos cuatro estructuras distintas.
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
Transcripción de la presentación:

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 1 Unidad Didáctica 3: Arquitectura de microcontroladores & Interrupciones Sistemas embebidos para tiempo real

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 2 Índice ● Primera clase – Arquitectura de microcontroladores Comparación AVR vs. MSP430 ● Segunda clase – Fundamentos de las Interrupciones – Problema de datos compartidos – Latencia en las interrupciones ● Tercera clase – Soluciones al problema de los datos compartidos

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 3 Índice ● Repaso: Problema de los datos compartidos ● Alternativas a deshabilitar interrupciones – Lecturas sucesivas – Doble buffer – Cola circular

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 4 Problema de los datos compartidos ● Cuándo está potencialmente presente – Cuando se comparten datos entre ISR y el main ● Por qué se comparten datos – Las ISR deben hacer el trabajo estrictamente necesario para atender el hardware – En el loop principal se hace el resto del trabajo ● Cuándo surge y cuál es el problema – Cuando la ISR se ejecuta en el instante “inesperado” – Se produce inconsistencia de datos

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 5 static int iTemperatures[2]; __interrupt void vReadTemperatures(void) { iTemperatures[0] = !! read in value from hardware; iTemperatures[1] = !! read in value from hardware; } int iTemp0; int iTemp1; void main (void) { while(TRUE) { iTemp0 = iTemperatures[0]; iTemp1 = iTemperatures[1]; if (iTemp0 != iTemp1) !! Set off howling alarm; } control.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 6 static int iTemperatures[2]; __interrupt void vReadTemperatures(void) { iTemperatures[0] = !! read in value from hardware; iTemperatures[1] = !! read in value from hardware; } int iTemp0; int iTemp1; void main (void) { while(TRUE) { disable();// deshabilita interrupciones mientras usa el arreglo iTemp0 = iTemperatures[0]; iTemp1 = iTemperatures[1]; enable(); if (iTemp0 != iTemp1) !! Set off howling alarm; } solucion.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 7 #include static int iTemperatures[2]; __interrupt void vReadTemperatures(void) { iTemperatures[0] = !! read in value from hardware; iTemperatures[1] = !! read in value from hardware; } int iTemp0; int iTemp1; void control_temperature (void) { bool fInterruptStateOld; fInterruptStateOld = disable(); iTemp0 = iTemperatures[0]; iTemp1 = iTemperatures[1]; if (fInterruptStateOld) { enable(); } if (iTemp0 != iTemp1) !! Set off howling alarm; } solucion.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 8 static int iSeconds, iMinutes, iHours; __interrupt void vUpdateTime(void) { // Hacer lo que haya que hacer con el hardware ++iSeconds; if (iSeconds >= 60) { iSeconds = 0; ++iMinutes; if (iMinutes >= 60) { iMinutes = 0; ++iHours; if (iHours >= 24) iHours = 0; } long iSecondsSinceMidnight(void) { return ( (((iHours*60) + iMinutes) *60) + iSeconds ); } timer.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 9 #include static int iSeconds, iMinutes, iHours; __interrupt void vUpdateTime(void) { // Hacer lo que haya que hace con el hardware ++iSeconds; if (iSeconds >= 60) { iSeconds = 0; ++iMinutes; if (iMinutes >= 60) { iMinutes = 0; ++iHours; if (iHours >= 24) iHours = 0; } long lSecondsSinceMidnight(void) { long lReturnVal; bool fInterruptStateOld; fInterruptStateOld = disable(); lReturnVal = (((iHours*60)+iMinutes)*60)+iSeconds; if (fInterruptStateOld) enable(); return lReturnVal; } timer.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 10 static long int lSecondsToday; void interrupt vUpdateTime (void) {... ++lSecondsToday; if (lSecondsToday == 60 * 60 * 24) lSecondsToday = 0L;... } long lSecondsSinceMidnight (void) { return lSecondsToday; } timer2.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 11 Alternativas a deshabilitar interrup. ● Lecturas sucesivas ● Doble buffer ● Cola circular

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 12 Lecturas sucesivas ● Idea: – leer repetidamente la variable y una copia hasta que sean iguales. ● Problema: – Optimización del compilador: como no intervienen escrituras entre las dos lecturas... ● Solución: – Usar la palabra reservada “volatile” ● Desventajas & limitaciones: – ahora veremos...

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 13 static volatile long int iSecondsToday; void interrupt vUpdateTime (void) {... ++lSecondsToday; if (lSecondsToday == 60 * 60 * 24) lSecondsToday = 0L;... } long lSecondsSinceMidnight(void) { volatile long lReturn; lReturn = lSecondsToday; while (lReturn != lSecondsToday) lReturn = lSecondsToday; return lReturn; } lecturas-sucesivas.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 14 Doble buffer ● Idea: usar doble buffer + flag global – bandera global cambiada por el código de la tarea indica cual de los buffer utilizar – cada buffer es accedido/modificado en conjunto ● Funcionamiento: – La flag global se alterna (cambia) en el main (al final). – En particular no cambia mientras se leen las variables del main. – La ISR siempre va a escribir en el buffer no usado. ● Desventajas: – ahora veremos...

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 15 static int iTemperaturesA[2], iTemperaturesB[2]; static bool fTaskCodeUsingTempsB = false; void interrupt vReadTemperatures (void) { if (fTaskCodeUsingTempsB){ iTemperaturesA[0] = !! read in value from HW iTemperaturesA[1] = !! read in value from HW } else { iTemperaturesB[0] = !! read in value from HW iTemperaturesB[1] = !! read in value from HW } void main (void) { while (true) { if (fTaskCodeUsingTempsB) if (iTemperaturesB[0] != iTemperaturesB[1]) !! Set off howling alarm; else if (iTemperaturesA[0] != iTemperaturesA[1]) !! Set off howling alarm; fTaskCodeUsingTempsB = !fTaskCodeUsingTempsB; } doble-buffer.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 16 Actividad en grupo ● Implementación: Cola de datos – Objetivo: Definir interfaz de la cola. Implementar la misma (papel). – Grupos: 2 a 4 participantes – Tiempo: 5 minutos para definir la interfaz 15 minutos para implementar el módulo – Puesta en común.

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 17 Cola circular ● Idea: se comparten datos a través de una cola circular – ISR obtiene datos y los agrega a la cola – Tarea extrae datos de la cola y los procesa – En este caso se agregan de a pares: temp0 y temp1 ● Manejo de la cola: – Queue full: head+2=tail (2 lugares usados por vez) – Queue empty: head=tail ● Ventajas: – Cola desacopla velocidad de llegada y procesamiento de datos – Velocidad de procesado  tan grande como la tasa de llegada. – Diseño del tamaño de la cola. ● Desventajas: – ahora veremos...

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 18 Cola circular ● Desventajas: poco robusto – Tarea debe leer el dato primero y modificar el puntero después. Invertir la operación podría llevar a sobre-escribir datos antes de ser escritos. – Cuando se incrementada el puntero del final (tail), la escritura tiene que ser atómica. Sino el “consumidor” y el “productor” pueden ver diferente la cola. Depende del tamaño de la cola (tamaño del índice) y del procesador Ejemplo: tamaño 256 y procesador 8-bits. ● Recordar – Buscábamos alternativas a deshabilitar interrupciones.

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 19 Actividad en grupo ● Alternativa a deshabilitar interrupciones: Cola de datos – Objetivo: Utilizar un modulo ya implementado Usar una cola para “producir” (ISR) y “consumir” datos (main) – Grupos: 2 a 4 participantes – Tiempo: 10 minutos para definir la interfaz – Puesta en común.

20 #define Q_SIZE 100 int iTemperatureQ[Q_SIZE]; int iHead = 0; int iTail = 0; void interrupt vReadTemperatures (void) { if ( !(( ihead+2==iTail) || (iHead== Q_SIZE-2 && iTail==0))) { iTemperatureQ[iHead] = !! read one temperature iTemperatureQ[iHead+1] = !! read other temperature iHead += 2; if (iHead== Q_SIZE) iHead = 0; } else !! throw away next value } //end-interrupt void main (void) { int iTemp1, iTemp2; while (TRUE) { if (iTail != iHead) { iTemp1 = iTemperatureQ[iTail]; iTemp2 = iTemperatureQ[iTail+1]; iTail += 2; if (iTail == Q_SIZE) iTail = 0; !! Compare values } //end-iff } //end-while } //end-main cola-circular.c

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 21 Bibliografía ● “An Embedded Software Primer” David E. Simon – Chapter 4: Interrupts ● "MSP430x1xx Familiy User's Guide“ ● "ATmega32 (L)"

Sistemas embebidos de tiempo real - Datos compartidos: soluciones 22 static int iTemperatures[2]; __interrupt void vReadTemperatures(void) { iTemperatures[0] = !! read in value from hardware; iTemperatures[1] = !! read in value from hardware; } int iTemp0; int iTemp1; void main (void) { BOOL fInterruptStateOld; while(TRUE) { fInterruptStateOld = disable(); iTemp0 = iTemperatures[0]; iTemp1 = iTemperatures[1]; if (fInterruptStateOld) enable(); if (iTemp0 != iTemp1) !! Set off howling alarm; } solucion.c