Search All of the Math Forum:

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

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

Replies: 0

 user Butt Posts: 32 Registered: 10/8/09
Posted: Mar 7, 2013 2:39 AM

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.