EPICS Home

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  2020  2021  2022  2023  2024  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  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: epicsAtExit
From: "Szalata, Zenon M." <[email protected]>
To: Mark Rivers <[email protected]>, "Williams Jr., Ernest L." <[email protected]>
Cc: "[email protected]" <[email protected]>
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  2020  2021  2022  2023  2024 
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  2020  2021  2022  2023  2024