Experimental Physics and
| |||||||||||||||
|
record(subArray, "SA") { field(DTYP, "My driver") field(INP, "my driver's arguments") field(MALM, "1024") field(FTVL, "LONG") } $ caput SA.NELM 1024 $ caput SA.INDX 1024000 $ caput SA.PROC 0 $ caget SA Unfortunately there is one very interesting and annoying fly in the ointment. In subArrayRecord.c:readValue we see the following two lines of code: if (psa->indx >= psa->malm) psa->indx = psa->malm - 1; Ooops. Most unhelpful! This stupid code means that MALM, which is used to allocate the storage used by the subArray record, also determines the maximum index into the device array. I think this is missing the point of a subArray; it certainly gets in my way. Now, it turns out I am lucky: malm is used to allocate storage *before* it calls my init_record, so I can fake malm back to the value I want to to be. However, this is hardly very satisfactory, and is going to have a mildly embarassing side effect: get_{graphic,control}_double will return bogus values for the upper limit on nelm. Any thoughts on this?
| ||||||||||||||
ANJ, 02 Sep 2010 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing · |