implementacion de un control de semaforos

Sistemas en tiempo real
IM
M
E
PL
E
N
O
I
C
A
T
N
DE
UN
N
O
C
L
O
TR
DE
Autores:
Pisana, Pablo
Picca, Ezequiel
Díaz Vélez, Agustín
Saavedra, Walter Elías
M
E
S
S
O
R
O
AF
INTRODUCCION:
En este trabajo se presentará un sistema de la
vida cotidiana con características de tiempo
real estricto (hard RT) y las herramientas con
las cuales un sistema operativo en tiempo real
cuenta para implementar la solución de forma
correcta.
Implementación:
La solución se implementará con un sistema operativo
en tiempo real de la empresa Micrium, llamado
μC/OS-II o uCOS
Este sistema operativo esta específicamente adaptado
a un microprocesador de HCS12
MICRIUM μC/OS –II
Es un Kernel de tiempo real preemtivo que utiliza un administrador de tareas
basado en prioridades.
El mismo esta especialmente diseñado para microcontroladores.
Por mas de 15 años Micriuum perfecciono uCOS, lo que le permitio desarrollar
nuevos productos para acelerar las faces de planificación y gestión de los recursos.
Características:
•
Portado en mas de 100 microprocesadores.
•
Soporta microprocesadores desde 8 a 64 bits. Microcontroladores o DSP’s
•
Administrador de interrupciones hasta 256 anidamientos.
•
Gestiona hasta 64 tareas (8 reservadas para el sistema).
•
Proporciona servicios del sistema, (semaforos, colas, buzones, etc).
MICRIUM μC/OS –II
La administración de tareas de este kernel es parecida al algoritmo de
planificación
conocido como Rate Monotonic Scheduling (RMS).
El RMS asume lo siguiente:
•
•
•
Todas las tareas son periódicas.
Las tareas no se sincronizan con otras tareas.
La programación preemtive debe implementarse para asegurar que la
CPU
ejecute las tareas de mayor prioridad que esten listas para correr.
EN INFORMATICA PREEMTIVE ES EL ACTO DE INTERRUMPIR TEMPORALMENTE UNA
TAREA LLEVADA A CABO SIN NECESIDAD DE SU COOPERACION Y CON LA INTENCION
DE REANUDAR LA TAREA EN UN MOMENTO POSTERIOR.
TAL CAMBIO SE CONOCE COMO CAMBIO DE CONTEXTO.
MICRIUM μC/OS –II
Interrupciones o ISR:
Las ISR se apropiarán de los
recursos solo en los casos en los
que una vez atendidas
signifiquen la reanudacion de
una tarea de alta prioridad. uCOS
tiene la capacidad de
deshabilitar las interrupciones
permitiendo que las secciones de
tareas críticas no se interrumpan.
Arquitectura de C/OS-II
Api del sistema operativo
El sistema operativo provee un conjunto de funciones que podemos
llamar.
Esta biblioteca de funciones es mejor llamada como API
(Application Programming Interface).
Una llamada a la API aparece como un nombre de la función
deseada y termina con (). Un ejemplo sería OSTaskCreate ().
tareas
Las tareas en uCOS son bucles infinitos.
tareas
•
•
•
•
•
•
•
•
•
Son una secuencia continua de las operaciones que se repiten cíclicamente.
Pueden ser eliminadas cuando no son necesarias
Son seteadas como inactivas si no es necesario que permanezca activo durante un
periodo de tiempo determinado.
uCOS puede administrar hasta 64 tareas, sin embargo, 8 son utilizados por el
sistema .
Para crear una tarea, cualquiera de los dos argumentos podrían ser utilizados:
OSTaskCreate () y OSTaskCreateExt ().
Cuando una tarea se crea , pasa a estado listo.
Si la tarea es de alta prioridad, se le da el control de la CPU
OSStart() activa el entorno multitarea poniendo en ejecución las tareas creadas.
Sólo una tarea puede correr al mismo tiempo.
tareas
•
•
•
•
•
Tareas listas sólo se ejecutará cuando las tareas de alta prioridad estén
en el estado de espera o marcadas para permanecer dormidas.
Las tareas que están corriendo pueden ser suspendidas entregando el
control de la CPU mediante las funciones OSTimeDly() o
OSTimeDlyHMSM().
La siguiente tarea de mayor prioridad lista tomara el control del la CPU.
El estado de ejecución de una tarea puede ser suspendido hasta que se
provoque un evento mediante el uso de OSSemPend (), OSMboxPend () o
OSQpend ().
La tarea obtendrá el estado de disponible, cuando se produce el evento.
Estado de las tareas
Planificador de tareas
•
•
•
•
•
•
Las tareas de mayor prioridad se ejecutan primero.
El planificador de tareas es llamado por el usuario mediante OSSched()
Todo el código de la OSSched () está en la sección crítica y las
interrupciones están deshabilitadas.
El planificador se puede bloquear o desbloquear mediante el uso
defunciones, OSSchedLock () o OSSchedUnlock ().
La función de cambio de contexto es OS_TASK_SW ()(es llamada por
OSSched()). uCOS utiliza el cambio de contexto para guardar los registros de
procesador de la tarea.
plANIFICADOR DE TAREAS
Controlador de semaforos
CONTROLADOR DE SEMAFOROS
ESTE SISTEMA DEMO PROVEERA:
•
TEMPORIZACIONES DEL SEMAFORO N/S Y E/O
•
PULSADO DEL BOTON PARA SIMULAR SOLICITUD DE PEATON PARA
CRUZAR.
Implementacion
La elección de uCOS para este proyecto nace de la necesidad de una solución rápida y efectiva
de la problemática, avalado por los mas de 15 años de la empresa Micrium en el negocio.
En cuanto al hardware se eligió la placa dragon 12 plus ya que estaba disponible y tenia
ejemplos de código que se podían usar.
Con los ejemplos, la mayor parte de la lógica para hacer la tarea propia de un secuenciador
de semáforo se hizo rápidamente.
Solo faltaba agregar comunicación entre procesos. Para solucionar esto se uso una función de
consulta de flags.
Esto se logro utilizando una función de uCOS, que permite exceder al estado de otras tareas.
uCOS también maneja la pila y provee funcionalidades de mensaje entre tareas.
También tiene un puerto para Uprbe, que es la herramienta para poner en cola
interactivamente los Kernel de UCOS que estén corriendo mediante un enlace serie externo.
Implementacion
A continuacion el diagrama en bloques del sistema
software
El software de aplicación ha sido escrito en C y de la Asamblea con
Freescale CodeWarrior Development Studio.
El software se divide en las siguientes tareas:
•
•
•
•
•
INICIALIZACION
CONTROL DEL TRAFICO DE VEHICULOS.
CONTROL DEL TRAFICO DE PEATONES.
TEMPORIZACIONES DEL SEMAFORO EN LA INTERSECCION.
MANEJO DE SOLICITUD DE CRUCES DE PEATON.
software
A continuación se nombran algunas funciones de la implementacion:
•
AppStartTaskStk (Configuración y puesta en marcha-una sola vez)
•
LCD_TestTaskStk (tarea LCD)
•
SevenSegTestTaskStk (tarea 7 segmentos 7 )
•
KeypadRDTaskStk (tarea de teclado)
•
TrafficLightTaskStk (tarea de luces de trafico)
•
TrafficWalkTaskStk (tarea de luces de peatones)
•
OS_Probe_Task (herramienta de debug)
•
Probe_Comm_RS232_PRIO (herramienta de debug)
•
OS_Task_Tmr_PRIO (Set)