Because device support thinks the ring buffer is empty it queues a call to the driver and sets PACT this is asynchronous device support. Accept Reject Read More. You are not directly subscribed to this bug’s notifications. This function calls getCallbackValue to read the value from the ring buffer, if any. The evidence is that there are items remaining in the ring buffer after a burst of driver callbacks.
|Date Added:||6 March 2004|
|File Size:||55.19 Mb|
|Operating Systems:||Windows NT/2000/XP/2003/2003/7/8/10 MacOS 10/X|
|Price:||Free* [*Free Regsitration Required]|
Other bug subscribers Subscribe someone else. This function calls getCallbackValue to read the value from the ring buffer, if any. You are not directly subscribed to this ssyn notifications. When running on the problematic Linux system I do see very rare less than 0.
Writing epixs that calls Asyn is confusing until you understand the approach it expects you to use. Eric Norum wenorum wrote on Some of these fields we are allowed or epicd expected to set, whereas others should not be touched. You must use the methods provided by asynManager. Once you understand the choices that Asyn has made though, writing the software is actually simpler than it would be without asyn. The evidence is that there are items remaining in the ring buffer after a burst of driver callbacks.
Connecting If we want to talk to a real world device that already has an asyn Port epivs, we have to connect to it by name: Adding some ‘volatile’ modifiers seems to have fixed the problem.
How To Write Device Support that uses Asyn Driver
The system exhibiting the problem is: This is the code for getCallbackValue: However, this cannot be the only problem. It is a 4-processor system.
There is something wrong, because the record should only be processing when the ring buffer has something in it. If we want asjn talk to a real world device that already has an asyn Port registered, we have to connect to it by name:.
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.
This should not be happening, because PACT does not get set to 1 under the circumstances that should be happening, i. There are 2 reasons I can think of why the records would not process when scanIoRequest is called. What is an asynUser?
Bug # (mantis) “scanIoRequest is sometimes not process” : Bugs : EPICS Base
To post a comment you must log in. See full activity log. Problem was a reordering of instructions by newer, more aggressive, GCC optimizers. System configuration 3 systems were tested.
You need to log in to change this bug’s status.
EPICSstartUsingStreamDev < DCS < PANDA Wiki
Note that this code does not take a lock around the call to epicsRingBytesPut, because that is not supposed to be required according epixs the Application Developer’s Guide. Andrew Johnson anj wrote on The 2 systems with no problems were: 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 ring buffer values when the driver is done with its burst of activity. 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.
Email me about changes to this bug report.
On several tested systems this works fine, and the record processes exactly as many times as the callback is called, i. Our code needs to pull in some headers first: