g+
g+ Communities
Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014 
<== Date ==> <== Thread ==>

Subject: double buffered waveformRecord
From: Michael Davidsaver <mdavidsaver@bnl.gov>
To: EPICS core-talk <core-talk@aps.anl.gov>
Date: Thu, 03 Jan 2013 17:03:09 -0500
All,

Recently I was looking at how array fields are handled in database processing and RSRV. In the process I noticed a way to allow double buffering (and possible more creative schemes) of BPTR in the waveformRecord.

This involves playing games with the array offset returned by the get_array_info() record support function, and taking advantage of how this offset is used in dbConvert.c. By doing this I can convince dbGet() and dbPut() to read/write from almost arbitrary locations which can change with each call.

static long get_array_info(DBADDR *paddr, long *no_elements, long *offset)
{
...
    if(prec->bact) {
        /* cause caller to access buf[1] */
        *offset = (prec->buf[1] - prec->buf[0]) / dbValueSize(prec->ftvl);
    } else {
        *offset = 0;
    }


http://bazaar.launchpad.net/~epics-core/epics-base/array-opt/revision/12397

There is also an example device support.

http://bazaar.launchpad.net/~epics-core/epics-base/array-opt/revision/12398


Now that I have this working I'd like to create a mechanism which doesn't involve abusing 'offset'. So far I've been thinking of allowing get_array_info() to provide a replacement pointer (in addition to offset and length) either by adding another argument, or allowing modification of the DBADDR argument.

Any thoughts/suggestions?

Michael


The entire branch

https://code.launchpad.net/~epics-core/epics-base/array-opt

There is also some in-progress changes related to optimizing dbConvert.c.


Replies:
Re: double buffered waveformRecord Andrew Johnson

Navigate by Date:
Next: Re: double buffered waveformRecord Andrew Johnson
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014 
Navigate by Thread:
Next: Re: double buffered waveformRecord Andrew Johnson
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  <20132014 
ANJ, 18 Nov 2013 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICSv4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·