I'm using the MCBSTM32C evaluation board. I would like to calculate the angle of the board in relation to the gravity vector. I have no prolems reading the accelerometer. I basically have the gravity vector components as int values. To do what I want to do I have to calculate the length of the vector using the sqrt function in math.h. The sqrt function expects double numbers as input and produces a double result as far as I can tell. I than would like to print the result onto the screen. As soon as I print to result onto the screen the program crashes. I'm not sure if it is the sqrt function which causes the trouble or the print function. Below is some code that leads to a crash. I can print any other value to screen just not double.
double acc_length; acc_length = sqrt(45.98745); sprintf(print_LCD[0], " %lf ", acc_length); GLCD_DisplayString (1, 0, 1, print_LCD[0]);
Thanks, Karsten
Why do you think that?
Again, you haven't shown the definition of print_LCD, but are you sure this is correct:
sprintf( print_LCD[0], " %lf ", acc_length );
Are you sure that shouldn't be:
sprintf( print_LCD, " %lf ", acc_length );
Or:
sprintf( &print_LCD[0], " %lf ", acc_length );
The same line of code works if I replace %lf with %d and the double variable with an int variable. Print_LCD is declared as a matrix since I want to print several lines of data to the screen and this way it is easier to keep track of which data is printed to which line. The declaration is
char print_LCD [5][50];
I'm using the same functions in other places with int and float without problems. It is just that printing of double leads to crashes for some reason which is consistent with what other people reported if the stack is not aligned correctly. Since I only want to print int anyway I should be able to use some type casting as a work around without fixing the stack alignment problem (if that is really the problem).