Experimental Physics and Industrial Control System
|
Michael Abbott wrote:
I am writing device support for a subArray record so that I can read
small slices from a very large array provided by a device. The device
in question has limited memory, and so I cannot afford more than one
copy of this array in memory, namely the copy in the device driver
itself. My plan is to read the data like this:
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?
We had similar problem when we tarted to construct KEKB control system.
So we developed a new record called Compact Subarray record. It just
copys amount it needs from a source record.
We need to add new API in dbaccess library, which is not present in the
standard EPICS base, to support this record.
If you have an interest on this record, I will be happy to send source code.
Regards,
Noboru YAMAMOTO
EPICS group
KEK, JAPAN
- References:
- Using subArray Michael Abbott
- Navigate by Date:
- Prev:
environmental variables Xu HuiJuan
- Next:
RE: Using subArray Abbott, MG (Michael)
- 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
- Navigate by Thread:
- Prev:
Using subArray Michael Abbott
- Next:
Re: Using subArray Carl Lionberger
- 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
|
ANJ, 02 Sep 2010 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
·
Search
·
EPICS V4
·
IRMIS
·
Talk
·
Bugs
·
Documents
·
Links
·
Licensing
·
|