betcon2013-aplicaciones con rtos y microcontroladores
TRANSCRIPT
Desarrollo Aplicaciones con Sistemas Operativos en Tiempo Real para Microcontroladores
Microchip PIC - FreeRTOS
1. Introducción
Sistema Embebido
• Es un sistema computacional
• Recursos limitados
• Realizan una o algunas pocas funciones dedicadas
Sistemas de Hilo Único
Sistemas de Hilo Único
Que es un SO?
• Programa que gestiona el Hardware de un equipo
• Proporciona una base para programas aplicación
• Intermediario entre el Usuario y el Hardware
• Ejecutar programas y resolver problemas fácilmente
Que es un RTOS?
• Sistema Operativo en Tiempo Real
• (Real Time Operating System)
• Cumplir compromisos temporales
• Se emplea cuando hay que administrar varias tareas con plazos de tiempo estrictos
Sistema de Tiempo Real
• Esta definido por:
– Los eventos externos que debe atender
– La respuesta ante esos eventos
– Requerimientos temporales de las respuestas a eventos
Por qué usar un RTOS?
• Para cumplir compromisos temporales estrictos
• Para simplificar manejo del tiempo
– Uso de temporizadores
• Multitarea
• Escalabilidad
• Reutilización de código
Por qué usar un RTOS?
Tomar en Cuenta…
• Se gasta tiempo de CPU en Schedulling
• Gasta memoria
• Se gasta memoria de control dedicada a cada tarea (TCB – Task Control Block)
• Cuidadoso análisis de tiempos para eventos y respuestas
Partes de un RTOS 1
• Planificador (scheduler)
– Administra el tiempo del CPU
– Determina ejecución tareas
– Reemplaza tareas en ejecución debido eventos
Partes de un RTOS 2
• Servicios RTOS
– Manejo interrupciones
– Temporizadores
– Administración de memoria
– Entradas / salidas (IO’s)
Partes de un RTOS 3
• Sincronización y mensajería
– Colas
– Semáforos
– Mutexes
2. FreeRTOS
Características
• Código Abierto
– No tiene costo “FreeRTOS”
• Fácil de implementar
– Existe mucha Documentación !
• Pensado para Microcontroladores
– Escrito mayormente en C
– Es liviano en tamaño de código
Características
• MicroKernel de Tiempo Real
– Servicios mínimos e indispensables
• Modo Cooperativo, Preemptive o mixto
• Ofrece funciones de:
– Temporización
– Comunicación y sincronización entre tareas
2. Tareas en FreeRTOS
Tareas - Tasks
• Es una pieza de código secuencial que tiene como objetivo el cumplir con alguna función de nuestro sistema embebido
• Cada Tarea posee un conjunto de recursos que identifican el estado de ejecución (CONTEXTO)
Tipos de Tareas
• 3 tipo de tareas
– Periódicas
– Aperiódicas
– Procesamiento Continuo
Tareas - Contexto
• Cada Tarea posee un conjunto de recursos sus respectivo estado de ejecución (CONTEXTO)
– IP (Instruction pointer)
– SP (Stack Pointer)
– Registros de CPU
– Contenido de la pila en uso
Como es un Tarea en FreeRTOS?
• Richard Barry dice:
– Se implementan con funciones de C
– Deben devolver void
– Deben recibir un puntero a void como parametro
• No deben incluir return
• No deben ejecutarse hasta la llave de cierre
Funciones Importantes
• Funciones para trabajar con Tareas:
– portBASE_TYPE xTaskCreate(…);
– Void vTaskStartScheduler(void);
– Void vPrintString(const char*);
Crear Tareas en FreeRTOS
• vTaskCreate()
Crear Tareas en FreeRTOS
• Parámetros vTaskCreate(): – pvTaskcode
– PcName
– usStackDepth
– pvParameters
– uxPriority
– pxCreatedTask
• Retorna – pdTRUE – errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY
Ejemplo Tarea en FreeRTOS
Ejemplo Tarea en FreeRTOS
Ejemplo Tarea en FreeRTOS
Ejemplo Tarea en FreeRTOS
Ejemplo Tarea en FreeRTOS
Ejemplo Tarea en FreeRTOS
Ejemplo Tarea en FreeRTOS
Ejemplo Tarea en FreeRTOS
Estados de las Tareas
Temporizadores de Software
• Funciones
– vTaskDelay(portTickType xTickToDelay)
– vTaskDelayUntil(….)
• La tarea pasa al estado de Bloqueo
3. Planificador en FreeRTOS
Tipos de Planificación
• Planificador (scheduler)
– Cooperative
– Preemptive
– Round – Robin
Planificación - Schedulling
• Planificador (scheduler)
– Cooperative
– Preemptive
– Round – Robin
Algoritmo Planificación
• Fixed priority preemptive scheluing
• Ejecuta la tarea de mayor prioridad
• Si existen dos tareas con = prioridad
– Retira tarea en ejecución
– Round Robin
Algoritmo Planificación
• En FreeRTOS
– TICK_RATE_HZ
– Segmento de tiempo
Algoritmo Planificación
• Un valor bajo TICK_RATE hace que el sistema sea lento
• TICK_RATE hace que el scheduler trabaje mas seguido
• TICK_RATE valor de compromiso entre estos dos extremos
Cambio de Contexto
• Context switching
– Scheudler invoca al Dispatcher
– Guarda el contexto actual y lo reemplaza
– Por esta razón se reserva un bloque de memoria de datos para cada tarea
Consideraciones de Diseño
• Asignar prioridades de acuerdo a la importancia
• Evitar el “starving” de tareas de menor prioridad
• Análisis detallado de:
– Eventos
– Compromisos temporales
Temporizadores de Software
• vTaskDelay(….)
– Produce una demora
– Cede control CPU
• vTaskDelayUntil(….)
– Tiempo constate entre llamadas sucesivos
Tareas Periódicas
• En FreeRTOS se implementan mediante la función:
– vTaskDelayUntil()
• Pasa mayor parte de su tiempo en estado de bloqueo y cuando expira el tiempo pasa a estado Ready
4. Sincronización de Tareas
Tareas Aperiódicas
• Bloqueada hasta que ocurra un evento
• Semaforos
• Se desea que las tareas de mayor prioridad sedan el CPU
Semáforos
• Mismo concepto un semáforo vial
• Restringe el acceso a un sección particular del programa
• Es una Herramienta Sincronización
Herramienta Sincronizacion
• Mismo concepto un semáforo vial
• Restringe el acceso a un sección particular del programa
5. Manejo de Colas
Intercambio de Datos entre Tareas
• Alternativa Variables Globales, pero:
– Cuidar el acceso al recurso
– Tareas aperiodicas
• Necesidad de un Mecanismo de comunicación sincronizado
• Cuando una tarea produce datos mas rápido de los que se los consume
Solucion al intercambio
• Usar Colas (queues)
• Son visibles por todas las tareas
– Deben ser creadas de forma global
• Incorporan mecanismo de sincronizacion
• Se puede bloquear al leer/escribir datos
Solucion al intercambio
• Usar Colas (queues)
• Son visibles por todas las tareas
– Deben ser creadas de forma global
• Incorporan mecanismo de sincronización
• Se puede bloquear al leer/escribir datos
Funcionamiento de una COla
6. Administración de Recursos
Problemáticas de Concurrencia
• Tareas pueden requerir usar un mismo recurso al mismo tiempo
– Existe cambio de contexto
– Ejemplo escribir en un LCD
– Ejemplo Escribir un UART
Exclusión mutua
• Solución mediante turnado de procesos
• FreeRTOS ofrece varias alternativas
– Deshabilitar interrupciones
• Sistema se vuelve cooperativo
• Protege contra otras tareas y no escucha eventos
– Suspender el scheduler
– Mutex
Exclusión mutua
• Solución mediante turnado de procesos
• FreeRTOS ofrece varias alternativas
– Deshabilitar interrupciones
• Sistema se vuelve cooperativo
• Protege contra otras tareas y no escucha eventos
– Suspender el scheduler
– Subir la prioridad de la tarea
– Mutex
Mutex del Sistemas
• Con una llave de acceso al recurso
• Solo puede acceder al recurso la tarea que tiene tomado el mutex
• La tarea debe devolver el mutex cuando la tarea termina su trabajo
Problema del Mutex
• Inversión de prioridades – Tarea de prioridad alta esta bloqueada
espera su tiempo de ejecutar
– Mientras una tarea de baja prioridad toma un mutex para acceder a un recurso protegido durante tiempo prolongado
– La tarea de alta prioridad pasa al estado ready e intenta acceder al recurso pero este se encuentra ocupado por la tarea de baja prioridad
Problema del Mutex
• Inversión de prioridades
– Ahora imaginemos una tercera tarea de prioridad intermedia que pasa al estado Ready durante otro tiempo prolongado
– La tarea de alta prioridad vuelve a esperar a que la tarea de baja prioridad libere el mutex para terminar de usar el recurso
– Free RTOS incorpora Herencia de Prioridad
Herencia de Prioridad
• El Scheduler eleva la prioridad de la tarea (de baja prioridad)
– La eleva al nivel de la tara de mayor prioridad
– Y que pasa cuando se tiene la misma prioridad en dos tareas???
– Roun Robin = segmento de tiempo
Herencia de Prioridad
• Excepción al algoritmo Fixed priority preemptive scheduling
• No soluciona la inversión de prioridad
• Reduce la duración de la inversión
Preguntas
GRACIAS!!!