Autor Tema: Dicusión sobre RTOS  (Leído 26658 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Dicusión sobre RTOS
« en: 16 de Febrero de 2007, 10:27:20 »
Este Post se crea con el objetivo de mantener la cordial discusión que nos caracteriza en este foro sobre el tema de la programación con RTOS. Si has leído el post Sistemas Operativos en PIC o quieres hacer alguna pregunta sobre el desarrollo de aplicaciones con este tipo de herramienta, este es el lugar para hacerlo.

Sin embargo, si lo que te interesa es conocer o participar en la programación de un RTOS, entonces te sugiero que te dirijas al hilo del amigo Darukur: RTOS para PIC GNU Lo mismo ocurre si tus dudas con los RTOS están asociadas al RTOS LMOS desarrollado también por Darukur, ya que es mejor ventilar temas sobre LMOS directamente con su padre :-).

Todas las preguntas o sugerencias son bienvenidas, y por supuesto, trataremos de responderlas a la mayor brevedad y de la forma más clara posible.

Reinier
« Última modificación: 16 de Febrero de 2007, 10:34:10 por reiniertl »

Desconectado Darukur

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 464
    • Informacion, recursos y ejemplos para desarrollos con microcontroladores
Re: Dicusión sobre RTOS
« Respuesta #1 en: 18 de Febrero de 2007, 02:24:17 »
Hola reiniertl, me gustaria ya que veo tu capacidad de enseñanza (que no es mi fuerte  :mrgreen: ), si te interesa armar para el RTOS LMOS algun tipo de manual, documentacion o instructivo.
A esto tambien sumarle ejemplos de uso con algun requerimiento especifico.
Serviria para aumentar el interes de todos los foreros por los RTOS.
Saludos y gracias.

Marcelo
El que no sabe lo que busca no entiende lo que encuentra.
Mi Pagina Web:  http://www.sistemasembebidos.com.ar
Mi foro:             http://www.sistemasembebidos.com.ar/foro/

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Dicusión sobre RTOS
« Respuesta #2 en: 21 de Marzo de 2007, 14:09:08 »
tengo una duda:

con esto del RTOS ¿se puede decir que se está separando la programación de la parte física del PIC?, es decir, porque todavía siento que aún usando lenguaje C se está trabajando casi a nivel bajo y ya es hora de que sea el compilador el que se encargue de hacer las operaciones de I/O mientras que al programador solo le toque escribir las tareas a ejecutarse.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Dicusión sobre RTOS
« Respuesta #3 en: 21 de Marzo de 2007, 14:46:59 »
Para nada, eso puede ourrir con un SO más sofisticado como Windows o GNU/LINUX, con los RTOS no, al menos con estos RTOS tendrás que encontrar un equilibrio entre el diseño empleando las potencialidades del RTOS y la programación tradicional.

Si bien el RTOS te ofrece un conjunto de herramientas para hacer más comodamente un montón de tareas que antes debías hacer tú personalmente, este no elimina la neecsidad de escribir código para manipular los periféricos del PIC y la E/S de puertos, solo que ahora este proceso puede gestionarse mejor (o peor dependiendeo de cuan bien pensado esté el diseño).

Reinier

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Dicusión sobre RTOS
« Respuesta #4 en: 23 de Marzo de 2007, 17:27:22 »
Citar
Saludos Reinertl,
Te felicito una vez mas por la exelente introducción que estas brindando a cerca de los RTOS.
Quiesiera que me aclares una duda referente al ejemplo q has mostrado en la sección de Insertar Cita
¡Interrupciones! ¡A MÍ!
Tengo entendido q utilizas 2 Pic 16F877 los cuales estan interconectados a traves de su respectiva interfaz serial (USART). Hasta ahi me queda todo claro...lo q no logro entender es si el 2do. Pic q hace de receptor de la cadena del otro y luego lo retransmite...hacia donde...? Es hacia el primero...? Puesto q el Pic solo posee una interfaz fisica ( el primer pic no posee una rutina para la recepcion, aunque entiendo q no habra colision simplemente la cadena retransmitida no tendrá un receptor.. )....la cual esta configuarada al principio....(directiva #use rs232(...)). Si quisieramos debugear en Hardware seria mas interesante retransmitirlo hacia la PC...obviamente a traves de otro puerto USART simulado por soft.

Desde ya gracias..y que siogas adelante, ya que el curso se esta volviendo cada vez mas interesante

Bien el segundo PIC solamente recibe una cadena del primero, por lo que le queda libre su pin Tx, para retransmitir hacia donde quieras conectarlo. Es cierto que en una aplicación seria esto no estaría de este modo, pero para los propósitos de enseñanza me pareció bien. Si descargaste el archivo con la simulación en PROTEUS te habrás dado cuenta que al pin Tx del 2do PIC le conecté un VirtualTerminal para que cuando corras la simulación aparezca impreso en pantalla el dato que este PIC toma del primero y lo retransmite.

Espero haber aclarado tu duda.

Por supuesto que las variaciones al código y al circuito pueden ser muchas, eso queda para la tarea de ustedes, de acuerdo a los intereses y posibilidades de cada cual. Sería bueno poner una tarea en el 2do PIC que de acuse de recibo del mensaje enviado por el segundo PIC y que retransmita el mensaje hacia la PC mediante un puerto simulado, etc. Pongan a volar su imaginación.

Un saludo Reinier
« Última modificación: 23 de Marzo de 2007, 17:31:05 por reiniertl »

Desconectado Y@el

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 415
Re: Dicusión sobre RTOS
« Respuesta #5 en: 04 de Octubre de 2007, 13:04:12 »
Saludos Reiniertl,

He estado practicando con el RTOS del CSS, y queria ver aca un programa que estoy haciendo.

En si la idea es muy sencilla. Y mi solucion me parece que muy complicada. Pero la idea era ir practicando RTOS, y nada como un ejemplo aplicativo, para entenderlo.

Motivacion
Antes que nada decirles, que debido a mi actual trabajo, el tiempo me es escaso.
Pero el otro dia, un amigo me comento que queria un timer que debe funcionar solo 6 horas al dia, y luego el resto de tiempo mantenerse apagado.
Y ante eso se me ocurrio la idea de ayudarlo, haciendo un programa con pic. Que prenda un Rele y se apague, de acuerdo a lo indicado.
Una vez hecho, se me vinieron las interrogantes:
* ¿Porque no configuro el tiempo?
* ¿Porque no crear un Reloj que me indique el tiempo que esta funcionando?
Y asi sucesivamente....

Y que tiene de especial?
1.- Control de Tareas por RTOS - Timer 1
2.- Configuracion de Tiempos via RS232.(Manejando la interrupcion int_RDA, del ejemplo Interrupciones Ami).
3.- Reloj del Sistema Manejado por Interrupcion de Timer 0 (Esto trate de manejarlo con el RTOS), pero no me fue muy eficiente.(Siguiendo el Ejemplo del Maestro RedPic)
4.- Graba la hora Actual en la EEPROM, usando para esto una tarea separada sin afectar las demas tareas. Usando para esto rtos_yield();

Aca el codigo
Código: C
  1. #include <16F628A.h>
  2.  
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES HS                       //Resistor/Capacitor Osc with CLKOUT
  5. #FUSES NOPUT                    //No Power Up Timer
  6. #FUSES NOPROTECT                //Code not protected from reading
  7. #FUSES NOBROWNOUT               //No brownout reset
  8. #FUSES MCLR                     //Master Clear pin enabled
  9. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  10. #FUSES NOCPD                    //No EE protection
  11.  
  12. #use delay(clock=4000000)
  13. #use rs232(baud=1200,xmit=PIN_B2,rcv=PIN_B1)
  14.  
  15. #include "string.h"
  16. #use RTOS(timer=1, minor_cycle=1ms)
  17. #byte EECON1=0x9C
  18.  
  19. char cBuffer[6]; //Aqui guardamos el texto a enviar por el puerto serie
  20. char comando[6];
  21. int8 iBuffer; //Indice en el buffer para ir llenandolo
  22. int8 semaforo;
  23. int8 horas,minutos,segundos=0;//Variables de la Hora del Sistema
  24. int8 mApago,hApago;
  25. int8 mPrendo,hPrendo;
  26. int8 hora,minuto;
  27. int8 estado=0;
  28. int const RTCCxS=134; // Número de RTCC's para 1 segundo con 4 Mhz / 1:256.
  29. // VARIABLES GLOBALES
  30. int nRTCC=0x00;           // Contador de interrupciones RTCC completas
  31.  
  32. #int_RTCC                 // Interrupción por desbordamiento
  33. void RTCC_isr() {  // del TIMER0 RTCC
  34.   set_timer0(32);
  35.   if(++nRTCC==RTCCxS){
  36.     nRTCC=-1;
  37.     output_toggle(PIN_A0);
  38.     set_timer0(50);    
  39.     if(++segundos>59){
  40.       segundos=0;
  41.       //nRTCC=0;
  42.       output_toggle(PIN_A2);
  43.       set_timer0(100);
  44.       if(++minutos>59){
  45.         minutos=0;
  46.         nRTCC=1;
  47.         output_toggle(PIN_A3);        
  48.         set_timer0(0);
  49.         if(++horas>23){
  50.           horas=0;
  51.           nRTCC=2;
  52.           set_timer0(119);
  53.         }
  54.       }
  55.     }
  56.   }
  57. }
  58.  
  59.  
  60. #task (rate=20ms, max=1ms, queue = 5) //Creamos una cola con 4 bytes utiles
  61. void Serial();
  62.  
  63. #task (rate=1s, max=1ms) //Creamos Tarea Comando
  64. void timer();
  65.  
  66. #task (rate=1ms, max=1ms)
  67. void disable_task();
  68.  
  69. #task (rate=10ms, max=1ms,queue=6)
  70. void grabaEE();
  71.  
  72. #task (rate=40ms, max=1ms) //Creamos Tarea Ejecuta
  73. void Ejecuta();
  74.  
  75. #task (rate=1s, max=1ms) //Creamos Tarea que Guarda Datos
  76. void SaveRTC();                   //Trabajando con una Cola de 6 Datos
  77.  
  78. //Comandos
  79. void verHora();//Visualiza Hora
  80. void ConHora();//Configura Hora
  81. void ConApa();//Configura Apaga
  82. void ConPre();//Configura Prende
  83.  
  84. void main()
  85. {
  86.    //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  87.    setup_counters(RTCC_INTERNAL,RTCC_DIV_32); // TIMER0: Clock Interno y Preescaler  
  88.                                               //Este sera usado como Reloj.
  89.    //setup_timer_1(T1_DISABLED);
  90.    //setup_timer_2(T2_DISABLED,0,1);
  91.    setup_comparator(NC_NC_NC_NC);
  92.    setup_vref(FALSE);  
  93.    enable_interrupts(INT_RTCC);// Habilito Interrupción RTCC  
  94.    enable_interrupts(INT_RDA);
  95.    nRTCC=-5;  
  96.    set_timer0(68);  
  97.    enable_interrupts(GLOBAL);
  98.    setup_oscillator(False);
  99.    
  100.    output_a(0);
  101.    //Inicializo Reloj.
  102.    minutos=read_eeprom(2);
  103.    horas=read_eeprom(1);
  104.    
  105.   //Prendo
  106.   mPrendo=read_eeprom(4);
  107.   hPrendo=read_eeprom(3);
  108.  
  109.   //Leo Hora Apago
  110.   mApago=read_eeprom(6);
  111.   hApago=read_eeprom(5);
  112.   output_low(pin_A0);
  113.  
  114.   EECON1=0;
  115.    iBuffer=0;
  116.    semaforo=1;
  117.    rtos_run();
  118. }
  119.  
  120. //Guardara Datos hasta llegar  auna cadena de 5
  121. void Serial()
  122. {
  123.    char cDato;
  124.    rtos_await(rtos_msg_poll()); //Esperamos hasta que haya algun dato en cola
  125.    
  126.    while(rtos_msg_poll()) //Procesamos la cola completa
  127.    {
  128.       cDato = rtos_msg_read();
  129.       if (cDato==0x08){
  130.          if(iBuffer>0){
  131.             iBuffer--;
  132.             putc(0x08);
  133.          }
  134.          }
  135.       else{
  136.          if(iBuffer<5){
  137.          cBuffer[iBuffer] = cDato;
  138.          iBuffer++;
  139.          putc(cDato);
  140.          }
  141.       }
  142.    }
  143.  
  144.    if(cDato == 0x0D) //Si esta toda la cadena la enviamos
  145.    {
  146.          cBuffer[iBuffer] =0 ;
  147.          strcpy(comando,cBuffer);
  148.          iBuffer = 0;
  149.          rtos_enable(Ejecuta);
  150.          rtos_disable(Serial);
  151.    }
  152. }
  153.  
  154. #INT_RDA
  155. void fINT_RDA(void)
  156. {
  157. char tecla;
  158. tecla=getc();
  159. rtos_msg_send(Serial, tecla); //Tomamos el dato del buffer y lo ponemos en la cola
  160. }
  161.  
  162. void disable_task(){
  163. rtos_disable(Ejecuta);
  164. //rtos_disable(SaveRTC);
  165. rtos_disable(disable_task);
  166. }
  167.  
  168. void Ejecuta(){
  169.    int8 len,i;
  170.    strlwr(comando);  
  171.    len=strlen(comando);
  172.    for (i=0;i<len;i++){
  173.       if (comando[i]==0x0d) {
  174.          comando[i]=0x0;
  175.       }
  176.    }
  177.    len=strlen(comando);  
  178.    
  179.    semaforo=0;
  180.    if (len==1 && comando[0]=='v'){
  181.       verHora();
  182.    }
  183.    else{
  184.       if(len==2&&comando[0]=='e'){
  185.          estado=comando[1]&1;
  186.       }
  187.      
  188.       if (len==5){
  189.          hora=(comando[1]& 0x0F)*10+comando[2]&0x0F;
  190.          minuto=  (comando[3]& 0x0F)*10+comando[4]&0x0F;
  191.          switch(comando[0]){
  192.             case  'h': ConHora();
  193.                        break;
  194.             case  'a': ConApa();
  195.                        break;
  196.             case  'p': ConPre();
  197.                        break;
  198.             default: //putc('\n');
  199.                      semaforo=1;
  200.                      break;          
  201.          }
  202.          if (semaforo==0){
  203.             verHora();
  204.          }
  205.       }
  206.    }
  207.      
  208.    rtos_enable(Serial);      
  209.    rtos_disable(Ejecuta);
  210. }
  211.  
  212. void VerHora(){
  213. printf("\n\r  Hora Actual %02d:%02d:%02d\n\r",horas,minutos,segundos);
  214. printf("  Prende %02d:%02d  y  Apaga %02d:%02d\n\r",hPrendo,mPrendo,hApago,mApago);
  215. }
  216.  
  217. void ConHora(){
  218. horas=hora;
  219. minutos=minuto;
  220. segundos=0;
  221. }
  222.  
  223. void ConApa(){
  224. mApago=minuto;
  225. hApago=hora;
  226. }
  227.  
  228. void ConPre(){
  229. mPrendo=minuto;
  230. hPrendo=hora;
  231. }
  232.  
  233. void GrabaEE(){
  234.    int i;
  235.    int8 dato;
  236.    rtos_await( rtos_msg_poll()==6);
  237.    //if (rtos_msg_poll()==5){
  238.    for (i=1;i<7;){
  239.       if ((EECON1&2)==0){
  240.       dato=rtos_msg_read();
  241.       write_eeprom(i,dato);
  242.       i++;
  243.       }
  244.       rtos_yield(); }
  245.    //}
  246. }
  247.  
  248. void SaveRTC(){
  249. rtos_msg_send(GrabaEE,horas);
  250. rtos_msg_send(GrabaEE,minutos);
  251. rtos_msg_send(GrabaEE,hPrendo);
  252. rtos_msg_send(GrabaEE,mPrendo);
  253. rtos_msg_send(GrabaEE,hApago);
  254. rtos_msg_send(GrabaEE,mApago);
  255. }
  256.  
  257. void timer(){
  258. int16 P,A,N;
  259.  
  260.    A=hApago*60+mApago;
  261.    P=hPrendo*60+mPrendo;
  262.    N=horas*60+minutos;
  263.  
  264.    if (A>P){
  265.       if(A>N && N>=P){
  266.       estado=1;}
  267.       else{      
  268.       estado=0;}}
  269.    else{
  270.       if(P>N && N>=A){
  271.       estado=0;}
  272.       else{
  273.       estado=1;}}
  274.    
  275.    output_bit(PIN_A1,estado);
  276. }
  277.  
  278. #rom  0x2101={0,0,0,2,0,1}

Tambien, puede descargarse de aca http://www.proyectosfie.com/samples/rtos/Temporizador.rar

Y los comandos del terminal son:
v ->Para ver la hora actual, tiempo de encendido y tiempo de apagado
sABCD ->Cambia la hora actual, a AB:Horas CD:Minutos
pABCD ->Cambia hora de encendido, a AB:Horas CD:Minutos
aABCD ->Cambia hora de apagado, a AB:Horas CD:Minutos

Saludos,

Yoel

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Dicusión sobre RTOS
« Respuesta #6 en: 04 de Octubre de 2007, 17:45:10 »
Descargado y en proceso de revisión, nada más tenga una ranurita medio vacía en mi planificador de tareas, se la robo para darte una respuesta de este mensaje.

Saludos
Reinier

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Dicusión sobre RTOS
« Respuesta #7 en: 07 de Junio de 2009, 21:24:32 »
hola gente desde ayer empecé a estudiar esto de los RTOS por ahora voy en la 3ra pagina del post, y quiero ir de a poco.
Les dejo mis dudas sobre lo que pude hacer a ver si alguien tan amable las responde  :mrgreen:

En el ejercicio1 hay un momento en que se juntan 2 tareas y el RTOS atiende siempre a la misma, como es que da esa prioridad se puede cambiar la prioridad de atención por ejemplo sin tener que habilitar o deshabilitar una de las tareas, esto me parece crítico. Si la solución esta más adelante del post solo me avisan y ya voy a llegar a esa parte.

En el ejercicio2 me quedo prácticamente igual a reitner  :shock:, les dejo el código y el esquemático que utilice(no se para que?  :?), bueno acá no me permitió utilizar el timer0 (8 bits) en el 16f877a me indicaba minor_cycle muy  bajo, por lo que tuve que utilizar el timer1(16 bits). O el timer0 y aumentar ese numerito. o cambiar el clock.
La cuestión es que había creado una rutina que entraba y habilitaba una tarea, luego se ejecutaba la misma rutina y habilitaba la misma tarea que ya había habilitado previamente y así varias veces. Esto puede causar algún inconveniente de estabilidad en el sistema?  :undecided:.

Gracias! seguro que cuando haga un par de ejercicios más me surgen más preguntas por eso las mando a medida que van saliendo  :laugh:
 
 

LAS MALVINAS SON ARGENTINAS!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Dicusión sobre RTOS
« Respuesta #8 en: 07 de Junio de 2009, 22:00:53 »
Muy buen hilo, me viene de 10 ahora q estoy empezando con esto de los RTOS. :-/
Aprovecho a sacarme un par de dudas:
1. En el ejemplo de Y@el, habilita varias interrupciones, pero no la de UART. No es necesario cuando usamos #use rs232(), cierto?
2. Cuando tengo un RTOS, y ciertas tareas solo se tienen q ejecutar bajo ciertas condiciones, conviene tener una tarea madre q inhiba o no a las demas tareas dependiendo de estas condiciones? o q cada tarea evalue la condicion y ejecute o no?
Estoy usando el RTOS de CCS.

Muchas gracias!! :D

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Dicusión sobre RTOS
« Respuesta #9 en: 09 de Junio de 2009, 09:12:41 »
Hola "cerebro" y "gera"

Trataré de responderles las dudas a ambos, ya que seguramente están viendo los post que he pulicado hace montón de tiempo sobre el RTOS de CCS.

Las prioridades en el RTOS de CCS no se pueden cambiar, este es un RTOS bastante limitado en funcionalidades, una de sus limitaciones es esa, lo que pasa es que por ser tan simple es muy bueno para ser utilizado en la docencia, y aún con sus limitaciones es muy bueno si se compara con otros métodos de programación. Yo lo utilizo habitualmente con buenos resultados, la mayor parte del tiempo.

El minor_cycle debe ser menor o igual que el tiempo de desbordamiento del temporizador a utilizar, de modo que el RTOS pueda saber en una ISR que nosotros no vemos "gracias" a que CCS nos esconde la bola, que están transcurriendo los tics del sistema. Así que este parámetro se utiliza para especificar la base de tiempo para todas las demás tareas, es por ello que el "rate" de cualquier tarea debe ser múltiplo de este numerito.

Habilitar y deshabilitar tareas no crea, hasta donde e comprobado, ningún problema, excepto que la tarea se ejecute o no en los plazos establecidos. Debemos recordar que una tarea incluso, puede deshabilitarse a sí misma, pero si una tarea se deshabilita a sí misma ella tendrá que terminar ese ciclo de ejecución, así que el efecto no se notará hasta el próximo momento en que supuestamente debe ejecutarse.

Que una tarea o parte de su código se ejecute o no depende de los mecanismos de sincronización utilizados, de un diseño determinado que requiera alguna técnica específica y de la habilidad del programador para combinar todo eso en la solución de un problema. Así que aquí no hay recetas, todo depende del "todo". Ahora es mi recomendación que siempre que se puedan utilizar los mecanismos de sincronización para mantener a una tarea en estado de bloqueo o espera, se utilice esta técnica y evitar en lo posible tener tareas "madres" que habilitan y deshabilitan a otras, sobre todo porque las interrelaciones entre tareas pueden tener dependencias difíciles de controlar con un método así y porque con ello hacemos que la programación con RTOS se parezca más a la programación sin RTOS y creo que no es eso lo que se pretende.

Saludos
Reinier

PD: Estaré por acá para cualquier duda.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Dicusión sobre RTOS
« Respuesta #10 en: 09 de Junio de 2009, 14:49:38 »
Muchas gracias por tu respuesta reiniertl!! Está claro como el agua :D
Estoy muy entusiasmado con este tema, voy a ponerme a investigar a ver si le puedo sacar provecho.
saludos!!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dicusión sobre RTOS
« Respuesta #11 en: 16 de Junio de 2009, 19:16:39 »
Hola compañeros! Yo también estoy entusiasmado en aprender RTOS, comencé con el de CCS. Pero tengo una duda existencial  :mrgreen: Yo declaro una tarea que se tiene que ejecutar cada 2ms por ejemplo:
Código: C
  1. #task(rate=2ms,max=1ms)
  2. void Tarea1(void);
Es la única tarea, la cual solo enciende un led y lo apaga durante 300us. Ahora como es la única yo pensé que se tenia que ejecutar exactamente cada 2ms, pero simulándolo en proteus veo que el pulso de 300us es exacto y la tarea se ejecuta cada 1.7ms  :?
Adjunto el código completo para ver si estoy declarando algo mal.

Esta duda surgió al realizar un cartel de leds como primer ejercicio (maté 2 pájaros de un tiro, también es mi primer cartel). Logre sincronizar de manera correcta las tareas para realizar el refresco y también para provocar cambios en el mensaje sin que ocurran distorsiones, pero después se me dio por controlar lo tiempos de ejecución y ahí fue que me encontré con este problema  :?

Muchas gracias!
« Última modificación: 17 de Junio de 2009, 02:16:28 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Dicusión sobre RTOS
« Respuesta #12 en: 17 de Junio de 2009, 08:59:41 »
Es que realmente se ejecuta cada 2 mseg!!
1,7 mseg mas los 0,3 mseg dan los dos mseg que buscas!!! :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dicusión sobre RTOS
« Respuesta #13 en: 17 de Junio de 2009, 10:59:36 »
Es que realmente se ejecuta cada 2 mseg!!
1,7 mseg mas los 0,3 mseg dan los dos mseg que buscas!!! :mrgreen: :mrgreen:
No MGLSOFT, los 1.7ms son entre flancos ascendentes, ya tiene en cuenta los 300us  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Dicusión sobre RTOS
« Respuesta #14 en: 17 de Junio de 2009, 12:29:47 »
¿Ese delay_us dentro de un RTOS no es un poco raro?. Desde la más profunda ignorancia, quizás si pones dos tareas, una que encienda el led y otra que lo apague...


 

anything