Hola
Intentando desviar mi atención de la fiebre navideña decidí comenzar con el rtos de ccs asunto al cual le tengo ganas ya de tiempo y es el motivo principal por el que decidí comenzar con ccs, ya que como es sabido por todos ccs lo integra y digamos que es la forma mas fácil de comenzar a entender esto del rtos.
Pues bien gamas pensé en atorarme a los dos segundos de comenzar con el asunto lo cual me frustra en exceso me explico.
Según el excelente tutorial de reiniertl el minor_cycle debe ser menor o igual al desbordamiento del tmr que se utilice en este caso el tmr0, en los ejemplos se maneja un valor para el minor_cycle de 10ms y no encuentro como es que asido calculado este valor
Según yo como entiendo que esta configurado el tmr0 es así
#use RTOS(timer=0, minor_cycle=10ms) //temporizador Timer0, tiempo mínimo de ejecución de cada tarea 10ms
Por lo que entiendo en esta línea se esta precargado en tmr0 con un valor de cero
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
En esta en tiendo que el preescaler esta 1:1
Considerando que el cristal usado esta a 20mhz
Con estos valores el pic timer me da un resultado de 0,0512ms
Entonces como es que se obtiene el desbordamiento cada 10ms ¿??
Como es que se configuro el tmr0 para obtener el valor de 10ms??
Espero que alguien pueda darme luz en este asunto, como pueden ver estoy atorado en algo súper esencial para el rtos la base de tiempo.
También copie el primer ejemplo de dicho tutorial y resulta que siempre ejecuta la tarea 1 y no tengo ni jodida idea de porque lo hace pego el código, seguramente algo estoy configurando mal.
Como siempre les agradezco cualquier comentario y felices fiestas
#include <16f877a.h>
#fuses HS,NOWDT,NOLVP,NOPROTECT,NOPUT,NOBROWNOUT,NODEBUG
#use delay(clock=20000000)
////////////////////////////////////////////////////////////////////////////////
// Canal de Comunicación : usart
////////////////////////////////////////////////////////////////////////////////
#define TTL_TX PIN_C6
#define TTL_RX PIN_C7
#use rs232(baud=9600, xmit=TTL_TX, rcv=TTL_RX)
#use RTOS(timer=0, minor_cycle=10ms) //temporizador Timer0, tiempo mínimo de ejecución de cada tarea 10ms
int8 test;
//Definición de las prototipos de función de las tareas
#task (rate=1s, max=10ms) //Ejecutar cada 1 segundo y consumir como máximo 10ms
void Tarea1();
#task (rate=2s, max=5ms) //Ejecutar cada 2 segundos y consumir como máximo 5ms
void Tarea2();
#task (rate=3s, max=250us) //Ejecutar cada 3 segundo y consumir como máximo 250us
void Tarea3();
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
rtos_run(); //A partir de aquí comenzará la ejecución de las tareas
}
//Implementación de las tareas
void Tarea1()
{
printf("Ejecutada tarea 1\r");
}
void Tarea2()
{
printf("Ejecutada tarea 2\r");
}
void Tarea3()
{
printf("Ejecutada tarea 3\r");
}