Está en la página 1de 65

Desarrollo Aplicaciones con Sistemas Operativos en Tiempo Real para Microcontroladores

Microchip PIC - FreeRTOS

1. Introduccin

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 aplicacin Intermediario entre el Usuario y el Hardware Ejecutar programas y resolver problemas fcilmente

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 Reutilizacin de cdigo

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 anlisis de tiempos para eventos y respuestas

Partes de un RTOS 1
Planificador (scheduler)
Administra el tiempo del CPU Determina ejecucin tareas Reemplaza tareas en ejecucin debido eventos

Partes de un RTOS 2
Servicios RTOS
Manejo interrupciones Temporizadores Administracin de memoria Entradas / salidas (IOs)

Partes de un RTOS 3
Sincronizacin y mensajera
Colas Semforos Mutexes

2. FreeRTOS

Caractersticas
Cdigo Abierto
No tiene costo FreeRTOS

Fcil de implementar
Existe mucha Documentacin !

Pensado para Microcontroladores


Escrito mayormente en C Es liviano en tamao de cdigo

Caractersticas
MicroKernel de Tiempo Real
Servicios mnimos e indispensables

Modo Cooperativo, Preemptive o mixto Ofrece funciones de:


Temporizacin Comunicacin y sincronizacin entre tareas

2. Tareas en FreeRTOS

Tareas - Tasks
Es una pieza de cdigo secuencial que tiene como objetivo el cumplir con alguna funcin de nuestro sistema embebido Cada Tarea posee un conjunto de recursos que identifican el estado de ejecucin (CONTEXTO)

Tipos de Tareas
3 tipo de tareas
Peridicas Aperidicas Procesamiento Continuo

Tareas - Contexto
Cada Tarea posee un conjunto de recursos sus respectivo estado de ejecucin (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


Parmetros 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 Planificacin
Planificador (scheduler)
Cooperative Preemptive Round Robin

Planificacin - Schedulling
Planificador (scheduler)
Cooperative Preemptive

Round Robin

Algoritmo Planificacin
Fixed priority preemptive scheluing Ejecuta la tarea de mayor prioridad Si existen dos tareas con = prioridad
Retira tarea en ejecucin Round Robin

Algoritmo Planificacin
En FreeRTOS
TICK_RATE_HZ Segmento de tiempo

Algoritmo Planificacin
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 razn se reserva un bloque de memoria de datos para cada tarea

Consideraciones de Diseo
Asignar prioridades de acuerdo a la importancia Evitar el starving de tareas de menor prioridad Anlisis detallado de:
Eventos Compromisos temporales

Temporizadores de Software
vTaskDelay(.)
Produce una demora Cede control CPU

vTaskDelayUntil(.)
Tiempo constate entre llamadas sucesivos

Tareas Peridicas
En FreeRTOS se implementan mediante la funcin:
vTaskDelayUntil()

Pasa mayor parte de su tiempo en estado de bloqueo y cuando expira el tiempo pasa a estado Ready

4. Sincronizacin de Tareas

Tareas Aperidicas
Bloqueada hasta que ocurra un evento Semaforos Se desea que las tareas de mayor prioridad sedan el CPU

Semforos
Mismo concepto un semforo vial Restringe el acceso a un seccin particular del programa Es una Herramienta Sincronizacin

Herramienta Sincronizacion
Mismo concepto un semforo vial Restringe el acceso a un seccin 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 comunicacin sincronizado Cuando una tarea produce datos mas rpido 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 sincronizacin Se puede bloquear al leer/escribir datos

Funcionamiento de una COla

6. Administracin de Recursos

Problemticas 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

Exclusin mutua
Solucin 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

Exclusin mutua
Solucin 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


Inversin 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


Inversin 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
Excepcin al algoritmo Fixed priority preemptive scheduling No soluciona la inversin de prioridad Reduce la duracin de la inversin

Preguntas

GRACIAS!!!

También podría gustarte