EPICS Controls 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  <20172018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <20172018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: [AsynPortDriver] "Multiple interrupt callbacks between processing" warning with multiple arrays
From: Paweł Plewiński <[email protected]>
To: Mark Rivers <[email protected]>
Cc: [email protected]
Date: Tue, 11 Apr 2017 20:55:26 +0200
Hi Mark,

thanks for quick answer. Actually I forgot to post the record, but it had SCAN set to I/O INTR, similarly to the example project. Here's the record definition:

record(waveform, "PIEZO:OSC-CH$(CHANNEL)-WAVEFORM")
{
    field(DTYP, "asynFloat64ArrayIn")
    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))OSC_WAVEFORM")
    field(FTVL, "DOUBLE")
    field(NELM, "$(NPOINTS)")
    field(LOPR, "0")
    field(HOPR, "10")
    field(SCAN, "I/O Intr")
}

As for the commands you asked for, the results are, respectively:

ACKS: NO_ALARM      ACKT: YES           APST: Always        ASG:
ASP: (nil)          BKPT: 00            BPTR: 0xbcb3e0      BUSY: 0
DESC: DISA: 0 DISP: 0 DISS: NO_ALARM
DISV: 1             DPVT: 0xc05690      DSET: 0x7f2dbdcea9a0
DTYP: asynFloat64ArrayIn                EGU:                EVNT: 0
FLNK:CONSTANT 0     FTVL: DOUBLE        HASH: 0             HOPR: 10
INP:INST_IO @asyn(testAPD,0,1)OSC_WAVEFORM                  LCNT: 0
LOPR: 0             LSET: 0xc07f40
MLIS: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
MLOK: b0 b3 bc 00 00 00 00 00           MPST: Always
NAME: PIEZO:OSC-CH0-WAVEFORM            NELM: 1000          NORD: 1000
NSEV: NO_ALARM      NSTA: NO_ALARM      PACT: 0             PHAS: 0
PINI: NO            PPN: (nil)          PPNR: (nil)         PREC: 0
PRIO: LOW           PROC: 0             PUTF: 0             RARM: 0
RDES: 0xb86470      RPRO: 0             RSET: 0x7f2dbda73340
SCAN: I/O Intr SDIS:CONSTANT SEVR: NO_ALARM SIML:CONSTANT SIMM: NO SIMS: NO_ALARM SIOL:CONSTANT SPVT: 0xc135e0
STAT: NO_ALARM      TIME: 2017-04-11 20:53:12.153366126     TPRO: 0
TSE: 0              TSEL:CONSTANT       UDF: 0              VAL: (nil)


ACKS: NO_ALARM      ACKT: YES           APST: Always        ASG:
ASP: (nil)          BKPT: 00            BPTR: 0xbcd3a0      BUSY: 0
DESC: DISA: 0 DISP: 0 DISS: NO_ALARM
DISV: 1             DPVT: 0xc05be0      DSET: 0x7f2dbdcea9a0
DTYP: asynFloat64ArrayIn                EGU:                EVNT: 0
FLNK:CONSTANT 0     FTVL: DOUBLE        HASH: 0             HOPR: 10
INP:INST_IO @asyn(testAPD,1,1)OSC_WAVEFORM                  LCNT: 0
LOPR: 0             LSET: 0xc07f60
MLIS: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
MLOK: 70 d3 bc 00 00 00 00 00           MPST: Always
NAME: PIEZO:OSC-CH1-WAVEFORM            NELM: 1000          NORD: 1000
NSEV: NO_ALARM      NSTA: NO_ALARM      PACT: 0             PHAS: 0
PINI: NO            PPN: (nil)          PPNR: (nil)         PREC: 0
PRIO: LOW           PROC: 0             PUTF: 0             RARM: 0
RDES: 0xb86470      RPRO: 0             RSET: 0x7f2dbda73340
SCAN: I/O Intr SDIS:CONSTANT SEVR: NO_ALARM SIML:CONSTANT SIMM: NO SIMS: NO_ALARM SIOL:CONSTANT SPVT: 0xc138f0
STAT: NO_ALARM      TIME: 2017-04-11 20:53:29.910249080     TPRO: 0
TSE: 0              TSEL:CONSTANT       UDF: 0              VAL: (nil)


ACKS: NO_ALARM      ACKT: YES           APST: Always        ASG:
ASP: (nil)          BKPT: 00            BPTR: 0xbcf360      BUSY: 0
DESC: DISA: 0 DISP: 0 DISS: NO_ALARM
DISV: 1             DPVT: 0xc060e0      DSET: 0x7f2dbdcea9a0
DTYP: asynFloat64ArrayIn                EGU:                EVNT: 0
FLNK:CONSTANT 0     FTVL: DOUBLE        HASH: 0             HOPR: 10
INP:INST_IO @asyn(testAPD,2,1)OSC_WAVEFORM                  LCNT: 0
LOPR: 0             LSET: 0xc07f80
MLIS: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
MLOK: 30 f3 bc 00 00 00 00 00           MPST: Always
NAME: PIEZO:OSC-CH2-WAVEFORM            NELM: 1000          NORD: 1000
NSEV: NO_ALARM      NSTA: NO_ALARM      PACT: 0             PHAS: 0
PINI: NO            PPN: (nil)          PPNR: (nil)         PREC: 0
PRIO: LOW           PROC: 0             PUTF: 0             RARM: 0
RDES: 0xb86470      RPRO: 0             RSET: 0x7f2dbda73340
SCAN: I/O Intr SDIS:CONSTANT SEVR: NO_ALARM SIML:CONSTANT SIMM: NO SIMS: NO_ALARM SIOL:CONSTANT SPVT: 0xc13c00
STAT: NO_ALARM      TIME: 2017-04-11 20:54:17.907769453     TPRO: 0
TSE: 0              TSEL:CONSTANT       UDF: 0              VAL: (nil)


ACKS: NO_ALARM      ACKT: YES           APST: Always        ASG:
ASP: (nil)          BKPT: 00            BPTR: 0xa7b540      BUSY: 0
DESC: DISA: 0 DISP: 0 DISS: NO_ALARM
DISV: 1             DPVT: 0xab0810      DSET: 0x7efec944b9a0
DTYP: asynFloat64ArrayIn                EGU:                EVNT: 0
FLNK:CONSTANT 0     FTVL: DOUBLE        HASH: 0             HOPR: 10
INP:INST_IO @asyn(testAPD,3,1)OSC_WAVEFORM                  LCNT: 0
LOPR: 0             LSET: 0xab21d0
MLIS: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
MLOK: 10 b5 a7 00 00 00 00 00           MPST: Always
NAME: PIEZO:OSC-CH3-WAVEFORM            NELM: 1000          NORD: 1000
NSEV: NO_ALARM      NSTA: NO_ALARM      PACT: 0             PHAS: 0
PINI: NO            PPN: (nil)          PPNR: (nil)         PREC: 0
PRIO: LOW           PROC: 0             PUTF: 0             RARM: 0
RDES: 0xa30650      RPRO: 0             RSET: 0x7efec91d4340
SCAN: I/O Intr SDIS:CONSTANT SEVR: NO_ALARM SIML:CONSTANT SIMM: NO SIMS: NO_ALARM SIOL:CONSTANT SPVT: 0xabe140
STAT: NO_ALARM      TIME: 2017-04-11 20:52:33.970326348     TPRO: 0
TSE: 0              TSEL:CONSTANT       UDF: 0              VAL: (nil)


Best regards,
Paweł



W dniu 2017-04-11 18:24, Mark Rivers napisał(a):
Hi Pawel,

What is the SCAN field of your waveform record?  I suspect it is
probably periodic ("1 second", etc.).  For this application you should
set it to SCAN="I/O Intr".  Then the waveform record will process each
time your driver does a callback to device support.  If the record is
periodically processing at 1 second and your driver is doing callbacks
faster than 1 Hz then you will see the error you report.

Mark


-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Pawel Plewinski
Sent: Tuesday, April 11, 2017 8:49 AM
To: [email protected]
Subject: [AsynPortDriver] "Multiple interrupt callbacks between
processing" warning with multiple arrays

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
References:
[AsynPortDriver] "Multiple interrupt callbacks between processing" warning with multiple arrays Paweł Plewiński
RE: [AsynPortDriver] "Multiple interrupt callbacks between processing" warning with multiple arrays Mark Rivers

Navigate by Date:
Prev: RE: sumitomo f70 compressor Linda.Pratt
Next: Re: sumitomo f70 compressor Lionberger, Carl A.
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <20172018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: RE: [AsynPortDriver] "Multiple interrupt callbacks between processing" warning with multiple arrays Mark Rivers
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  <20172018  2019  2020  2021  2022  2023  2024 
ANJ, 21 Dec 2017 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·