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 | 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 |
<== Date ==> | <== Thread ==> |
---|
Subject: | RE: waveform arrays within SNL |
From: | Al Honey <[email protected]> |
To: | 'Mark Rivers' <[email protected]>, "'[email protected]'" <[email protected]> |
Date: | Tue, 20 Jun 2017 21:42:08 +0000 |
Thx Mark That works for integer arrays. Not sure why I was previously unsuccessful as I tried various combinations. But the other waveform record holds an array of strings - field(FTVL,"STRING") – and continues to thwart me. caput k1:osiris:ss1:posnames "one two three four" caget k1:osiris:ss1:posnames k1:osiris:ss1:posnames 4 one two three four
Trrying what I think is correct in SNL, I get compilation errors: #define MAX_ENTRIES 100 string posnames[MAX_ENTRIES]; assign posnames to "{tel}{instr}:{mech}:posnames"; // this is the ‘string’ waveform record
local variable is: string names[4] = { "0.100", "0.050", "0.035", "0,020” }; state STARTUP { entry { for (idx=0; idx<4; idx++ ) posnames[idx] = names[idx]; pvPut( posnames ); } . . . } error: incompatible types when assigning to type string from type char * posnames[idx] = names[idx]; Thx, Al From: Mark Rivers [mailto:[email protected]]
You need to change it to: #define MAX_LOCATIONS 1000 int locations[MAX_LOCATIONS]; assign locations to "{tel}{instr}:{mech}:locations"; // where locations is a waveform record with an integer array. Do you mean a waveform record of type CHAR that is used to hold a long string? I think you just declare it as char waveform[MAX_SIZE]; Mark From:
[email protected] [mailto:[email protected]]
On Behalf Of Al Honey Hi I cannot find an explicit example in regards to accessing the element values in a waveform array from within an SNL sequencer. Does anybody have experience doing so? Can’t seem to do this: int locations; assign locations to "{tel}{instr}:{mech}:locations"; // where locations is a waveform record with an integer array. int locs[4] = {0,300,600,900}; pvGet( locations ); locs = locations; // is the declaration for locations (above) correct? error: incompatible types when assigning to type int[4] from type int * locs = locations; This fails too: locs[0] = locations[0]; I guess I’m ignorant in regards to accessing the array values in the record. Also, is it necessary to escape to C in order to update the elements in a waveform string record? Thanks for any advice you have Al |