Hello Peter,

In pre10, pthread_make_periodic_np does not accept the period of 0.
We will be changing it back in the next version. Meanwhile,
please change the condition in pthread_make_periodic_np (rtl_sched.c)
from (period <= 0) to (period < 0).

Sorry for the inconvenience.

Michael.

Peter Helbig ([EMAIL PROTECTED]) wrote:
> Hello Everybody! 
> 
> I updated from rtlV2.2 to V3.0p10 and found a different behaviour of  
> pthread_make_periodic_np(...,...,0). In V2.2 it works as suspected: The 
>  thread is called once and is sentenced to wait with a 
> pthread_wait_np()  afterwards.  In V3.0p10 the call of 
> pthread_wait_np() blocks the thread  forever. 
> 
> Code example: 
> 
> void *thread_code(void *param) 
> { 
> 
> // blabla 
> --------------- snip ----------------------------------------------- 
>     do 
>      { 
>            min_diff = 2000000000; 
>             max_diff = -2000000000; 
> 
>         for (i = 0; i < ntests; i++) 
>         { 
>                 now = clock_gethrtime(rtl_getschedclock()); 
>                  if (advance && !mode) 
>                  { 
>                       if (now < expected) 
>                       { 
>                              rtl_delay (expected - now); 
>                       } 
>                         now = clock_gethrtime(CLOCK_UST); 
>                   } 
> 
>                         /* start of next time element */ 
>                         do_rayonic_start(); 
>                         do_rayonic(loops); 
>                         do_rayonic_fini(); 
> 
>                         /* finished user part of measurement */ 
>                         fini = clock_gethrtime(rtl_getschedclock()); 
>                         samp.fini = fini; 
> 
>                         /* calculate time for next activation */ 
>                         /* 1) difference from expectation */ 
>                         diff = now - expected; 
>                         samp.diff = diff; 
>                         if (diff < min_diff) 
>                         { 
>                                 min_diff = diff; 
>                         } 
> 
>                         if (diff > max_diff) 
>                         { 
>                                 max_diff = diff; 
>                         } 
> 
>                         /* 2) theoretical sleeping duration */ 
>                         sleepfor = CYCLETIME-(fini-now); 
>                         samp.sleepfor = sleepfor; 
> 
>                         /* 3) adaptive control towards expected time */ 
>                         sleepfor -= diff; 
> 
>                         /* 4) avoid processor overload */ 
>                         expected += CYCLETIME; 
>                         while (sleepfor < MAXLOAD) 
>                         { 
>                                 sleepfor += CYCLETIME; 
>                                 expected += CYCLETIME; 
>                                 samp.skipped ++; 
>                         } 
> 
>                         /* 5) absolute time for reactivation */ 
>                         sleepto = (now+sleepfor); 
>                         samp.sleepto = sleepto; 
> 
>                         pthread_make_periodic_np 
> (pthread_self(),sleepto,0); 
> //++++++++++++++++++++++++++++++++++++++++++++++++ 
>                       // In V3.0p10 the next call blocks the thread 
> forever, 
>                       // in V2.2 it works properly....         
> //++++++++++++++++++++++++++++++++++++++++++++++++ 
>                      pthread_wait_np(); 
>                 } 
> 
>                 samp.min = min_diff; 
>                 samp.max = max_diff; 
>                 write (fifo_monitor, &samp, sizeof(samp)); 
> 
>         } while (1);    // endless... 
>                                                                      
> ----------------- snap 
> ----------------------------------------------------------- 
> } // thread end 
> 
> 
> Any hints will be welcome! 
> 
> 
> Peter 
> 
> 
> Peter Helbig
> Rayonic Sensor Systems GmbH
> Entwicklung Software
> Bayreuther Strasse 108
> D-91301 Forchheim
> 
> Tel: ++49 (0) 9191 72 818-0
> Fax: ++49 (0) 9191 640 333
> Email: [EMAIL PROTECTED]
> http://www.rayonic.de
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> echo "unsubscribe rtl " | mail [EMAIL PROTECTED]
> ---
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/rtlinux/
> 
> 
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/

Reply via email to