Vous êtes sur la page 1sur 27

Curso de FreeRTOS para microcontroladores PIC Clase 1.

Introduccin

Prof. Ing. Reinier Torres Labrada

La Habana. junio de 2010

Licencia

Reinier Torres Labrada. Algunos derechos reservados Obra liberada bajo licencia Creative Commons by-nc-sa. Bajo los trminos de la licencia usted tiene los siguientes derechos y responsabilidades:

Reconocimiento (Attribution): En cualquier uso que haga de esta obra deber reconocer su autora.

No Comercial (Non commercial): La explotacin de la obra queda limitada a usos no comerciales. El uso comercial de esta obra debe ser autorizado por sus autores.

Compartir Igual (Share alike): Se permite la creacin de obras derivadas si estas mantienen los mismos trminos de esta licencia al ser divulgadas.

Puede encontrar informacin adicional sobre las licencias CC en el sitio: http://es.creativecommons.org/ El siguiente enlace ofrece informacin detallada sobre las licencias http://es.creativecommons.org/licencia/ El texto ntegro de la licencia puede ser consultado en el siguiente enlace: http://creativecommons.org/licenses/by-nc-sa/3.0/es/

Software empleado

Este texto ha sido confeccionado con software libre, sin la intervencin de ningn paquete o herramienta de software privativo. Han sido utilizados los siguientes programas:

GNU/LINUX En sus distribuciones Ubuntu y Debian


A LYX 1.6.x Un editor de textos para L TEX

TEX Lenguaje de composicin con capacidad para macros.


A L TEX: Sistema de preparacin de documentos

GIMP 2.6.x Programa de manipulacin de imgenes de GNU Inkscape 0.46 Editor de grcos vectoriales GNU GEDA 1.4.x Automatizacin de Diseo Electrnico GPL Mozila Firefox 3.0.x Navegador Web highlight Programa de resaltado de sintaxis

Y muchos, muchos otros paquetes de software del mundo GNU!


Los programas de ejemplo, y capturas de pantalla han sido realizados, fundamentalmente con software privativo debido a que el soporte para el desarrollo de aplicaciones para PIC existe y funciona solamente en el sistema operativo Windows. Todos esos paquetes son propiedades de sus respectivos dueos y estn protegidos por sus respectivas licencias. En este documento solamente se utilizan capturas de pantalla Los programas de ejemplo elaborados por el profesor estn protegidos por la licencia GPL, por lo que constituyen software libre. Las libreras de Microchip, el cdigo fuente de FreeRTOS y otros programas utilizados en este curso estn protegidos por sus respectivas licencias.

Antes de comenzar

Existen muchos defensores en el mundo del desarrollo de aplicaciones para microcontroladores que preeren el ensamblador como nico mtodo de programacin que asegura que el diseador es un verdadero profesional. Por otra parte, los microcontroladores han llegado a un grado de desarrollo que permiten el uso de lenguajes de alto nivel como C. Recientemente las capacidades de memoria de datos y programa, as como las organizaciones del hardware de los microcontroladores hacen posible la utilizacin de sistemas operativos. Justicar el uso de un sistema operativo en el desarrollo de una aplicacin para un sistema empotrado, es sin lugar a dudas, una tarea complicada e incluso ingrata. Para ello habra que satisfacer el gusto y cambiar el criterio de muchas personas, con opiniones diversas, que esgrimen argumentos y justicaciones reales y acertadas para su punto de vista. Yo considero que no existe la mejor herramienta de desarrollo, ni el microcontrolador absoluto, sino que la mejor herramienta de desarrollo es el desarrollador y el mejor microcontrolador es el que se ajusta de forma precisa a las demandas de la aplicacin a implementar. En este entorno tan diverso y complejo, un buen desarrollador debe ser capaz de dominar ms de una tcnica de programacin y ms de una familia de microcontroladores, de modo que pueda ajustarse a las necesidades especcas de cada aplicacin y utilizar el dispositivo adecuado y la tcnica apropiada para el desarrollo de rmware. El presente curso pretende cubrir el uso de una tcnica de desarrollo especca: el sistema operativo de tiempo real FreeRTOS y el uso de las cuatro familias de microcontroladores PIC que tienen soporte en FreeRTOS: PIC18, PIC24, dsPIC y PIC32. A travs de exposiciones tericas y ejemplos de cdigo iremos introducindonos poco a poco en el fascinante mundo del desarrollo de rmware para microcontroladores con esta tcnica de desarrollo de aplicaciones, de modo que podamos sacar el mximo aprovechamiento de las capacidades de procesamiento de nuestros microcontroladores.

En esta clase

Requisitos para seguir el curso Por qu un sistema operativo? Que signica tiempo real? FreeRTOS. Primer vistazo De las tareas y otros demonios

Requisitos para seguir el curso

Utilizar con facilidad el entorno de desarrollo MPLAB de Microchip Dominar la programacin en C, es preferible que se tengan slidos conocimientos de programacin con este lenguaje y un dominio total del uso de punteros, directivas del preprocesador y macros. Saber utilizar los compiladores C18, C30 y C32, en especco las funcionalidades asociadas al manejo de interrupciones. Tener una buena disciplina de programacin; ello le ayudar a comprender los ejemplos de cdigo y desarrollar aplicaciones con el mismo estilo que los miembros de la comunidad de FreeRTOS. Dominar al menos una de las arquitecturas de las familias de microcontroladores que cubre el curso, preferiblemente dos de ellas. Dedicar al menos unas 6 horas semanales a estudiar y practicar en el uso de las tcnicas explicadas y adaptar los ejemplos de cdigo para poder desarrollar habilidades propias. Consultar la literatura complementaria que oriente el profesor.

Por qu un sistema operativo?

Las razones de por qu utilizar un microcontrolador en lugar de otro o una tcnica de desarrollo de rmware en vez de otra no puede estar subordinada nicamente a los conocimientos del desarrollador o la preferencia de este, por una familia o fabricante de semiconductores. Todo el proceso de seleccin de componentes y tcnicas de desarrollo debe estar determinada por las caractersticas de la aplicacin y sus restricciones, de modo que si el desarrollador est en desventaja porque no domina el estado de arte; deber sobreponerse a ello, y actualizarse so pena de perecer o quedar relegado a un nicho de desarrollo de menor importancia. Este es un mundo donde el ms adaptable es el que puede aprovechar las mejores oportunidades, y actualmente, los sistemas operativos empotrados estn a la vanguardia en el campo de las tcnicas de desarrollo de rmware para microcontroladores. Mi intencin con este curso no es entrar en una batalla losca sobre la pertinencia o no de utilizar un sistema operativo en un microcontrolador; sino facilitar a los participantes los elementos que les permitan utilizar FreeRTOS en microcontroladores PIC en forma ecaz y eciente. En el curso iremos tratando cada tema, mediante ejemplos prcticos, y con explicaciones y demostraciones en el campo terico, que contribuyan a convertirnos en mejores desarrolladores de aplicaciones para sistemas empotrados. Sin embargo, para determinar si usted requiere o no de un sistema operativo para solucionar una aplicacin determinada conteste las siguientes preguntas, aunque existen otros elementos a tener en cuenta, estos puden ser de gran utilidad.

Qu nivel de complejidad tiene su aplicacin? En la medida que una aplicacin crece en complejidad desarrollarla y mantenerla se convierte en una tarea agotadora y difcil, y puede llegar a impactar sensiblemente en el desempeo del sistema e incluso consumir recursos que se podran optimizar con un sistema operativo. Usualmente, tareas complejas suelen requerir microcontroladores ms complejos, con ms perifricos, lneas de E/S, memoria de datos y programas. Por lo que en este caso lograr un buen aprovechamiento del hardware est determinado fundamentalmente por la tcnica de programacin a utilizar, lo cual puede impactar sensiblemente en aspectos como: Tiempo de salida del producto. Si su producto va a parar al mercado, recuerde siempre que 1

Por qu un sistema operativo? el que sale primero se lleva la mejor parte del pastel. Costo nal de implementacin. Normalmente el mayor costo en el desarrollo de un nuevo sistema est determinado, en gran medida, por la cantidad de horas/hombre. Aprovechar los recursos humanos es fundamental, mientras menos tiempo dedique a una aplicacin, ms de ellas podr desarrollar. Costo de producin por unidad. Una buena tcnica de desarrollo podra aprovechar mejor la memoria y el procesador del microcontrolador y permitir el uso de un dispositivo menos costoso; sin que por ello se sacriquen funcionalidades y desempeo. Cantidad de desarrolladores. Si dos personas o ms trabajan en un proyecto, es muy probable que tengan su propio estilo y mtodo de trabajo, un sistema operativo impone que se hable el mismo idioma y se utilice el mismo estilo de trabajo. Es posible utilizar un sistema operativo en el microcontrolador seleccionado? Si su microcontrolador no soportar al sistema operativo o utilizarlo lo dejar sin recursos para desarrollar su aplicacin, entonces valore cambiar el dispositivo, si eso no es posible, entonces no queda otro remedio que renunciar a l. Qu tan cmodo se siente programando con un sistema operativo? En mi experiencia, una vez que usted domine el uso de un sistema operativo, se sentir tan a gusto con l que le costar trabajo utilizar otra tcnica de programacin1 . Sin embargo, tambin he observado que es muy difcil lograr que las personas soporten el proceso de aprendizaje asociado al dominio de un sistema operativo y podra darse el caso de que a usted nunca le guste esta tcnica2 . Requiere su aplicacin algn tipo de certicacin sobre el rmware? Hay aplicaciones que deben ser desarrolladas siguiendo normas de calidad muy estrictas y ello debe ser demostrado ante autoridades homologadoras o gubernamentales, por lo que es muy difcil que las tcnicas tradicionales3 , por s solas, garanticen estos requisitos. Los sistemas operativos pueden ser implementados para asegurar el cumplimiento de una parte de esas regulaciones y otorgarle a usted de forma indirecta la certicacin requerida. Por ejemplo, SaveRTOS, una implementacin derivada de FreeRTOS, cumple con uno de los ms fuertes estndares en seguridad.

1 2 3

Esta tcnica podra clasicarse como potencialmente adictiva, por lo que es recomendable tener cuidado Sin embargo puede que su jefe sea del bando contrario, y reir con el jefe puede que no sea una opcin para usted. Programacin en ensamblador o lenguaje de alto nivel. 2
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

Qu signica tiempo real?

El tiempo real es un trmino difcil de denir y en el caso de los sistemas operativos no existe concenso respecto de una denicin. Sin embargo, existe un criterio bastente generalizado que considera que un sistema operativo es de tiempo real si puede responder adecuadamente a los estmulos a que es sometido. Aplicando este criterio a cualquier sistema operativo podramos pensar que tiempo real signica responder a los estmulos lo ms rpido posible. Sin embargo, esto no es del todo cierto ya que al poner esta denicin en el contexto de algunas aplicaciones comunes podramos encontrar matices. Por ejemplo. Un procesador que controla el sistema de frenos de un vehculo debe ser capaz de responder al estmulo del conductor o del sistema anticolisin en una ventana de tiempo muy bien denida4 . Si el sistema falla en su respuesta al estmulo inicial y en completar las acciones requeridas, no ser de tiempo real. Adems, fallar implica tener como resultado un escenario de catstrofe. Como conclusin, este es un sistema de tiempo real estricto, ya que no se permite ni una respuesta tarda ni un completamiento de las acciones derivadas fuera de tiempo. Por otro lado, tomemos como ejemplo, al procesador de un reproductor personal de MP3. Este tambin debe ser un sistema de tiempo real, ya que la lectura y decodicacin de archivos MP3 debe ser realizada en plazos de tiempo que permitan que los datos sean convertidos de formato digital a analgico segn un orden y frecuencias establecidos. Pero si por alguna razn el sistema falla en cumplir con estas exigencias; el peor escenario sera causarle molestias a la persona que escucha msica. A este tipo de sistemas de tiempo real se les conoce como de tiempo real no estricto5 . Ahora podramos pensar que si un sistema es capaz de responder adecuadamente a los estmulos ser de tiempo real. Esta conclusin tampoco es cierta, ya que un RTOS debe garantizar otros requsitos que lo hagan merecedor de esta calicacin. Explicar cules son esos requisitos est fuera de los objetivos de este curso, pero si usted est interesado en ellos, puede consultar la abundante literatura que existe al respecto y aclarar sus dudas. Por ltimo, podramos pensar que si un sistema que utiliza un sistema operativo de tiempo real no
4 5

Implica que el sistema debe ser de carcter determinstico Es difcil traducir al espaol estas dos clasicaciones, ya que en ingls se utilizan hard real time para la primera y soft real time para esta ltima. Sin embargo al profesor no le gusta utilizar el trmino tiempo real blando porque la palabra blando no dene la caracterstica de un sistema de tiempo real no estricto.

Qu signica tiempo real? puede responder adecuadamente a los estmulos, entonces el sistema operativo no puede ostentar su ttulo. Esto es cierto para la aplicacin pero no se aplica por consecuencia al RTOS. Puede que el RTOS est bien calicado pero su sistema est mal diseado, o los desarrolladores hayan fallado en utilizarlo correctamente, quiz se ha seleccionado un procesador no adecuado o podra existir cualquier otra razn que impida que el sistema no cumpla la condicin para el tiempo real, an cuando se utilice un RTOS. FreeRTOS est clasicado como RTOS y por su diseo puede asumir tareas de tiempo real estricto. Sin embargo, eso no quiere decir que slo con utilizarlo ya tendremos un sistema de tiempo real, para ello es necesario dominar ciertas tcnicas de diseo de hardware y rmware. Es el propsito de este curso hacer nfasis en las tcnicas de diseo de rmawre para tiempo real. Como conclusin podramos sealar que este es un campo difuso, donde no hay un concenso establecido en cuanto a deniciones, razones por las cuales existe un intenso debate en los aspectos loscos ligados a estos temas. El autor pretende dejar a un lado las discusiones de este tipo y concentrarse en mostrar una tcnica para el desarrollo de aplicaciones con FreeRTOS lo ms depurada y precisa que pueda, con el inters de que los estudiantes puedan alcanzar los conocimientos y habilidades que les permitan obtener aplicaciones de tiempo real.

4
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

FreeRTOS. Primer vistazo

Existen muchos sistemas operativos que pueden ser utilizados en microcontroladores, pero no todos tienen la caracterstica de ser de tiempo real. FreeRTOS es un sistema operativo para sistemas empotrados con caractersticas de tiempo real. FreeRTOS tiene caractersticas comunes con el resto de sus parientes, y algunas propias, que poco a poco iremos viendo y analizando cada vez con mayor nivel de detalle, hasta lograr dominar cada una de sus poderosas caractersticas.

Caractersticas generales
Ncleo de tiempo real minimalista, de cdigo abierto, libre de cargos comerciales, de libre distribucin y que puede ser utilizado en aplicaciones comerciales sin que el desarrollador requiera una licencia por su utilizacin. FreeRTOS est protegido por la licencia GPL, e incluye una excepcin para permitir su uso en aplicaciones comerciales sin la obligatoriedad de que el cdigo escrito para la aplicacin tenga que ser liberado bajo GPL6 . Amplia disponibilidad de puertos7 para diferentes arquitecturas de procesadores y herramientas de desarrollo. Con cada distribucin se incluye un conjunto de aplicaciones demostrativas para ayudar al principiante a introducirse en el uso del ncleo. Soporte gratuito a travs de una amplia y activa comunidad de usuarios. Adicionalmente existe soporte comercial que incluye asistencia en la asimilacin y desarrollo de aplicaciones. OpenRTOS es una versin no protegida por la GPL y que le permite disponer de soporte comercial para el desarrollo de sus aplicaciones. Los cambios al ncleo o cheros de puerto o controladores de dispositivos pueden mantenerse en secreto y el usuario de esta licencia no est en la obligacin de reportar que tipo de software ha utilizado para la implementacin de su rmware.
6 7

Sin embargo, cualquier cambio al ncleo o a alguno de los mdulos protegido por la misma licencia quedar protegido por la licencia de FreeRTOS. Un puerto es una especie de adaptacin de FreeRTOS a un procesador o familia de procesadores usualmente vinculada herramientas de desarrollo especcas.

FreeRTOS. Primer vistazo SafeRTOS es una versin tipo SIL3 que ha sido certicada para su utilizacin en aplicaciones de seguridad crtica. Es similar en funcionamiento a FreeRTOS y cumple con el estndar IEC 61508.

Caractersitcas tcnicas
Ncleo congurabe en tres modalidades: De tiempo compartido: El ncleo siempre otorgar el procesador a la tarea de mayor prioridad que est lista para ser ejecutada. Si varias tareas estn listas para ejecutarse y comparten el mismo nivel de prioridad; se aplica la tcnica Round-Robin para determinar cul de las disponibles obtendr el procesador por el prximo perodo de ejecucin. Es el modo de trabajo por defecto. De tiempo cooperativo: Es responsabilidad de las tareas entregar el procesador para que el planicador la entregue a la tarea de mayor prioridad que est lista para ser ejecutada. Las interrupciones no pueden provocar un cambio de contexto. Hbrido: Las interrupciones pueden provocar el cambio de contexto hacia una tarea, pero el cambio de contexto entre tareas se realiza mediante la tcnica de tiempo cooperativo. Diseo minimalista que necesita muy pocos recursos para su implementacin. Dependiendo de la arquitectura del procesador se puede acomodar una implementacin mnima en el espacio de memoria requerido para 2000 instrucciones. Diseo modular, personalizable y fcil de utilizar. La mayor parte del cdigo est escrito en C estndar. Habitualmente existe una parte implementada en ensamblador, dedicada a las funcionalidades especcas de cada arquitectura de procesador. Funcionalidades para el seguimiento de tareas y estadsticas de desempeo. Soporte de tareas y co-rutinas. Deteccin de desbordamiento de pila. Sin restricciones en el nmero de tareas. Sin restricciones en el nmero de prioridades. Sin restricciones en la asignacin de prioridades, tareas distintas pueden compartir el mismo nivel de prioridad con planicacin Round-Robin. API del ncleo que incluye el manejo de: Colas Semforos binarios de conteo y recursivos Exclusin mutua
6
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

FreeRTOS. Primer vistazo Sincronizacin entre tareas o entre tareas e interrupciones Exclusiones mutuas con herencia de prioridades Herramientas de desarrollo amparadas por software libre. Cdigo fuente amparado por licencia de software libre. Libre de cargos comerciales, an cuando se utilice en aplicaciones comerciales. Aplicaciones de ejemplo disponibles para todas las arquitecturas soportadas y respaldadas en tarjetas comerciales, principalmente de bajo costo.

Por qu es una buena opcin?


Es una nica solucin que cubre diferentes arquitecturas. Es reconocido por su buen desempeo. Existe soporte comercial y otras variantes de licenciamiento y certicacin a travs de los proyectos OpenRTOS y SafeRTOS a la vez que se mantiene una alta posibilidad de reutilizar cdigo y mantener los estilos de trabajo. Soportado por una comunidad muy activa y creciente. Demanda pocos recursos de memoria RAM y ROM. El kernel est contenido en slo tres cheros de C. Usted tiene acceso al cdigo fuente y pude modicarlo y adaptarlo a sus necesidades si as lo requiere.

Y cmo trabaja?
La misin de un sistema operativo es proveer a desarrolladores y usuarios de funcionalidades para el uso eciente de los recursos del sistema de cmputo. Es conocido que el recurso ms preciado de un sistema con microprocesador es el procesador, los microcontroladores no escapan a esta realidad. Para complicar ms las cosas, el procesador consume tiempo para ejecutar cdigo as que en la mayora de los casos hacer las cosas a tiempo constituye el principal cuello de botella durante el diseo de sistemas empotrados. Adems de ayudarnos a gestionar ecientemente el procesador; FreeRTOS es una poderosa herramienta para enfrentar el problema de la complejidad de las aplicaciones, el acceso a los perifricos del microcontrolador, liberar y reservar memoria en funcin de la carga del sistema. Para ello dispone de tres elementos esenciales comunes a cualquier sistema operativo:
7
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

FreeRTOS. Primer vistazo Planicador de tareas (Scheduller) Interfaz de Aplicacin para el Programador (API) Manipuladores de dispositivos (Device Drivers)

Estas tres funcionalidades se implementan mediante funciones de librera de C estndar y cdigo especco para cada arquitectura de procesador, de este modo se garantiza la reutilizacin del cdigo del ncleo y el aprovechamiento de cualquier arquitectura que cuente con los recursos necesarios para soportar al sistema operativo.

Scheduller
Es el encargado de asignar el procesador a quin en ese momento le corresponda utilizarlo, para ello FreeRTOS tiene implementada una de las ms conocidas polticas de asignacin de recursos que se concen en el mundo de los sistemas operativos. Ms adelante entraremos en detalles acerca de cmo funciona el scheduller de FreeRTOS.

API
FreeRTOS no puede darse el lujo de implementar muchas funcionalidades porque su misin fundamental es ser ligero y rpido, as que lo que ms encontraremos ac sern las funcionalidades para sincronizacin de tareas y alguna que otra funcin para el trazado y recopilacin de estadsticas. Los sistemas operativos de propsito general acostumbran tener una API grande y compleja, pero en un microcontrolador los recursos son limitados en todo sentido, as que para suerte nuestra tendremos pocas funciones que dominar, y para desgracia, tendremos que aprender a sacarles el mximo.

Device Drivers
En el cdigo del ncleo no hay nada para esta funcionalidad. Sin embargo, en las implementaciones de los puertos podremos encontrar, usualmente, soporte para el manejo de temporizadores y UART. Por otro lado, existen muchas bibliotecas de funciones que pueden ser adaptadas o utilizadas para este propsito. La razn de la poca cantidad de manejadores de dispositivos est dada por las mismas limitaciones que existen para implementar un API poderosa y compleja. Si queremos rendimiento y tamao reducido, no podemos gastarnos todo en funciones que probablemente nunca utilicemos.
8
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

FreeRTOS. Primer vistazo A modo de resumen, podramos decir que: al utilizar un sistema operativo, lo que obtenemos es un conjunto de programas que se ejecutan y comparten el mismo dispositivo que los programas de nuestra aplicacin. Siendo el principal propsito de estos programas el hacernos la vida ms fcil en el proceso de desarrollo de nuestro proyecto, a costa de sacricar un poco de recursos8 y el esfuerzo de aprender una tcnica de programacin especca.

Aunque dependiendo de la aplicacin esta aparente desventaja desaparece por completo. 9


Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios

A las personas les cuesta mucho trabajo comprender esto de los sistemas operativos, simplemente porque no entienden la diferencia entre su modo de pensar actual9 , y el modo de pensar que se requiere para comprender este novedoso estilo de programacin. Desde mi punto de vista, no es suciente con que usted lea y trate de comprender lo que dicen los libros y manuales sobre sistemas operativos, es importante tomar conciencia de nuestro propio estilo de trabajo antes de adentrarnos en el nuevo. Al principio las ventajas no son evidentes, mientras que la complejidad y los conceptos de la programacin con sistemas operativos s resultan claros y difciles de superar. Es por ello que muchos deciden abandonar esta tcnica. Yo le propongo que se tome su tiempo y lea esta especie de novela que viene a continuacin.

Autoanlisis
Comencemos esta parte de la clase haciendo un anlisis de la forma en que habitualmente abordamos un problema de desarrollo de rmware. Para ahorrar tiempo siga mis instrucciones: Recuerde la aplicacin ms compleja que haya desarrollado con microcontroladores, ya lo hizo?. Ahora piense cuantas cosas distintas tena que hacer su programa, recuerde con detenimiento, si es posible anote en una hoja de papel y luego siga leyendo. Seguramente tendr una lista de cosas que el programa analizado realiza y muy probablemente durante el desarrollo de este programa, usted haya encapsulado mediante funciones estas cosas. Probablemente su programa tiene un programa principal. S, ese mismo, el lazo innito donde usted puso el cdigo que decide que funcin ejecutar en cada momento particular para que el sistema, en su conjunto, pueda realizar las tareas para las que fue desarrollado.
9

No es que est mal pensar de un modo particular, es que a veces no ayuda a comprender otros puntos de vista.

10

De las tareas y otros demonios Como usted debe ser un buen desarrollador, seguramente hay subrrutinas de atencin a interrupciones, y estas a su vez, son compactas y se utilizan bsicamente para cuestiones de sincronizacin con el programa principal y tareas con la E/S (Entrada/Salida). Si nunca ha trabajado con un sistema operativo, es muy probable que todos los programas desarrollados por usted trabajen de esta forma, es lo que podramos llamar el modelo de programacin del programa principal, las funciones y las ISR10 . Todos estos programas tienen un elemento comn que les permite trabajar armnicamente: la memoria de datos. La Figura 1 muestra claramente este modelo de desarollo de aplicaciones, ampliamente utilizado en el mundo de los microcontroladores y tambin en otros mbitos. A muchos podra parecerle magnco, y en muchos casos es as, simplemente porque es sencillez.

Figura 1. Modelo del programa principal+funciones+ISR

En este caso el programa principal decide, mediante encuesta que funcin se ejecutar, pero una vez que la funcin est ejecutndose el programa debe esperar pacientemente a que termine, antes de seguir encuestando las condiciones para evaluar si otras funciones deben ser llamadas o no. El nico caso en que una funcin llamada o el programa principal pueden ser interrumpidos es cuando se produce una interrupcin. Este modelo, sin embargo, tiene una desventaja intrnseca que se maniesta ms en la medida que
10 Este

trmino que se corresponde con Interrupt Service Routine. Durante este curso utilizaremos muchos trminos tomados directamente del ingls porque es lo usual en el mundo de la ingeniera. 11
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios aumenta la cantidad de cosas que el sistema debe hacer. Si adems, esas cosas tienen que hacerse respetando restricciones de tiempo en la ejecucin misma del cdigo de la cosa o en el tiempo en que la cosa debe ejecutarse, estaremos ante un problema al estilo Nudo Gordiano. He querido ser denso en mi prrafo anterior por una sola razn, si usted tuvo dicultad para entender mi trabalenguas es posible que haya recordado lo complicado que es hacer un programa principal, sobre todo, cuando su aplicacin debe hacer ms de 5 6 cosas. Ahora imagine que cada cosa de este programa que estamos analizando fuese la nica por hacer, evidentemente el programa sera muy simple. Ese es precisamente el concepto tras un sistema operativo, hacerle creer al sistema que tiene una nica tarea que hacer en cada momento, pero hacerlo de forma tal que no se note que estamos conmutando entre las distintas cosas. Por lo tanto llamaremos tarea a eso indenido que he llamado cosa. Este cambio de concepto nos permite implementar las funcionalidades como si fuesen la nica actividad a la que estar dedicado el procesador del microcontrolador, es algo as como que cada tarea es un programa principal. Sin embargo, sabemos que eso no puede ser, puesto que una aplicacin cualquiera debe hacer varias tareas diferentes, incluso relacionadas entre ellas. Entonces si cada tarea es como un programa principal? cmo se ejecutarn todas? y cuando? y si estn relacionadas entre s?. Las respuestas a estas y otras preguntas irn llegando poco a poco en la medida que descubrimos un nuevo modelo de programacin. Ahora veamos la Figura 2. Note como ha desaparecido el programa principal, sin embargo s que se mantienen las ISR, pero hay dos nuevos elementos, las tareas y el ncleo del sistema operativo. Observe que el sistema operativo es el encargado de decidir que tarea se ejecuta. Note adems, que las tareas intercambian informacin entre ellas a travs de la memoria y del ncleo del sistema operativo. Configuraciones iniciales

N ucelo del SO

Tarea en ejecuci on

Tarea

Tarea

Tarea

MEMORIA

ISR

Figura 2. Modelo de de programacin con sistema operativo

En este caso pueden estar en ejecucin una tarea, el programa principal o un ISR. Sin embargo, usted no programa nada en el ncleo del sistema operativo, sino que se concentra en hacer bien el cdigo
12
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios de las tareas. El ncleo se encargar de decidir que tarea obtendr el procesador y adems de eso, como veremos ms adelante, el ncleo puede interrumpir a una tarea que se est ejecutando. Como en el caso anterior las interrupciones pueden entrar en contexto cuando el ncleo o una tarea estn ejecutando cdigo. Respecto del primer modelo estudiado, este tiene una estructura conceptual ms esttica y tambin, puedo asegurarlo, ms funcional. Basta con tener la posibilidad de interrumpir una tarea para haber ganado una gran batalla contra el tiempo, mientras que en el primer modelo slo se poda interrumpir a una funcin mediante una ISR, aqu el ncleo tambin puede hacerlo y eso dota al sistema de una capacidad de respuesta que hasta el momento era imposible de lograr con el mtodo tradicional de programacin. Si usted ha desarrollado un modelo de programacin propio que desde el punto de vista conceptual se parece ms al mostrado en la Figura 2, entonces ha usted comenzado a desarrollar su propia versin de un sistema operativo, en ese caso, le invito a que cocentre sus esfuerzos en un sistema operativo ya establecido y de probada calidad como FreeRTOS. Observando un poco mejor podramos tener el siguiente dilogo:

Usted: No veo nada de nuevo en lo de las tareas, es precisamente lo que hacen mis programas principales. Si yo digo que mis funciones son tareas podra perfectamente expresar mi modelo utilizando la Figura 2. Yo: Usted tiene parte de la razn, el problema est en que seguramente sus programas principales no son ecaces haciendo esa funcin de administrador de recursos Usted: Y cmo puede estar tan seguro? Yo: Si por ejemplo. En la medida que su programa principal aumenta de tamao, se hace cada vez ms difcil lograr que las tareas se ejecuten cuando corresponde y las interrelaciones entre ellas se tornan cada vez ms complejas. Entonces su programa principal es un psimo administrador de recursos. Si usted no puede interrumpir una tarea mientras se ejecuta, entonces su sistema pone en peligro su capacidad de respuesta y dicilmente podra desarollar sistemas de tiempo real. Usted: Eso es verdad, pero cmo un sistema operativo me ayudar a resolver el problema de la complejidad y la gestin ecaz de recursos? Yo: Un sistema operativo no le ayudar a resolver el problema de la complejidad, sin embargo, le dar herramientas que le ayudarn a darle la vuelta de manera ecaz. Por otro lado s que le dar buenas tcnicas de gestin ecaz de recursos, algunas de las cuales lo llenarn de sorpresa.

La conversacin podra continuar, pero le propongo dejarla all y entrar rpidamente a explicar un grupo de conceptos fundamentales.
13
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios

Tareas
Ya casi hemos visto el concepto de tarea, pero vamos a denirlo claramente:

Tarea
Entidad que encapsula en s misma cdigo y memoria de datos y que acta como si fuese el nico programa en ejecucin en un sistema de cmputo.

Mi denicin puede diferir de otras, pero a nosotros nos servir muy bien para nuestros propsitos. Lea de nuevo la denicin, y observe la Figura 3, note que este bloque o entidad tiene un espacio de cdigo y uno de datos. Observe que en el espacio de datos he resaltado una parte a la que he llamado TCB11 por ser un elemento muy especial. El TCB es el espacio de memoria donde el ncleo del sistema operativo y la tarea misma almacenan parte de la informacin que permitir, entre otras cosas, decidir si la tarea puede o no ejecutarse.

Tarea
Memoria
TCB Datos

C odigo

Figura 3. Modelo de tarea

Adems, note que la tarea est rodeada por una lnea gruesa y slida, esto es as porque en principio la memoria de la tarea no debe ser afectada por otros programas. Aunque esto es cierto para sistemas de cmputo donde existen mdulos de proteccin de memoria, en los microcontroladores esto normalmente no puede asegurarse, por lo que usted debe evitar escribir en la memoria que le corresponde a una tarea desde fuera de ella. Recordemos que las tareas actan como si ellas fuesen el nico programa en el sistema. Esto es cierto si la tarea est en ejecucin, pero si no es as, es como si la tarea estuviese suspendida o congelada. De modo que la mayor parte del tiempo nuestro sistema de cmputo debe tener una tarea en ejecucin y seguramente otras tantas suspendidas o congeladas y es por ello que sus espacios de memoria de datos deben estar protegidos de posibles ataques externos. Poniendo todo junto y suponiendo que tenemos un sistema con un procesador; podramos ver un escenario como el de la Figura 4. Observe como en un sistema con un nico procesador12 solamente
11 Task 12 Dado

Control Block: Bloque de control de tarea que no hay PICs con ms de un procesador no tiene sentido referirse a sistemas multiprocesador durante este curso. 14
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios una tarea puede estar ajecutando su cdigo y accediendo a su memoria, el resto est en estado de no ejecucin o ejecucin suspendida. Tarea no en ejecuci on Tarea en ejecuci on

Figura 4. Modelo simplicado de ejecucin de tareas

Ejecucin suspendida
Este super-estado no nos sirve de mucho puesto que una tarea puede estar aqu por diferentes razones, veamos algunas:

Porque an estando lista para ejecutar cdigo, una tarea ms importante est ejecutando su cdigo. Porque la tarea misma necesita esperar por un evento. Porque la tarea termin de ejecutar su cdigo y no necesita volver a ejecutarlo hasta pasado un tiempo. Porque la tarea ha intentado acceder a un recurso compartido y este est ocupado.

Podramos extender la lista un poco ms, pero para abreviar dejmosla as porque ya podemos notar dos casos tpicos.

1. La tarea est lista para ejecutar cdigo pero no puede. 2. La tarea espera por algo.

El primer caso se conoce como tarea lista mientras que el segundo es conocido como tarea bloqueda y si aadimos el estado en ejecucin tenemos los tres estados bsicos en que puede estar una tarea. Mi modelo puede diferir de otros existentes en la literatura, de hecho es distinto del que se presenta en el manual de FreeRTOS. Sin embargo, con esta aproximacin es suciente. Ahora observe la Figura 5 y fjese en las echas que indican un cambio de estado y note que existen un conjunto de reglas que una tarea debe cumplir para pasar de un estado a otro.

15
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios

Tarea lista

Tarea en ejecuci on

Tarea bloqueada

Figura 5. Modelo de ejecucin de tareas

Observe que una tarea puede pasar directamente del estado en ejecucin a los estados lista o bloqueada y que los cambios de bloqueada a en ejecucin o de lista a bloqueada estan prohibidos. Respetando estas reglas podemos obtener un modelo de trabajo simple que nos podra permitir gestionar ecazmente el acceso de las tareas al procesador. El caso de que una tarea se bloquea a s misma porque deba esperar por un evento de alguna clase, es muy fcil de comprender. Sin embargo, no queda claro cmo es que una tarea puede pasar del estado en ejecucin a lista ya que si est lista para ejecutar cdigo, no es lgico que la tarea entregue el procesador. Para serles sincero, desde mi punto de vista, las tareas son egostas en muchas ocasiones. Si tienen el procesador y pueden estar ejecutando cdigo, ellas no lo entregarn, es por ello que se requiere la intervencin divina para quitarle el procesador a la egosta y darlo a otra pobre que lo necesita y que tambin est lista.

Planicador de tareas
Ya hemos visto que si una tarea est en condiciones de ejecutar cdigo no querr ceder el procesador, por lo que se requiere la intervencin de otro agente en este juego que le retire el procesador y se lo pase a otra. Ese agente es el planicador de tareas (scheduller) y su trabajo consiste en repartir el tiempo de procesamiento del sistema de forma que todos tengan el procesador cuando lo necesiten para hacer bien su trabajo y que nadie se aduee de l indiscriminadamente. Pero si el scheduller es un programa cmo se las arreglar para interrumpir a una tarea que est utilizando al procesador?. Esta es una pregunta que usted se har sin lugar a dudas, y es una de las cosas que siempre veo quedan sin explicar adecuadamente cuando se presenta un sistema operativo. Al nal, la entrada en ejecucin del scheduller parece cosa de brujera, sin embargo, la forma en que el scheduller entra en su contexto, se resuelve con astucia y ciencia.

16
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios El scheduller est compuesto de dos elementos esenciales para su funcionamiento:

1. El cdigo que actualiza los TCB de las tareas y que adems determina qu tarea entrar en ejecucin. 2. Una ISR que permite al scheduller entrar en contexto.

El segundo punto nos da la clave para comprender el mecanismo que permite al scheduller interrumpir la ejecucin de cualquier tarea que se encuentra ejecutando cdigo. Una vez lanzada la interrupcin, se transere el control del procesador al cdigo principal del scheduller y este despus de actualizar los TCB determinar qu tarea debe obtener el procesador. Analizando lo anterior nos damos cuenta que el scheduller consume tiempo de procesamiento como cualquier tarea, pero eso no debe preocuparnos demasiado. Si este cdigo est bien diseado y usted ha escogido el procesador adecuado o lo ha congurado para que corra a la velocidad correcta, su carga sobre el sistema no debe superar el 2 % del tiempo total disponible de procesamiento.

Mtodos de planicacin de tareas


Ya sabemos los elementos bsicos que le permiten al scheduller entrar en contexto, pero llegado el momento de decidir que tarea obtendr el procesador es cosa difcil. Por ello han aparecido una buena cantidad de mtodos de planicacin. Y en muchos casos se combinan varios de ellos para lograr un sistema con ciertas caractersticas de desempeo. Atendiendo a la forma en que se implementan, estos mtodos se pueden clasicar en dos grandes grupos:

Decisin mediante una poltica establecida slo en el cdigo del planicador. Decisin mediante una poltica establecida en la implementacin de la aplicacin.

Usted puede dejar que el planicador decida por s solo, hay varios tipos de mtodos de decisin en este caso, como por ejemplo:

Tiempo menor para completar la ejecucin Tiempo mayor para completar la ejecucin Lista circular (Round-Robin) La que lleva el mayor tiempo sin ejecutar

El problema con todas estas polticas de planicacin est en que deja fuera la habilidad del programador para inuir en el mecanismo de decisin de cuales tareas son ms o menos importantes y eso puede afectar seriamente el desempeo del sistema.
17
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios Dentro de las polticas de planicacin, en la implementacin de la aplicacin, la asignacin de prioridades es, sin lugar a dudas, la ms utilizada por ser simple y efectiva. FreeRTOS utiliza este mtodo de planicacin en el primer nivel de decisin, por lo que el equipo de FreeRTOS cosidera que usted, desarrollador, es el que sabe que debe ir primero o despus. Si FreeRTOS utilizara nicamente el mecanismo de asignacin de prioridades, estara obligado a tener una sola tarea en cada nivel de prioridades, y por consiguiente, deberamos asignar una prioridad nica a cada tarea. Este mtodo es ampliamente utilizado cuando se puede determinar la prioridad de cada tarea, pero no es prctico en muchos casos, dado que muchas tareas pueden compartir el mismo nivel de prioridad en un sistema. FreeRTOS utiliza una combinacin de polticas de planicacin, la primera es la asignacin de prioridad, y la segunda es el mtodo Round-Robin para las tareas que comparten la misma prioridad. Con esta combinacin se consigue un adecuado balance entre la experiencia del desarrollador y la reparticin justa del procesador entre tareas que tienen el mismo nivel de importancia. Resuelto el problema de repartir el procesador entre tareas que estn listas para ejecutarse podramos preguntarnos y que pasa cuando una tarea decide que debe esperar por un evento o recurso?. En estos casos la tarea hace una llamada explcita al scheduller a travs de su API, el scheduller entra en contexto y realiza su trabajo otorgando el procesador a la tarea que le corresponde en ese momento. Un mtodo similar se sigue cuando una ISR entra en contexto y gracias a ello una tarea que estaba esperando por el evento vinculado a la ISR debe comenzar a ejecutar cdigo. Todos estos casos sern expuestos mediante ejemplos prcticos posteriormente.

Marcapasos
Como habamos visto el scheduller debe entrar en contexto, cuando una tarea se ha quedado con el procesador pero este debe ser entregado a otra tarea. Eso est claro, pero: cuando es el momento de hacer que el scheduller entre en su contexto? Para lograrlo podramos pensar en un buen nmero de mtodos, sin embargo, existe uno muy simple y ecaz. Si hacemos que el sistema obligue al scheduller a ejecutar cdigo a intervalos regulares de tiempo, podremos asegurar que nadie se apodere del procesador por tiempo indenido. Para lograr lo anterior basta con asociar la ISR de un temporizador con el mecanismo que asegura la entrada en contexto del scheduller. En el caso de los puertos de FreeRTOS para microcontroladores PIC, lo anterior se logra reservando un temporizador para esta funcin, de modo que usted obtiene con ello una especie de marcapasos para su sistema y con ello garantiza la entrada del scheduller en contexto cada cierto tiempo. Si usted es de los que gusta de utilizar el TIMER1 de sus microcontroladores, puede ir renunciando a

18
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

De las tareas y otros demonios esa prctica, ya que en todos los casos este temporizador est dedicado a garantizar el marcapasos del sistema. Podra parecernos que sacricar un temporizador para que FreeRTOS pueda hacer su trabajo es demasiado, pero yo puedo asegurarle que es un sacricio que bien vale la pena y se lo demostrar posteriormente. Hago este comentario porque si usted es de los que gusta de echar mano al TIMER113 le sugiero replanicar su estrategia de uso de temporizadores.

13 TIMER1+CCP

en el caso de la familia PIC18 19


Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

Conclusiones

Hemos visto un conjunto de elementos tericos relacionados con FreeRTOs y los sistemas operativos en sentido general. Este documento no pretende ser una disertacin sobre los aspectos tericos relacionados con los sistemas operativos o FreeRTOS en particular. Mi intencin en todo momento es ofrecerle los elementos bsicos que le permitan introducirse en este campo de los sistemas operativos, y en especial FreeRTOS, usted por tanto tiene la responsabilidad de complementar sus conocimientos consultando otra bibliografa que le ayude a aumentar su nivel de conocimiento en estos temas. Durante esta clase hemos abordado los requisitos que se necesitan para seguir el curso. Es muy importante que dedique tiempo a su autopreparacin en los temas que debe dominar, porque durante el curso, siempre se asumir que usted dispone de las habilidades necesarias para comprender y utilizar los programas de ejemplo. Adems expusimos un conjunto de elementos que pueden ser de utilidad para determinar si usted realmente necesita o no un sistema operativo para poner dentro de su microcontrolador PIC. Si usted es un amante de la familia PIC16, FreeRTOS no es para usted, pero si est pensando en aprender a utilizar las familias PIC18, PIC24, dsPIC y PIC32, entonces este RTOS ser una herramienta decisiva en el aprovechamiento de las capacidades de esos microcontroladores y para aumentar su productividad. Recuerde que el concepto tiempo real es difuso y que est sometido a amplia discusin y revisin constante por parte de la comunidad cientca que se dedica al mundo de los sistemas de tiempo real. No se preocupe demasiado por ello, esa discusin no es el factor determinante en asegurar que su sistema es de tiempo real. Sin embargo, no deje de prestar atencin a este aspecto, ya que las discusiones loscas que se derivan de esta discusin, son uno de los elementos que impulsan el desarrollo de soluciones apropiadas para implementar cada vez mejores sistemas de tiempo real. Que le ha parecido el primer encuentro con FreeRTOS?. No cabe dudas que es una bendicin disponer de un software de calidad y que su cdigo fuente est disponible para que lo utilicemos, incluso en aplicaciones comerciales, sin que nos veamos obligados a pagar nada por ello. Pero mejor an es tener la garanta de soporte comercial y certicaciones de seguridad si hiciese falta para alguna aplicacin, y todo ello, sin renunciar a los programas que hayamos escrito para FreeRTOS. 20

Conclusiones He revisado las caracterticas de varios sistemas operativos que pueden correr sobre un microcontrolador y aunque otros puedan ser, segn sus desarrolladores, mejores que FreeRTOS, siempre vienen acompaados de restricciones que muchas veces hacen que los hobbystas, estudiantes o la pequea empresa queden excluidos de la posibilidad de utilizarlos. FreeRTOS y sus hermanos de pago nos ofrecen un abanico de posibilidades que ser difcil de encontrar en otros RTOSes similares. Por ltimo vimos algo de las tareas y cmo estn concebidas, qu es un scheduller, cmo trabaja, que no hay misterios en el funcionamiento de estos sistemas y que utilizados sabiamente pueden ayudarnos a darle la vuelta al problema de la complejidad en el desarrollo de sistemas empotrados con microcontoladores. Este ltimo tema puede ser ampliamente consultado en la bibliografa de referencia, no se sienta desanimado porque al principio no comprenda muchas cosas, recuerde que muchos hemos pasado por all, pero vale la pena saber que hay tras bambalinas cuando utilizamos FreeRTOS. Si aprendemos bien cmo est concebido este RTOS, entonces podremos sacar mejor partido de su uso en nuestras aplicaciones, pero ello requiere esfuerzo y dedicacin, hay que estudiar bastante respecto a los elementos tericos que rodean el mundo de los sistemas operativos.

21
Prof. Ing. Reinier Torres Labrada. Algunos derechos reservados. Liberado bajo licencia Creative Commons by-nc-sa Usted es libre de: copiar, reproducir y distribuir este documento de acuerdo con los trminos de la licencia

Vous aimerez peut-être aussi