TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: alexrlopez86 en 03 de Marzo de 2012, 09:40:29

Título: doble blink osa rtos
Publicado por: alexrlopez86 en 03 de Marzo de 2012, 09:40:29
estoi tratando de hacer dos tareas ala ves con el osa rtos pero no se que ago mal uso el sigiente codigo pero no funciona como yo quiero no se si es que no se puede hacer con este rtos o es que lo ago mal

Código: C
  1. #include <16f877a.h>
  2. #use delay(clock=4M)
  3. #include <puertos.c>
  4. #fuses WDT
  5.  
  6. //#device ADC=8
  7. #use fast_io (D)
  8. #use fast_io (B)
  9.  
  10. #include <osa.h>
  11.  
  12.  
  13.  
  14. void    Init (void);
  15. void    Task_Rolling (void);
  16. void    Task_SetSpeed (void);
  17.  
  18. void main (void)
  19. {
  20.  
  21.     Init();                             // Init periphery
  22.  
  23.     OS_Init();                          // Init OS
  24.  
  25.    
  26.     OS_Task_Create(7, Task_Rolling);    // Create tasks.
  27.     OS_Task_Create(7, Task_SetSpeed);   //
  28.  
  29.    Task_Rolling();                                        // Starting values:
  30.    Task_SetSpeed();
  31.    OS_EI();                            // Enable interrupts
  32.  
  33.     OS_Run();                           // Running scheduler
  34.  
  35. }
  36.  
  37. void Init (void)
  38. {
  39.     #if __DEVICE__ == 887
  40.     setup_oscillator(OSC_8MHZ, 0x1F);
  41.     #endif
  42. }  
  43.  
  44.  
  45. void Task_Rolling (void)
  46. {
  47.    
  48.     TRISC=0x00;
  49.     PORTC=0xff;
  50.     Delay_ms(1000);
  51.     PORTC=0x00;
  52.     Delay_ms(1000);                             // Change brightness position
  53.    
  54. }
  55.  
  56.  
  57.  
  58. void Task_SetSpeed (void)
  59. {
  60.    
  61.     TRISB=0x00;
  62.     PORTB=0xff;
  63.     Delay_ms(1000);
  64.     PORTB=0x00;
  65.     Delay_ms(1000);
  66.    
  67. }


espero su ayuda
Título: Re: doble blink osa rtos
Publicado por: manutek en 03 de Marzo de 2012, 12:03:32
Hola alex

Estas llamando a las tareas en el main  como si todavía conseptualisas en c lineal .
En las tareas no llamas a ninguna función del OSA que realise el cambio de contexto  ,y sin bucle(for(;;)).
Tengo publicado un post (todavía incompleto) con unos ejemplos e información ,que espero te sea esclarecedora .

http://www.todopic.com.ar/foros/index.php?topic=36771.0

Otra espero que un moderador ubique este post Al sector de RTOS.

Saludos
Título: Re: doble blink osa rtos
Publicado por: alexrlopez86 en 03 de Marzo de 2012, 13:56:32
e probado a eliminar las llamadas a las funciones desde el main y a poner los for(;;) que abia eliminado y no se ejecuta ninguna tarea tambien e probado solo agregando los for(;;) y dejando las llamadas y solo se ejecuta la primera funcion. espero su ayuda se que un ejemplo quisas sea pedir demacado pero almenos guiadme un poco
Título: Re: doble blink osa rtos
Publicado por: manutek en 03 de Marzo de 2012, 17:44:27
pasaste por el link ? hay dos ejemplos muy bien explicados y uno es lo tu intentas hacer .
saludos