20.04.2013 Views

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

Descarga este documento en formato PDF - Ucontrol

SHOW MORE
SHOW LESS

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 />

}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!