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  2014  2015  2016  <2017 Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <2017
<== Date ==> <== Thread ==>

Subject: [AsynPortDriver] "Multiple interrupt callbacks between processing" warning with multiple arrays
From: Paweł Plewiński <pplewinski@dmcs.pl>
To: tech-talk@aps.anl.gov
Date: Tue, 11 Apr 2017 15:49:01 +0200
Hi,

I've recently written asyn-based device support for a custom device communicating over PCIe. One of its functions is to periodically retrieve 4 waveforms from 4 channels, which is done in a separate thread, from which the callback function is called to notify asyn about change. I heavily based the code on the AsynPortDriver example. The driver works, however if the update rate is lower than 1 second, strange warning appears in the console at the time of every refresh (and that's only for one of 4 channels), namely:

2017/04/11 15:42:08.682 PIEZO:OSC-CH0-WAVEFORM devAsynFloat64Array::interruptCallbackInput
\000\000\000\000\000@\205?\000\000\000\000\000\300\202?\000\000\000\000\000\000\204?\000\000\000\000\000\000\204?\000\000\000\000\000\300\202?\000\000\000\000\000\000\204?\000\000\000\000\000@\205?\000\000\000\000\000\000\204?\000\000\000\000\000\300\202?\000\000\000\000\000\000\204?
2017/04/11 15:42:08.682 PIEZO:OSC-CH0-WAVEFORM devAsynFloat64Array::processCommon, warning, multiple interrupt callbacks between processing

The parameters passed to the top level constructor are
   : asynPortDriver(portName,
                    4, /* maxAddr */
                    (int)NUM_SCOPE_PARAMS,
asynInt32Mask | asynFloat64Mask | asynFloat64ArrayMask | asynEnumMask | asynDrvUserMask, /* Interface mask */ asynInt32Mask | asynFloat64Mask | asynFloat64ArrayMask | asynEnumMask, /* Interrupt mask */ ASYN_MULTIDEVICE, /* asynFlags. This driver does not block and it is not multi-device, so flag is 0 */
                    1, /* Autoconnect */
                    0, /* Default priority */
                    0) /* Default stack size*/

The readback thread code:

void piezoPortDriver::readbackTask(void)
{
   while (1) {
           bool stopped = false;

           lock();
           auto new_data = osc->fetch_data(vtim, vdat);
           unlock();

           if (!stopped)
           {
               lock();
               this->osc_update_trigger();
               unlock();
           }
        callParamCallbacks();

        for (int i = 0; i < 4; i++){
doCallbacksFloat64Array(vdat[i].data(), vdat[i].size(), P_OscWaveform, i);
        }
        usleep(100000);
    }
}

The fetch_data method reads four 1000-element double vectors from PCIe.

Could you give me some suggestions what may be wrong?

Regards,
Paweł Plewiński
Department of Microelectronics and Computer Science
Lodz University of Technology

Replies:
RE: [AsynPortDriver] "Multiple interrupt callbacks between processing" warning with multiple arrays Mark Rivers

Navigate by Date:
Prev: RE: Asyn timeout Mark Rivers
Next: Re: CA client within Asyn Eric Norum
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <2017
Navigate by Thread:
Prev: Re: Archiver Appliance established multiple CA connections for one channel Wang, Lin
Next: RE: [AsynPortDriver] "Multiple interrupt callbacks between processing" warning with multiple arrays Mark Rivers
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <2017
ANJ, 19 Apr 2017 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·