Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
Descarga este documento en formato PDF - Ucontrol
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
6 de 22<br />
statistics: le indica al compilador que lleve las estadísticas de las tareas, esto sirve para conocer que tiempo<br />
consume cada tarea <strong>en</strong> ejecutarse, sin embargo como veremos más adelante, la estadística realm<strong>en</strong>te<br />
importante es la que nos indica si nuestra tarea se ha sobrepasado <strong>en</strong> su tiempo mínimo de ejecución.<br />
#TASK: Opciones para las tareas:<br />
rate: especifica con que frecu<strong>en</strong>cia se ejecuta la tarea, <strong>este</strong> parámetro debe ser igual a minor_cycle de<br />
#use_rtos o un múltiplo de <strong>este</strong> valor.<br />
max: especifica que cantidad de tiempo debe consumir esta tarea <strong>en</strong> su ejecución, si se sobrepasa <strong>este</strong> tiempo<br />
y están activadas las estadísticas, <strong>en</strong>tonces esta tarea es marcada con el valor overrun. Este parámetro es útil<br />
para informar al programador que una tarea se ha pasado de su tiempo de ejecución, y si el RTOS fuera de<br />
tiempo compartido seguram<strong>en</strong>te especificaría el tiempo <strong>en</strong> que el planificador le retira el procesador para<br />
dárselo a otra tarea.<br />
queue: especifica el tamaño de la cola de m<strong>en</strong>sajes de la tarea. Si la tarea no recibe m<strong>en</strong>sajes, <strong>en</strong>tonces debe<br />
dejarse <strong>en</strong> blanco para no consumir memoria RAM innecesariam<strong>en</strong>te.<br />
Hasta aquí hemos visto una pequeña explicación de las directivas para utilizar el RTOS. Sin embargo, la<br />
utilidad de esto es mejor verla con un ejemplo.<br />
[Volver al Índice]<br />
> Funciones del RTOS<br />
EL RTOS de CCS ofrece un conjunto de funciones que veremos cada una <strong>en</strong> su mom<strong>en</strong>to y con sus debidos<br />
ejemplos. Sin embargo hoy utilizaremos solam<strong>en</strong>te la función rtos_run(), que le indica al planificador que<br />
comi<strong>en</strong>ce a ejecutar las tareas.<br />
El ejemplo:<br />
Se quiere implem<strong>en</strong>tar una aplicación <strong>en</strong> un PIC16F877, donde se utilice el RTOS para transmitir por el puerto<br />
serie de <strong>este</strong> uC, tres cad<strong>en</strong>as de caracteres. Cada cad<strong>en</strong>a será transmitida desde d<strong>en</strong>tro de una tarea del<br />
RTOS y t<strong>en</strong>drán el <strong>formato</strong> “Ejecutada tarea #”. Las especificaciones de tiempo del sistema y de cada tarea<br />
son las sigui<strong>en</strong>tes:<br />
Temporizador para el RTOS: Timer0<br />
Tiempo mínimo <strong>en</strong> que debe ejecutarse una tarea: 10ms<br />
Frecu<strong>en</strong>cia de ejecución de la Tarea 1: 1seg, tiempo para ejecutar: 10ms<br />
Frecu<strong>en</strong>cia de ejecución de la Tarea 2: 2seg, tiempo para ejecutar: 5ms<br />
Frecu<strong>en</strong>cia de ejecución de la Tarea 3: 3seg, tiempo para ejecutar: 250us<br />
El código lo pongo a continuación y posteriorm<strong>en</strong>te les doy una explicación:<br />
Código:<br />
#include "D:\Docum<strong>en</strong>tos\Projects\RTOS\RTOS.h"<br />
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)<br />
#use RTOS(timer=0, minor_cycle=10ms) //temporizador Timer0, tiempo mínimo de ejecución de cada tarea 10ms<br />
int8 test;<br />
//Definición de las prototipos de función de las tareas<br />
#task (rate=1s, max=10ms) //Ejecutar cada 1 segundo y consumir como máximo 10ms<br />
void Tarea1();<br />
#task (rate=2s, max=5ms) //Ejecutar cada 2 segundos y consumir como máximo 5ms<br />
void Tarea2();<br />
#task (rate=3s, max=250us) //Ejecutar cada 3 segundo y consumir como máximo 250us<br />
void Tarea3();<br />
void main()<br />
{<br />
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);<br />
rtos_run(); //A partir de aquí com<strong>en</strong>zará la ejecución de las tareas<br />
}<br />
//Implem<strong>en</strong>tación de las tareas<br />
void Tarea1()<br />
{<br />
printf("Ejecutada tarea 1\r");<br />
}