Double pointer "freeze" on uC

Guest #2064451
Rate this post
useful
not useful
Hello folks!

Iam currently working on a project with the XC2785X-104F Controller, 
uVision 4 and Keil C166 Compiler.
Within my code i have to work with matrices and several matrix 
calculation. Therefor iam working with double pointers, structs and 2 
dimensional arrays.

######################## Code snippet ####################

#################################### matrix struct (incl col,row)

typedef struct {
  int  row;
  int  col;
  }  MATHEAD;

typedef struct {
  MATHEAD  head;
  /*
  * only the starting address of the following will be
  * returned to the C programmer, like malloc() concept
  */
  double  *matrix;
  }  MATBODY;

typedef  double **MATRIX;

#define  Mathead(a)  ((MATHEAD *)((MATHEAD *)(a) - 1))
#define MatRow(a)  (Mathead(a)->row)
#define  MatCol(a)  (Mathead(a)->col)



############################################# struct to work with

typedef struct {
  MATRIX A, B, C;
        double var;

}structure;

############################################ func to "create" matrices

MATRIX  mat_creat( row, col, type )
int row, col, type;
{
  MATRIX  A;

  if ((A =_mat_creat( row, col )) != NULL)
    {
    return (mat_fill(A, type));
    }
  else
    return (NULL);

return (A);
}

MATRIX  _mat_creat( row, col )
int row, col;
{
  MATBODY  *mat;
  int   i;


   if ((mat = (MATBODY *)malloc( sizeof(MATHEAD) + sizeof(double *) * 
row)) == NULL)
    return NULL;//(mat_error( MAT_MALLOC ));

  for (i=0; i<row; i++)
  {
  if ((*((double **)(&mat->matrix) + i) = (double 
*)malloc(sizeof(double) * col)) == NULL)
    return NULL;//(mat_error( MAT_MALLOC ));
  }

  mat->head.row = row;
  mat->head.col = col;

  return (&(mat->matrix));   //(& )
}

###################################################### main.c

structure test1;

// value for var
test1.var = 1.234;

// send data via uart to terminal
send_uart(test1.var);                    // works fine

// create a 2x1 matrix with unknown data
test1.A = mat_creat(2,1,UNDEFINED);

// fill matrix with values
test1.A[0][0] = 0x00;                    // <--------- causes uC-freeze 
at this point


// send data via uart to terminal
send_uart(test1.A[0][0]);                // is not delivered
send_uart("TEST\n");                     // is not delivered



##################### END Code snippet ##############################

If i comment that line out (// test1.A[0][0] = 0x00;) everything works 
fine.
If not, there is no error nor a warning from the compiler. Just a freeze 
on the uC.

Does anybody know where the problem is?
Did anyone make similar experiences??

I hope someone can help me!

thank you!
Guest #2065213
Rate this post
useful
not useful
hi,

because i didn't understand your code depply - i have tested your code 
inside devstudio 2010. Except you forgot to post the function mat_fill() 
i cannot see any problem. However - do you have had a look to the 
assembler output ?

regards ,
T
Guest #2065811
Rate this post
useful
not useful
Hi T!

The code is working now - it was a platform-own function which 
initializes the memory management routines and which was missing.
Afterwards i could use malloc etc. and write values to the matrices!

Despite of that, thanks for your work!

Reply

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now