TAREAS


Hasta ahora todos nuestros programas consistían en una sola tarea. Pero los programas pueden tener varias tareas. También es posible poner trozos de código en los llamadas subrutinas que pueden utilizarse en diferentes lugares de tu programa.
El Uso de tareas y subrutinas hace que tus programas sean más fácil de entender y más compactos. En este capítulo se estudiarán las diversas posibilidades.

Un programa consta de 255 tareas como mucho; cada uno de ellas tiene un nombre único. La tarea principal tiene el nombre  main siempre existirá, ya que ésta es la primera tarea a ejecutar. Las otras tareas se ejecutarán sólo cuando  una tarea les dice que se ejecutan o que están expresamente previstas en el principal; la tarea principal  debe terminar antes de que se puedan iniciar. A partir de ese momento, ambas tareas se están ejecutando simultáneamente.
 

Te voy a enseñar el uso de las tareas. Queremos hacer un programa en el que el robot de se mueva en cuadrados. Pero cuando se toca un obstáculo que debe reaccionar a ella. Es difícil hacer esto en una tarea, porque el robot debe hacer dos cosas al mismo tiempo: moverse alrededor (es decir, encendido y apagado de motores) y controlar los sensores. Por lo tanto, es mejor utilizar para ello dos tareas, una tarea en que se mueve y la otra en la que reacciona ante los sensores. Aquí está el programa.
 

La principal tarea sólo establece el tipo de sensor y luego se inicia las otras tareas, agregandolas en la cola del programador; después de esto, termina la tarea principal. La tarea Move_square  hace que el robot se mueve siempre en cuadrado. La  Tarea check_sensors controla si el sensor de contacto se empuja y, de ser así, lleva al robot fuera de obstáculo.
 

Es muy importante recordar que las tareas comenzadas se están ejecutando en el mismo momento y esto puede llevar a resultados inesperados, si ambas tareas están tratando de mover los motores, ya que están destinados a hacerlo.


Para evitar estos problemas, hemos declarado un extraño tipo de variable, mutex (que significa la exclusión mutua): podemos actuar en este tipo de variables sólo con las funciones Acquire (adquisición) y Release (lanzamiento), la escritura crítica de código entre estas funciones, asegura que sólo una tarea a la vez puede tener un control total sobre los motores.
Estas variables de tipo mutex se llaman semáforos y esta técnica se denomina programación concurrente.