On Monday, February 24, 2014 22:45:19 Ganesh Jangir wrote:
> Dear All,
>
> Facing problem in calling/accessing SNL Function and global Pvs from
> C. Here is the example I tried.
> _________________________________________________________________
>
>
> program cmcseq
>
>
> string CMC_STATUS;
> assign CMC_STATUS to "CMC_STATUS";
>
>
>
> foreign ssId;
>
>
> // No monitoring
> // No options
> ....
>
>
> ss ss1 {
> state initial{
> when(delay(5)){
> printf("Calling cmcStatus... \n");
> cmcStatus(ssId,"Hello",pvIndex(CMC_STATUS));
>
> printf("Received status is %s\n", CMC_STATUS);
> }state default
> }
> ....
> }
>
>
> C Function is
> %%#include <stdio.h>
> %%#include <string.h>
> %%#include <stdlib.h>
> %{
>
> void cmcStatus(SS_ID ssId,string msg, VAR_ID pvCmcStatus) {
>
> strcpy(pvCmcStatus,msg);
> seq_pvPut(ssId,pvCmcStatus, ASYNC);
> }
> }%
Try to move the #include stuff (and a prototype for your function) to
the top:
program cmcseq
%%#include <stdio.h>
%%#include <string.h>
%%#include <stdlib.h>
%%void cmcStatus(SS_ID ssId,string msg, VAR_ID pvCmcStatus);
The relevant section in the manual is http://www-
csr.bessy.de/control/SoftDist/sequencer/Reference.html#defining-c-
functions-within-the-program where it says:
"""
It matters where the function is defined: if it appears at the end of
the program, it can see all the variable and type definitions generated
by the SNL compiler, so if your C function accesses a global SNL
variable, you must place its definition at the end. However, this means
that the generated code for the SNL program does not see the C function
definition, so you might want to place a separate prototype for the
function in the definitions section (i.e. before the state sets).
"""
Cheers
Ben
>
>
> During Make Warnings are
> ;
> ^
> ../cmcseq.stt:49:4: warning: implicit declaration of function
> ‘cmcStatus’ [-Wimplicit-function-declaration]
> cmcStatus("ss1","Hello",CMC_STATUS);
> ^
> .
> .
> .
> ../cmcseq.stt:149:6: warning: conflicting types for
> ‘cmcStatus’ [enabled by default] void cmcStatus(SS_ID
> ssId,string msg, VAR_ID pvCmcStatus) { ^
> ../cmcseq.stt:49:4: note: previous implicit declaration of
> ‘cmcStatus’ was here cmcStatus("ss1","Hello",CMC_STATUS);
> ^
> ../cmcseq.stt: In function ‘cmcStatus’:
> ../cmcseq.stt:151:3: warning: passing argument 1 of
> ‘strcpy’ makes pointer from integer without a cast
> [enabled by default] strcpy(pvCmcStatus,msg);
> ^ printf("checking if all are connected USE pvConnecetd Count
> Function, Wait UNTIL lISTED PVS are c printf("checking if all are
> connected USE pvConnecetd Count Function, Wait UNTIL lISTED PVS are
> connected \n"); /* configure(&seq,&version);
> printf("Read Configuration parameter here, Calling File Read
> function %d %f \n", seq, version); */onnected \n");
> /* configure(&seq,&version);
> printf("Read Configuration parameter here, Calling File Read
> function %d %f \n", seq, version); */
> In file included from cmcseq.c:4:0:
> /usr/include/string.h:125:14: note: expected ‘char *
> __restrict__’ but argument is of type ‘VAR_ID’
> extern char *strcpy (char *__restrict __dest, const char *__restrict
> __src) ^
> /usr/bin/ar -rc libCMC_SEQSupport.a initTrace.o cmcseq.o
> /usr/bin/ranlib libCMC_SEQSupport.a
>
>
>
>
> The error during run time is .
> seq cmcseq,
> Sequencer release 2.1.16, compiled Sat Feb 22 20:11:22 2014
> Spawning sequencer program "cmcseq", thread 0xd939e0: "cmcseq"
> cmcseq[0]: all channels connected & received 1st monitor
> epics> Calling cmcStatus...
> Segmentation fault (core dumped)
>
>
>
>
>
>
> Also, Where can I found sequencer Examples /tutorial, for accessing
> SNL_Function and Pvs in C. I am referring to Sequencer User Guide
> 2.1.16,already.
>
>
> Thanks and Regards
>
> Ganesh Jangir
>
> =====-----=====-----====> Notice: The information contained in this e-mail
> message and/or attachments to it may contain
> confidential or privileged information. If you are
> not the intended recipient, any dissemination, use,
> review, distribution, printing or copying of the
> information contained in this e-mail message
> and/or attachments to it are strictly prohibited. If
> you have received this communication in error,
> please notify us by reply e-mail or telephone and
> immediately and permanently delete the message
> and any attachments. Thank you
--
"Make it so they have to reboot after every typo." ― Scott Adams
Attachment:
signature.asc
Description: This is a digitally signed message part.
- Replies:
- Re: Accessing SNL Function and global Pvs from C Benjamin Franksen
- References:
- Accessing SNL Function and global Pvs from C Ganesh Jangir
- Navigate by Date:
- Prev:
Re: Error in building epics base-3.15.0.1 on windows XP (32 bit) using mingw Xiaoqiang Wang
- Next:
Re: Accessing SNL Function and global Pvs from C Benjamin Franksen
- 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:
Accessing SNL Function and global Pvs from C Ganesh Jangir
- Next:
Re: Accessing SNL Function and global Pvs from C Benjamin Franksen
- 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
|