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!