1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 <2012> 2013 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 <2012> 2013 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 |