Documentos de Académico
Documentos de Profesional
Documentos de Cultura
5.1.- Introduccin a la multitarea y los sistemas de Tiempo Real................................................. 2 5.1.1.- Las ideas bsicas. Como implementar la multitarea y el tiempo real. ........................... 2 5.1.1.1.- Multitarea tareas, prioridades y plazos. ............................................................... 2 5.1.1.2.- Qu es "tiempo real"?............................................................................................ 4 5.1.2.- Como conseguir multi-tarea mediante simple programacin secuencial....................... 5 5.1.2.1.- Evaluacin del bucle principal. ........................................................................... 5 5.1.2.2.- Tareas disparadas por tiempo y disparadas por eventos. ........................................ 6 5.1.2.3.- Empleo de las interrupciones para la fijacin de prioridades, la estructura primer plano / trasfondo.................................................................................................................... 6 5.1.2.4.- Introduccin de un "tick de reloj" para sincronizar la actividad del programa. ...... 7 5.1.2.5.- Un sistema operativo de propsito general. ........................................................ 7 5.1.2.6.- Los lmites de la programacin secuencial para hacer multi-tarea. ........................ 8 5.2.- El sistema operativo de tiempo real (RTOS) ........................................................................ 9 5.3.- La planificacin y el planificador. ........................................................................................ 9 5.3.1.- Planificacin cclica. ...................................................................................................... 9 5.3.2.- Planificacin Round Robin y cambio de contexto....................................................... 10 5.3.3.- Estados de las Tareas. .................................................................................................. 11 5.3.4.- Planificacin pre-emptiva con prioridades. ................................................................. 12 5.3.5.- Planificacin Cooperativa............................................................................................ 14 5.3.6.- El papel de las interrupciones en la planificacin........................................................ 14 5.4.- El desarrollo de las tareas. .................................................................................................. 15 5.4.1.- La definicin de las tareas............................................................................................ 15 5.4.2.- Escritura de las tareas y establecimiento de prioridades.............................................. 15 5.5.- La proteccin de los Datos y recursos - el semforo. ......................................................... 16 5.6.- El Sistema Operativo Salvo. ............................................................................................... 17 5.7.- La idea principal - Salvo, un RTOS de ejemplo. ................................................................ 17 5.7.1.- Caractersticas bsicas de Salvo................................................................................... 17 5.7.2.- Versiones de Salvo y referencias. ................................................................................ 18 5.7.3.- Configuracin de la aplicacin Salvo. ......................................................................... 18 5.7.3.1.- Programacin de aplicaciones Salvo - construir la librera................................... 19 5.7.3.2.- Las libreras de Salvo............................................................................................ 19 5.7.4.- Escritura de programas con Salvo............................................................................... 20 5.7.4.1.- Inicializacin y planificacin. ............................................................................... 20 5.7.4.2.- Escribiendo las tareas en Salvo............................................................................. 22
Bibliografa:
Tim Wilmshurst. Designing embedded systems with PIC microcontrollers : principles and applications. Newnes, 2007. Richard Barnett, Larry OCull, Sarah Cox, Embedded C Programming and the Microchip PIC. Thomson Delmar Learning, 2004.
INFORMTICA INDUSTRIAL II
Pg. 2/22
INFORMTICA INDUSTRIAL II
El programa se compone de una serie de actividades distintas, cada una de las cuales aparece en la figura. Vamos a adoptar de inmediato la prctica de llamar a estas actividades tareas. Una tarea es un trozo del programa o seccin que tiene una finalidad y resultado claro y distinto. El concepto multi-tarea, simplemente describe una situacin en la que hay muchas tareas que deben realizarse, a ser posible de manera simultnea. En este ejemplo se identifican cuatro tareas. El programa est estructurado de manera que cada tarea se coloca en un bucle principal y cada una se ejecuta secuencialmente. Una de las tareas, la salida a pantalla (cuando los datos se enva al controlador para mostrarse en la pantalla LCD), se ejecuta slo una vez cada 10 ciclos del bucle. El bucle finaliza con un retraso, lo que determina la tasa de repeticin de bucle y, por tanto, influye en las caractersticas de temporizacin del programa.
Figura 4.1 Diagrama de flujo simplificado del sistema de bsqueda de luz de un robot.
Este es un ejemplo muy sencillo de multi-tarea. El programa tiene que realizar una serie de tareas. Las va realizando estrictamente en rotacin, realizando un pequeo descanso antes de comenzar otra vez. En realidad, las tareas no son todas de igual importancia. Volviendo a los acosados padres: si el telfono suena, el perro probablemente tenga que esperar para recibir su cena. Por lo tanto, reconocemos que diferentes tareas tienen diferentes prioridades. Una tarea de alta prioridad debe tener derecho a ejecutarse antes que una tarea de baja prioridad. Cada tarea tambin tiene un plazo, o podra tenerlo de forma estimada. El telfono tiene que ser descolgado en 30 segundos, en caso contrario la persona que llama cuelga; los nios tienen que estar listos para salir de casa a las 8.30 horas, en caso contrario pierden el autobs, y as sucesivamente. El concepto de las prioridades est vinculado al de los plazos. En general, una tarea con un plazo estricto requiere un alto grado de prioridad.
Pg. 3/22
INFORMTICA INDUSTRIAL II
Las tareas de este programa de ejemplo se muestran en la tabla siguiente, junto con alguna clasificacin preliminar. Se emplean tres niveles de prioridad, con tres plazos estimados. Para la asignacin de prioridades, la pulsacin de un microinterruptor porque se haya detectado un obstculo, es considerada como una emergencia, el robot ha chocado con algo y el motor probablemente se ha estancado. Por lo tanto, es de alta prioridad. En cambio, el usuario humano apenas se dar cuenta si la funcin de visualizacin se ha retrasado un segundo o menos. Por lo tanto, esta ltima puede ser de menor prioridad.
5.1.1.2.- Qu es "tiempo real"? Cmo funciona el programa del robot para bsqueda de luz, o cmo se relacionan los padres acosados con el concepto de tiempo real? El concepto es ampliamente usado, pero a menudo parece estar rodeado de una cierta mstica. Una definicin simple pero efectiva de funcionamiento en tiempo real, es la siguiente: Un sistema operativo en tiempo real debe ser capaz de proporcionar resultados correctos los plazos de tiempo sealados. Observemos que esta definicin no significa que el trabajo en tiempo real implique alta velocidad, aunque a menudo esto puede ayudar. Simplemente indica que lo que se necesita debe estar listo en el momento en que se necesita. Por lo tanto, si el padre lleva a todos los nios a la escuela a tiempo, alimenta al perro antes de que empiece a aullar, abre la puerta al cartero antes de que se vaya y contesta al telfono antes de la persona que llama cuelgue, entonces los requisitos de tiempo real de este entorno se han cumplido. Del mismo modo, si el robot cumple todos los plazos cuantificados en la tabla, podemos afirmar que tambin opera en tiempo real. Detrs de esta simple definicin, y todo lo que implica, se encuentra una multitud de desafos en el diseo del programa. El resto de este captulo constituye una introduccin a estos desafos, y sobre cmo pueden ser resueltos.
Pg. 4/22
INFORMTICA INDUSTRIAL II
5.1.2.- Como conseguir multi-tarea mediante simple programacin secuencial. El tipo de programacin que hemos realizado hasta a la fecha, ya sea en ensamblador o C, se denomina programacin secuencial. Esto simplemente significa que el programa se ejecuta de forma normal, cada una de las instrucciones o sentencias sigue a la anterior, a menos que el programa ejecute un salto, o tenga lugar una llamada a subrutina o funcin. Ms adelante en este captulo nos vamos a desmarcar de este tipo de programas. Por ahora, vamos a estudiar cmo se puede optimizar esta estructura para aplicaciones multi-tarea, abordando algunas de las debilidades de la estructura del programa de la figura 5.1. 5.1.2.1.- Evaluacin del bucle principal. Este programa parece funcionar bastante bien, pero esto se debe principalmente a que no es muy exigente en sus necesidades. Veamos algunos de sus inconvenientes, todos ellos relacionados entre s: El tiempo de ejecucin del Bucle no es constante. El tiempo que tarda en ejecutarse el bucle una vez es igual a la suma de los tiempos de cada tarea, ms el tiempo de retardo. Evidentemente, esto puede variar. Si, por ejemplo, se activa un sensor, el robot para y luego se da la vuelta. Esto provoca una ejecucin larga del bucle, que puede alterar alguna otra actividad del bucle. Las tareas interfirieren unas con otras. Una vez que una tarea tiene la posibilidad de ejecutarse, mantendr ocupada a la CPU hasta que se haya completado lo que necesite hacer. De acuerdo, cada una de las tareas est escrita de manera que no debera tardar mucho tiempo. Supongamos, sin embargo, que la tarea de la pantalla empieza a ejecutarse y el robot de repente golpea una pared. El procesador seguir enviando datos a la pantalla y luego completar la rutina de retardo antes de que se d cuenta que se ha producido una situacin de emergencia. Las tareas de alta prioridad no reciben la atencin que necesitan. Ya hemos reconocido que algunas tareas son ms importantes que otras. Por lo tanto, deben tener mayor prioridad, un concepto que ya se han tratado en el contexto de las interrupciones. En esta estructura de bucle continuo, cada tarea tiene la misma prioridad.
Tenemos que encontrar una forma de estructuracin de programas que reconozca la naturaleza y las necesidades de las tareas que contiene, y que pueda satisfacer sus demandas de tiempo real.
Pg. 5/22
INFORMTICA INDUSTRIAL II
5.1.2.2.- Tareas disparadas por tiempo y disparadas por eventos. Es fcil reconocer que algunas tareas se activan por tiempo (time triggered) y otras por eventos (event triggered). Una tarea activada por tiempo se produce al trmino de un cierto perodo de tiempo y suele ser peridica. Un ejemplo de ello es la lectura de los sensores de luz en este programa. Las tareas disparadas por eventos se producen cuando un tiene lugar un determinado evento. En este caso, la deteccin de un obstculo con el sensor correspondiente es un buen ejemplo. 5.1.2.3.- Empleo de las interrupciones para la fijacin de prioridades, la estructura primer plano / trasfondo. Para solucionar el problema de la falta de prioridades entre las tareas en el programa de seguimiento de luz, sera posible convertir las tareas de alta prioridad en interrupciones. Estas interrupciones tomarn el control de la CPU tan pronto como sea necesario, sobre todo si slo se utiliza una interrupcin. La estructura de programa ser la siguiente:
Es muy probable que las tareas en el bucle vengan disparadas por tiempo, las cuales podrn utilizar la tasa de repeticin del bucle como base de tiempo. Las tareas dirigidas por interrupciones es probable que vengan disparadas por eventos. Con esta estructura simple del programa hemos logrado una tasa de repeticin fiable para las tareas del bucle, y adems hemos priorizado las tareas que lo necesitan. Esta estructura del programa se denomina estructura en primer plano/trasfondo (foreground/background). Las tareas con mayor prioridad vienen dirigidas por interrupciones en el primer plano (cuando tienen que ejecutarse), mientras que las tareas de menor prioridad se ejecutan en el bucle de forma casi continua en segundo plano.
Pg. 6/22
INFORMTICA INDUSTRIAL II
5.1.2.4.- Introduccin de un "tick de reloj" para sincronizar la actividad del programa. Para minimizar el impacto de la variacin de tiempos en la ejecucin de las tareas sobre el tiempo de ejecucin del bucle, es posible disparar el bucle completo mediante una interrupcin peridica, por ejemplo, mediante el desbordamiento de un timer. El programa entonces tendra la estructura de la figura 5.3. El bucle principal se dispara por el desbordamiento de un timer, de forma que se produce con una cadencia fija y fiable. Las tareas dirigidas por tiempo pueden basar su actividad en su tasa de repeticin. Las tareas dirigidas por eventos, a travs de interrupciones, se pueden producir cuando sea necesario. Las temporizaciones de las tareas, por supuesto, tienen que ser calculadas y controladas, de modo que el bucle tenga tiempo suficiente para ejecutarse en los plazos previstos, y las tareas dirigidas por eventos no perturben demasiado el carcter repetitivo del bucle de temporizacin. La idea de emplear una interrupcin del timer usada de esta forma para sincronizar la actividad del programa se ha comentado ya en prcticas y se ilustra en la Figura 5.3. Como se ha mencionado ya, a esta interrupcin se la denomina tick de reloj. La idea es simple, pero resulta fundamental para muchas estructuras de programa que vamos a considerar. El tick de reloj no debe confundirse con el propio oscilador de reloj, a pesar de que el tick normalmente viene derivado del oscilador.
Figura 4.3 Empleo de una interrupcin del Timer en el programa de bsqueda de luz.
5.1.2.5.- Un sistema operativo de propsito general. La estructura que aparece en la Figura 5.3 se puede abstraer en un sistema operativo de propsito general, como se muestra en la Figura 5.4. Aqu el bucle principal contiene una serie de tareas de prioridad baja o media. Este bucle se ejecuta mediante un tick de reloj.
Pg. 7/22
INFORMTICA INDUSTRIAL II
La estructura general de cada una de las tareas se muestra a la izquierda. Segn sea necesario, cada tarea tiene un bit de habilitacin (un bit en una direccin de memoria) y cada uno tiene un contador de tarea. Las tareas que se deben ejecutar cada tick de reloj lo harn. Algunas tareas slo tienen que ejecutarse con menos frecuencia, con un intervalo de tiempo fijado por el valor de su contador de tarea. Las tareas se pueden activar o desactivar mediante la puesta a uno o la puesta a cero de su bit de habilitacin, ya sea mediante la ejecucin de otras tareas o por las interrupciones.
Figura 4.4 Estructura de sistema operativo de propsito general, usando programacin secuencial.
5.1.2.6.- Los lmites de la programacin secuencial para hacer multi-tarea. El enfoque de la programacin de mltiples tareas que acabamos de describir por lo general ser aceptable, siempre y cuando: No existen demasiadas tareas Las prioridades de las tareas puedan tener cabida en la estructura Las tareas tengan un comportamiento moderadamente bueno, por ejemplo, su exigencia de tiempo de CPU debe ser siempre razonable y las tareas dirigidas por interrupcin no se produzcan con demasiada frecuencia.
Si no se cumplen estas condiciones, hay que considerar una estrategia de programacin radicalmente distinta. El candidato natural es el sistema operativo de tiempo real.
Pg. 8/22
INFORMTICA INDUSTRIAL II
Pg. 9/22
INFORMTICA INDUSTRIAL II
Un ejemplo de diagrama de programacin cclica se muestra en la Figura 5.5. Aqu la banda horizontal representa la actividad de la CPU y los bloques numerados las tareas a medida que se ejecutan. Las tareas se van ejecutando unas detrs de otras, con la tarea 3, inicialmente, la ms larga y 2, la ms corta. En la tercera iteracin, sin embargo, la tarea 1 toma ms tiempo y el tiempo total del bucle es mayor. La planificacin cclica tiene las desventajas de la programacin secuencial en un bucle, como se ha sealado anteriormente. Al menos es simple.
5.3.2.- Planificacin Round Robin y cambio de contexto. En la planificacin Round robin el sistema operativo se ejecuta mediante una interrupcin peridica (el tick de reloj). Las tareas son seleccionadas en un orden fijo para su ejecucin. En cada tick de reloj, la tarea actual se suspende y se permite que la siguiente comience la ejecucin. Todas las tareas se consideran de igual importancia y esperan en secuencia a su trozo de tiempo de CPU. A las tareas no se las permite ejecutarse hasta el final, si no que son interrumpidas (pre-empted), es decir, su ejecucin se detiene en medio del proceso. Este es un ejemplo de un planificador pre-emptivo.
Las implicaciones de esta conmutacin de tareas pre-emptiva, y sus necesidades de recursos, no son despreciables y deben ser tenidas en cuenta. Cuando se permite a la tarea ejecutarse de nuevo, debe ser capaz de continuar el funcionamiento sin problemas, sin ningn efecto secundario debido a la planificacin. Por lo tanto, se debe guardar el contexto completo (todas las banderas, registros y otras direcciones de memoria) cuando se realiza la conmutacin de la tarea. Sin embargo, los elementos del programa que resultan crticos en cuanto a su temporizacin no deben ser interrumpidos, y este requisito tendr que ser escrito en el programa. Un ejemplo de diagrama de planificacin round robin se muestra en la Figura 5.6. Los bloques numerados representan una vez ms las tareas a medida que se ejecutan, pero hay una gran diferencia con la figura 5.5. Ahora cada tarea obtiene un tiempo de CPU, que tiene una longitud fija.
Pg. 10/22
INFORMTICA INDUSTRIAL II
El tick de reloj, que hace que se produzca la conmutacin de tareas, est representado en el diagrama por una flecha. Cuando este tiempo expira, la siguiente tarea pasa a ejecutarse, haya terminado o no la actual. En un momento dado la tarea 2 se acaba y ya no necesita tiempo de CPU durante varios trozos de tiempo. A continuacin, queda de nuevo lista para su ejecucin y toma su turno en el ciclo. Como la tarea y el contexto se han conmutado, existe una inevitable sobrecarga de tiempo, que est representado por las barras negras. Este es el tiempo ocupado al servir las necesidades del RTOS, que se pierde para el programa de aplicacin. 5.3.3.- Estados de las Tareas. Vale la pena considerar lo que les est pasando ahora a las tareas que estn siendo controladas por el planificador. Evidentemente, slo se est ejecutando una tarea en un momento dado. Otras pueden necesitar ejecutarse, pero en un instante dato no tienen esa posibilidad. Otras pueden simplemente responder a unas circunstancias particulares y, por tanto, slo se activan en ciertos momentos durante la ejecucin del programa.
Un diagrama de estados de las tareas se muestra en la Figura 5.7. Hay que tener en cuenta, sin embargo, que la terminologa utilizada y la forma en que el estado se lleva a cabo varan en cierta medida de un RTOS a otro. Por lo tanto, en algunos casos, se utilizan varios trminos para describir un cierto estado. Listo (o elegible). La tarea est lista para ejecutarse y lo har tan pronto como se le asigne tiempo de CPU. La tarea deja este estado y entra en el estado activo cuando es iniciada por el planificador.
Pg. 11/22
INFORMTICA INDUSTRIAL II
En ejecucin (running). A la tarea se le ha asignado tiempo de CPU y se est ejecutando. Varias causas pueden provocar que la tarea salga de este estado. Tal vez simplemente se complete y ya no necesite tiempo de CPU. Alternativamente, el planificador puede detenerla, de modo que otra tarea se pueda ejecutar. Por ltimo, puede entrar en un estado de bloqueo o en espera por alguna de las razones se describen a continuacin. Bloqueada / esperando / retrasada. Este estado representa a una tarea que est lista para ejecutarse, pero por una u otra razn no se le permite. Hay varias razones por las que este puede ser el caso y, de hecho, este nico estado en el diagrama puede ser sustituido por varios, si se desea mayor detalle. La tarea puede estar esperando a que lleguen algunos datos o a que quede disponible un recurso que necesita, que actualmente est siendo utilizado por otra tarea, o bien puede estar esperando un perodo de tiempo para ejecutarse. El estado se abandona cuando la tarea se libera de la condicin que la mantiene en este estado. Parada / suspendida / inactiva. La tarea no necesita tiempo de CPU en este momento. Una tarea deja este estado y entra en el estado de preparada cuando se activa de nuevo, por la razn que sea. Sin Inicializar / destruida. En este estado la tarea ya no existe en lo que al RTOS se refiere. Una consecuencia de esto es una tarea no necesita tener existencia continua en el curso de la ejecucin del programa. En general, tienen que ser creadas o inicializadas en el programa antes de que se puedan ejecutar. Si es necesario pueden ser destruidas ms tarde y, posiblemente, creadas de nuevo otra vez. La eliminacin de tareas innecesarias de la lista de tareas simplifica el funcionamiento del planificador y reduce la demanda de memoria. 5.3.4.- Planificacin pre-emptiva con prioridades. Volvemos ahora a nuestro estudio de las estrategias de planificacin, armados con una mayor comprensin de la vida de las tareas. Como hemos visto, en la planificacin de tareas de tipo Round robin las tareas quedan subordinadas al sistema operativo. Sin embargo, todas las tareas tienen la misma prioridad, por lo que una tarea de poca importancia tiene el mismo acceso a la CPU que una de mxima prioridad. Podemos cambiar esto dando prioridad a las tareas ms importantes. En el planificador pee-emptivo con prioridad, a las tareas se les dan prioridades. Las tareas de alta prioridad ahora estn autorizadas a terminar antes de cualquier otra tarea de menor prioridad. El planificador todava funciona mediante un tick de reloj. En cada tick de reloj, comprueba qu tareas listas tienen la ms alta prioridad. Estas son las que consiguen el acceso a la CPU.
Pg. 12/22
INFORMTICA INDUSTRIAL II
Una tarea que se encuentre en ejecucin y que todava necesite tiempo de CPU, y sea de alta prioridad, mantiene la CPU. Una tarea de baja prioridad que se est ejecutando es sustituida por una de mayor prioridad, en caso de que est ltima haya pasado al estado de lista.
La tarea de alta prioridad se convierte en la tarea que se lleva el gato al agua. En casi todos los casos, prosigue su camino. La manera en que funciona esta estrategia de planificacin se ilustra en el ejemplo de la Figura 5.8. Este diagrama contiene varios conceptos clave del RTOS y vale la pena entenderlo bien. El diagrama muestra tres tareas, cada una de diferentes prioridades y diferentes tiempos de ejecucin. Al principio, todas estn listas para ejecutarse. La tarea 1, es seleccionada por el planificador para ejecucin, ya que tiene la ms alta prioridad. En la siguiente tick de reloj, el planificador reconoce que la tarea 1 todava debe ejecutarse, por lo que se le permite que contine. Lo mismo ocurre en el siguiente tick de reloj y por fin se completa la tarea durante el siguiente tramo. La tarea 1 no necesita ahora tiempo de CPU y pasa a estar suspendida. En el siguiente tick de reloj el planificador, por lo tanto, selecciona la tarea que tiene la prioridad ms alta, que ahora es la tarea 3. Esta tambin se ejecuta hasta que se completa. Por ltimo, la tarea 2 tiene la oportunidad de ejecutarse. Por desgracia para ella, sin embargo, durante su primer cuanto de tiempo la tarea 1 pasa al estado de lista de nuevo. En el siguiente tick de reloj, por lo tanto, se selecciona la tarea 1 para ejecutarse de nuevo. Una vez ms, se permite su ejecucin hasta su finalizacin. Cuando la tarea 2 est lista para ejecucin, y slo cuando ninguna otra tarea est lista, la tarea 2 puede volver a entrar en ejecucin y, finalmente se completa. A raz de esto, durante una porcin de tiempo, no hay ninguna tarea activa y por eso no hay actividad de la CPU. La tarea 1 pasa a estar lista una vez ms y comienza a ejecutarse de nuevo hasta su terminacin.
Pg. 13/22
INFORMTICA INDUSTRIAL II
5.3.5.- Planificacin Cooperativa. La estrategia de planificacin a la que acaba de hacerse referencia, planificacin pre-emptiva con prioridades, representa el funcionamiento clsico de los RTOS. Sin embargo, tambin tiene desventajas. El planificador debe mantener toda la informacin de contexto para todas las tareas que suspende. Esto generalmente se hace mediante una pila por tarea y emplea mucha memoria. El cambio de contexto tambin gasta mucho tiempo de CPU. Por otra parte, las tareas deben ser escritas de tal forma que se puede suspender en cualquier momento durante su funcionamiento. Una alternativa a la planificacin pre-emptiva es la planificacin cooperativa. Ahora, cada tarea debe renunciar, por su propia voluntad, a su acceso a la CPU en algn momento de su funcionamiento. Esto suena como que estamos bloqueando el sistema operativo, pero si cada una de las tareas que est escrita correctamente esto no ser realmente as. La ventaja es que la tarea devuelve el control en un momento de su eleccin, por lo que puede controlar el almacenamiento de su propio contexto y no es necesario gastar memoria extra en el control central. La planificacin cooperativa es poco probable que sea tan rpida en respuesta a los ajustados plazos como la planificacin pre-emptiva. Sin embargo, necesita menos memoria y puede cambiar de tarea rpidamente. Esto es muy importante en los pequeos sistemas, como los basados en microcontroladores PIC. 5.3.6.- El papel de las interrupciones en la planificacin. Hasta el momento, no hemos mencionado a las interrupciones en relacin con el RTOS. Deben ser las RSIs otras tareas del RTOS?, como se hizo en la estructura de la figura 5.4. La respuesta es no. El empleo de las interrupciones es casi siempre para proporcionar el tick de reloj, a travs de la interrupcin del temporizador. Ms all de esto, las RSIs generalmente son utilizadas para suministro de informacin urgente a las tareas o al planificador. La interrupcin puede, por ejemplo, configurarse para sealar un determinado evento que se ha producido, liberando por tanto una tarea de un estado de bloqueado (Figura 5.7). Las RSIs en s mismas no son empleadas normalmente como tareas.
Pg. 14/22
INFORMTICA INDUSTRIAL II
Pg. 15/22
INFORMTICA INDUSTRIAL II
Una forma de ver las prioridades es considerar como de importante es una tarea para el funcionamiento y buen comportamiento del sistema, su usuario y el entorno. Las prioridades pueden entonces asignarse: Mxima prioridad: las tareas esenciales para la supervivencia del sistema. Media prioridad: las tareas esenciales para la correcta operacin del sistema. Baja prioridad: las tareas necesarias para la adecuada operacin del sistema. Estas tareas pueden ser de vez en cuando descartadas o bien un retraso en su conclusin podra ser aceptable.
Pg. 16/22
INFORMTICA INDUSTRIAL II
Pg. 17/22
INFORMTICA INDUSTRIAL II
5.7.2.- Versiones de Salvo y referencias. Hay una serie de versiones de Salvo disponibles. La versin ms completa es Salvo Pro, una versin altamente configurable y con todas las posibilidades. La versin gratuita de Salvo, llamada Salvo Lite, contiene un subconjunto de la funcionalidad de Salvo. Salvo Lite se puede descargar desde el sitio web: http://www.pumpkininc.com/ . Se debe seleccionar la versin que coincide con el compilador en uso, en nuestro caso el compilador Microchip C18. Salvo Lite permite tres tareas y cinco eventos. Esto parece muy poco, pero de hecho resulta til y permite crear avanzados programas. Salvo, viene con un largo pero legible manual de usuario. Este est escrito para dar soporte a todas las versiones de Salvo, hasta Salvo Pro. Para el principiante, con el objetivo de utilizar Salvo Lite, algunos captulos pueden ser enormes. Sin embargo, tiene buena informacin y captulos introductorios. 5.7.3.- Configuracin de la aplicacin Salvo. Una de las principales caractersticas de Salvo es que es altamente configurable. Por lo tanto, es importante tener una idea desde el principio de cmo se lleva a cabo esta configuracin. Esta seccin introduce algunas de las caractersticas esenciales de los ficheros de Salvo y de su configuracin, y dar lugar a una mejor comprensin del proceso de creacin de programas mostrado en la Figura 5.9.
Pg. 18/22
INFORMTICA INDUSTRIAL II
5.7.3.1.- Programacin de aplicaciones Salvo - construir la librera. Diferentes bibliotecas estn disponibles para su uso, cada una con un conjunto distinto de caractersticas. Para una aplicacin dada, debe elegirse la biblioteca ms adecuada. Una vez hecho esto, los servicios de la librera son fijos. El cdigo fuente del usuario, hace llamadas a las funciones de Salvo que figuran en la librera elegida. Aparte de los archivos de biblioteca, fuente y de cabecera algunos otros deben ser incorporados, como se ve en la Figura 5.9. Los ms importantes son los siguientes: salvo.h. Este es el principal archivo de cabecera de Salvo y debe incluirse en cualquier archivo fuente que utiliza los servicios de Salvo. No debe ser modificado por el usuario. Este archivo a su vez incluye salvocfg.h. mem.c. Se trata de un gran archivo, que se suministra con Salvo. Posee objetos globales, que definen las caractersticas de los elementos utilizados, como tareas, semforos, etc. No debe ser modificado por el usuario, aunque el contenido de salvocfg.h modifica su comportamiento. salvocfg.h. Este archivo, escrito por el usuario, determina gran parte de la configuracin del sistema para la aplicacin. Establece ciertos elementos clave, como las libreras que se van a utilizar, y cmo sern muchas de las tareas y eventos. Se ofrecen ms detalles en la seccin 5.10.4.
5.7.3.2.- Las libreras de Salvo Existen diferentes conjuntos de libreras para cada compilador y para distintas versiones del compilador. Estas soportan varios modelos de memoria y diferentes combinaciones de caractersticas. Una de las habilidades para la configuracin de una aplicacin Salvo es la seleccin de la libreras que tiene las mnimas caractersticas necesarias, y nada ms.
Pg. 19/22
INFORMTICA INDUSTRIAL II
Salvo Lite se proporciona con un conjunto de libreras gratuitas. Estas son como las libreras estndar, pero tienen una capacidad limitada. La codificacin utilizada para el compilador de C18 se muestra en la Figura 5.10. La ltima letra del nombre de la librera indica la configuracin, que se define en la Figura 5.11. La librera Sfc18sfa.lib, por ejemplo, tiene todas las caractersticas, excepto time-outs. Esto hace que comparativamente sea una gran biblioteca. Si slo se necesitan la multi-tarea en una aplicacin, sera mejor utilizar una biblioteca con la letra 'm' de configuracin. Esto dara lugar a una codificacin ms eficiente y menor uso de memoria.
5.7.4.- Escritura de programas con Salvo. Esta seccin da una introduccin a la programacin con el RTOS Salvo, antes nos fijamos en un primer programa de ejemplo en la seccin que sigue. 5.7.4.1.- Inicializacin y planificacin. Varias caractersticas del RTOS Salvo estn contenidas dentro de sus funciones en C, que se encuentra en las libreras de Salvo. Parte de la habilidad de programacin con Salvo radica en conocer estas funciones y entender lo que hacen. Algunos ejemplos, exactamente los que se utilizarn en nuestro primer programa de ejemplo, estn en la Figura 5.13.
Pg. 20/22
INFORMTICA INDUSTRIAL II
En la figura aparece el nombre de la funcin o servicio, un resumen de su accin y los parmetros (si los hubiera) que necesita. El contenido de la tabla se explica varias veces en las prximas pginas, no preocuparse si todos los detalles no son inmediatamente evidentes. Funcin / Servicio OSInit() Accin y parmetro(s) Inicializa el sistema operativo, incluyendo estructuras de datos, puntero y contadores. Debe ser llamado antes de cual El planificador de Salvo. En cada llamada escoge la siguiente tarea a ejecutar (de las elegibles). La multitarea puede ocurrir cuando se llama de forma repetida. No tiene parmetros Retorno incondicional al planificador (1) Etiqueta de cambio de contexto, definida mediante _OSLabel() Crea una tarea y la inicia (la hace eligible). (1) Puntero a la direccin de comienzo de la tarea Normalmente el nombre de la tarea (2) Puntero al TCB (Bloque de control de la Tarea) (3) Prioridad un nmero de 0 (ms alta) a 15 (ms baja) Hace elegible una tarea detenida. (1) Puntero al TCB de la tarea Define una etiqueta nica necesaria para cada cambio de contexto (1) Nombre de la etiqueta Define un puntero a un bloque de control especfico, en este caso al bloque de control de la tarea. (1) Un entero de 1 a OSTASKS, donde OSTASKS aparece en el fichero salvocfg.h y especifica el nmero de tareas
Figura 4.13.- Servicios del ncleo de Salvo.
OSSched()
OS_Yield()*
OSCreateTask(,,)
OSStartTask() _OSLabel()
OSTCBP()
Algunas de las funciones que aparecen pueden causar un cambio de contexto; de este modo se aplica la planificacin cooperativa. Todas las funciones de Salvo que puede llamar el usuario tienen el prefijo SO o OS_ . Esta ltima se utiliza si el servicio incluye un cambio de contexto condicional o incondicional. Para habilitar e inicializar el RTOS debe llamarse a la funcin OSInit() antes que cualquier otra funcin de Salvo. Las tareas pueden ser creadas a continuacin con una llamada a OSCreateTask(), asegurndonos que todos los argumentos estn bien especificados. El programador est contenido dentro de la funcin OSSched(). En cada llamada, esta funcin hace tres cosas, que se enumeran a continuacin: Se selecciona y ejecuta la tarea ms elegible (es decir, la que tiene ms alta prioridad). Las tareas con la misma prioridad se ejecutan de forma "round robin.
Pg. 21/22
INFORMTICA INDUSTRIAL II
Procesa la cola de eventos, si se estn empleando eventos. Recordemos, los eventos incluyen semforos y mensajes. Como resultado de esto, ciertas tareas pueden llegar a ser elegibles para su ejecucin. Se procesa la cola de retardo. Los retardos en Salvo son un importante medio de control para marcar el momento en el que se ejecuta una tarea. Una vez ms, una tarea que puede llegar a ser elegible para su ejecucin.
5.7.4.2.- Escribiendo las tareas en Salvo. En Salvo cada tarea se escribe como una funcin C. Hay otros requisitos importantes, especficos de Salvo. Estos se resumen a continuacin: Todas las funciones estn inicialmente en estado "destruidas". Las tareas deben ser creadas con la funcin de Salvo OSCreateTask (). Pueden crearse en cualquier lugar del programa. En la prctica, la mayora son creadas al principio de la funcin principal. Las tareas estn generalmente constituidas por una inicializacin opcional, seguida por un bucle infinito, que debe contener al menos un cambio de contexto. El cambio de contexto puede producirse por una llamada a la funcin OS_Yield (), aunque existen otras funciones que tambin causan cambio de contexto. Con esta (o equivalente) llamada, la tarea renuncia a tener el control de la CPU y le pasa el control de nuevo al planificador. Esta es la base de la planificacin cooperativa utilizada por Salvo. Las tareas no pueden tener ningn parmetro. Las tareas utilizan variables estticas (static), por lo tanto, los datos no se modifican cuando la tarea no se est ejecutando. Las variables de tipo auto se pueden utilizar si no es necesario que se mantengan los datos tras un cambio de contexto.
Las caractersticas operativas de una tarea estn contenidas dentro de su bloque de control de tarea (TCB). Este es un bloque de memoria asignada de forma nica a la tarea, que contiene (entre otras cosas) la direccin de inicio de la tarea, su estado y su prioridad. Las tareas, en general, siguen el diagrama de estado de la Figura 5-7, con interpretaciones especificas de Salvo para cada Estado.
Pg. 22/22