This function calls getCallbackValue to read the value from the ring buffer, if any. The asyn device support callback function puts each value in a ring buffer and calls scanIoRequest each time. Problem was a reordering of instructions by newer, more aggressive, GCC optimizers. This should not be happening, because PACT does not get set to 1 under the circumstances that should be happening, i. The system exhibiting the problem is: This is the code for getCallbackValue: It is a 4-processor system.
|Date Added:||25 May 2006|
|File Size:||26.85 Mb|
|Operating Systems:||Windows NT/2000/XP/2003/2003/7/8/10 MacOS 10/X|
|Price:||Free* [*Free Regsitration Required]|
Bug # (mantis) “scanIoRequest is sometimes not process” : Bugs : EPICS Base
This is the code for getCallbackValue: It is a 4-processor system. The asynDriver Documentation aeyn the fields inside the asynDriver structure. You are not directly subscribed to this bug’s notifications.
Adding some ‘volatile’ modifiers seems to have fixed the problem. On one tested system, however, the record appears to not be processed as many epixs as scanIoRequest is being called. There are other records, the frame counters for example, that never appear in the printf calls in dbProcess or device support, but which are ending up with extra epucs buffer values when the driver is done with its burst of activity.
On several tested systems this works fine, and the record processes exactly as many times as the callback is called, i.
How To Write Device Support that uses Asyn Driver
Comment on this change optional. Other bug subscribers Subscribe someone else. Eric Norum wenorum wrote on Initially you will probably create an asynUser for each record, since at least in theory the user could create a database that processes all your records at once.
The 2 systems with no problems were: Connecting If we want to talk to a real world device that already has an asyn Port registered, we have to connect to it by name: There is something wrong, because the record should only be processing when the ring buffer has something in it. The asyn device support callback function puts each value in aeyn ring buffer and calls scanIoRequest each time. To post a comment you must log in.
Note that this code does not take a lock asyyn the call to epicsRingBytesPut, because that is not supposed to be required according to the Application Developer’s Guide. When the record processes for example longin record it calls the following function in devAsynInt This should not be happening, because PACT does not get set to 1 under the circumstances that should be happening, i.
Our code needs to pull in some headers first: This function calls getCallbackValue to read the value from the ring buffer, epocs any. There are very good reasons behind the design of Asyn which is intended to simplify the work involved in writing robust, portable code, but this does result in the need to learn the Asyn approach. You must use the methods provided by asynManager. The system exhibiting the problem is: The evidence is that there are items remaining in the ring buffer after a burst of driver callbacks.
How To Write Device Support that uses Asyn Driver – EPICS Controls
We’ll assume you’re ok with this, but you can opt-out if you wish. First, you will need to write the code for a basic device support layer. Accept Reject Read More. Because device support thinks the ring buffer is empty it queues a call to the driver and sets PACT this is asynchronous device support.
This bug affects 1 person. The asynPrint call in this function was added since asyn R to help in debugging, but otherwise the code is that from asyn R Writing software that calls Asyn is confusing until you understand the approach it expects you to use.
An asyn port driver makes rapid callbacks to asynDevice support for about 10 records. Some of these fields we are allowed or even expected to set, whereas others should not be touched.