The Math Forum

Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Math Forum » Discussions » Software » comp.soft-sys.matlab

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: read values from ssGetPWork(S)[0]
Replies: 0  

Advanced Search

Back to Topic List Back to Topic List  
user Butt

Posts: 32
Registered: 10/8/09
read values from ssGetPWork(S)[0]
Posted: Mar 7, 2013 2:39 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

I'm having problem in reading the values of a variable whose address is stored in the pointer ssGetPWork(S)[0]. The code for mdlStart and mdlOutput function is as follow

static void mdlStart(SimStruct *S)
// declare and initialize one floating variable
float number3 = 10;
float *number4;
/* Allocate memory for number2 and initalize it to zero*/
ssGetPWork(S)[0] = &number3;
number4 = ssGetPWork(S)[0];
// store the pointer to filename in ssGetPWork(S)[1]
printf("ssGetPWork(S)[0] %f\n",number4[0]);
printf("ssGetPWork(S)[0] %f\n",ssGetPWork(S)[0]);
#endif /* MDL_START */

/* Function: mdlOutputs ===================================================
* Abstract:
* In this function, you compute the outputs of your S-function
* block. Generally outputs are placed in the output vector, ssGetY(S).
static void mdlOutputs(SimStruct *S, int_T tid)
//get pointer to the block's output signal
InputRealPtrsType u = ssGetInputPortRealSignalPtrs(S,0);
float *number = ssGetPWork(S)[0];
// read the input values (Here, 2 elements are taken from mux block)
double clk= *u[0];
double y = *u[1];
// number = ssGetPWork(S)[0];
if (clk!=0 && fmod(clk,120)==0)//(clk/10==0)
{ // increment counter value
printf("ssGetPWork(S)[0] %f\n",number[0]);
printf("ssGetPWork(S)[0] %f\n",ssGetPWorkValue(S,0));

When I run this C Mex S Function, I got the following output

ssGetPWork(S)[0] 10.000000
ssGetPWork(S)[0] 0.000000
ssGetPWork(S)[0] 0.000000
ssGetPWork(S)[0] 0.000000
Now what I can't understand is:
Why this printf function printf("ssGetPWork(S)[0] %f\n",number4[0]); displays correct values, whereas directly using ssGetPWork[0] does not display correct values i.e.,
printf("ssGetPWork(S)[0] %f\n",ssGetPWork(S)[0]);

Furthermore, when the values of ssGetPWork(S)[0] is displayed in the mdlOutputs block, then I do not get initialized values, instead I got 0. I can't understand where is the problem in the code.

Thanks in advance

Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© The Math Forum at NCTM 1994-2018. All Rights Reserved.