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

Subject: epicsAtExit
From: "Szalata, Zenon M." <zms@slac.stanford.edu>
To: Mark Rivers <rivers@cars.uchicago.edu>, "Williams Jr., Ernest L." <ernesto@slac.stanford.edu>
Cc: "tech-talk@aps.anl.gov" <tech-talk@aps.anl.gov>
Date: Wed, 27 Jun 2012 17:40:06 -0700

Hi Mark,

I have a problem, which I have been ignoring for a while.

I have a device driver for a VME module based on asynPortDriver class.  It is used with asyn R4.18, EPICS R3.14.12.2, vxWorks 6.6.

I have coded a couple of routines to disable interrupts when the IOC is shutdown (with CTRL-X), which does not work.  Restarting the IOC which uses the asyn based driver with CTRL-X fails to come up.  The IOC reaches some point in the booting sequence and then I suppose it crashes because the boot starts all over.  I recover from that with a VME reset.  Also, if I disable interrupts before rebooting all works fine.

I have created another device driver using the conventional approach, which does not use asyn.  As far as I can tell most of the code if not the same is equivalent.  With this device driver the interrupts get disabled on exit.

This is what I have in the asynPortDriver version of the device driver:

 

In the constructor I have:

 

  epicsAtExit( rebootCbC,this);

 

then I have:

 

extern "C"{

static void rebootCbC( void* pvt){

  drvV792* pthis=(drvV792*)pvt;

  pthis->rebootCb();

}

}

 

void drvV792::rebootCb(){

//------------------------------------------------------------------------------

  printf( "%s::rebootCb: Interrupts disabled and Soft reset\n",dname);

  fflush(stdout);

  epicsThreadSleep(1.0);

  _wtReg( ILEV,0);

  _wtReg( EVTR,0);

}

 

Writing 0 to the EVTR disables interrupts.  Also writing 0 to the ILEV register disables interrupts.

In fact, the same rebootCB code, seems to work fine in the non-asyn driver.

Is something subtle taking place because of vxWorks?

Can you offer suggestion on how to make it work?

Thanks in advance,

Zen

 


Replies:
RE: epicsAtExit Mark Rivers

Navigate by Date:
Prev: Re: XOFF Problem with tyGSOctal Bjorklund, Eric A
Next: Re: XOFF Problem with tyGSOctal Eric Norum
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  <20122013  2014  2015  2016  2017  2018  2019 
Navigate by Thread:
Prev: EPICS Collaboration Meeting Fall 2012, First Announcement 이은희
Next: RE: epicsAtExit Mark Rivers
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  <20122013  2014  2015  2016  2017  2018  2019 
ANJ, 18 Nov 2013 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·