g+
g+ Communities
Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <2013 Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <2013
<== Date ==> <== Thread ==>

Subject: Re: time drift in camonitor timestamps
From: Andrew Johnson <anj@aps.anl.gov>
To: tech-talk@aps.anl.gov
Cc: Eric Norum <eric@norum.ca>
Date: Wed, 9 Jan 2013 13:45:30 -0600
Hi Eric,

FYI Jack wasn't the reporter.

Your fixed version works fine for me.  I'm adding some code to print warnings 
about continuous overruns (at increasing periods, up to hourly) before I 
commit it.

I'm also inclined to keep the original delay = 0.1 penalty for an over-run 
instead of dropping it to 0.02 seconds, but I will consider arguments against 
that if there are objections.

- Andrew

On 2013-01-09 Eric Norum wrote:
> Sorry.
> Previous message had wrong periodicTask code.  Here's what I meant to send.
> 
> Jack, can you try this and see if it fixes the problem that you were
>  seeing/
> 
> 
> static void periodicTask(void *arg)
> {
>     periodic_scan_list *ppsl = (periodic_scan_list *)arg;
> 
>     epicsTimeStamp nextScan, now;
>     double delay;
> 
>     taskwdInsert(0, NULL, NULL);
>     epicsEventSignal(startStopEvent);
> 
>     epicsTimeGetCurrent(&nextScan);
>     while (ppsl->scanCtl != ctlExit) {
>         if (ppsl->scanCtl == ctlRun) scanList(&ppsl->scan_list);
>         epicsTimeAddSeconds(&nextScan, ppsl->period);
>         epicsTimeGetCurrent(&now);
>         delay = epicsTimeDiffInSeconds(&nextScan, &now);
>         if (delay <= 0.0) {
>             ppsl->overrunCount++;
>             delay = 0.02;
>             epicsTimeGetCurrent(&nextScan);
>         }
>         epicsEventWaitWithTimeout(ppsl->loopEvent, delay);
>     }
> 
>     taskwdRemove(0);
>     epicsEventSignal(startStopEvent);
> }

-- 
There is no such thing as a free lunch.  When invited for lunch,
it is best to check if you are there to eat, or to be eaten.
-- Clive Robinson

References:
time drift in camonitor timestamps ibadillo
Re: time drift in camonitor timestamps Jack Smith
Re: time drift in camonitor timestamps Eric Norum

Navigate by Date:
Prev: Re: What's calling get_array_info? Michael Davidsaver
Next: medm build D Peter Siddons
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <2013
Navigate by Thread:
Prev: Re: time drift in camonitor timestamps Eric Norum
Next: Re: time drift in camonitor timestamps Andrew Johnson
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <2013
ANJ, 09 Jan 2013 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICSv4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·