The 2 systems with no problems were: When running on the problematic Linux system I do see very rare less than 0. This should not be happening, because PACT does not get set to 1 under the circumstances that should be happening, i. Adding some ‘volatile’ modifiers seems to have fixed the problem. Writing software that calls Asyn is confusing until you understand the approach it expects you to use. 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.
|Date Added:||18 March 2006|
|File Size:||49.33 Mb|
|Operating Systems:||Windows NT/2000/XP/2003/2003/7/8/10 MacOS 10/X|
|Price:||Free* [*Free Regsitration Required]|
EPICSstartUsingStreamDev < DCS < PANDA Wiki
The system exhibiting the problem is: Andrew Johnson anj wrote on This should not be happening, because PACT does not get set to 1 under the circumstances that should be happening, i. Some of these fields we are allowed or even expected to set, whereas others should not be touched. We’ll assume you’re ok with this, but you can opt-out if you wish. Adding some ‘volatile’ modifiers seems to have fixed the problem.
When the record processes for example longin record it calls the following function in devAsynInt System configuration 3 systems were tested. The evidence is that there are items remaining in the ring buffer after a burst of driver callbacks.
You need to log in to change this bug’s status. There are 2 reasons I can think of why the records would not process when scanIoRequest is called. Our code needs to pull in some headers first: On several tested systems this works fine, and the record processes exactly as many times as the callback is called, i. 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.
Other bug subscribers Subscribe someone else. Because device support thinks the ring buffer is empty it queues a call to the driver and sets PACT this is asynchronous device support. 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:.
See full activity log. This bug affects 1 person. epcs
Comment on this change optional. Getting Started First, you will need to write the code for a basic device support layer. There are other records, the frame counters for example, that never appear in the printf calls in dbProcess or device support, but epicz are ending up with extra ring buffer values when the driver is done with its burst of activity.
Accept Reject Read More. Problem was a reordering of instructions by newer, more aggressive, GCC optimizers.
Bug # (mantis) “scanIoRequest is sometimes not process” : Bugs : EPICS Base
The 2 systems with no problems were: An asyn porrt driver makes rapid callbacks to asynDevice support for about 10 records. On one tested system, however, the record appears to not be processed as many times as scanIoRequest is being called. However, this cannot be the only problem.
Note that this code does not take a lock around the call to epicsRingBytesPut, because that is not supposed to be required according to the Application Developer’s Guide. This is the code for getCallbackValue: This function calls getCallbackValue to read the value from the ring buffer, if any.
How To Write Device Support that uses Asyn Driver
You are not directly subscribed to this bug’s notifications. Eric Norum wenorum wrote on There is something wrong, because the record should only be processing when the ring buffer has something in it. 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 epcis to learn the Asyn approach.
Once you understand the choices that Porf has made though, writing the software is actually simpler than it would be without asyn. Email me about changes to this bug report.