# Get_Gyro_Angle() overflows beyond about -20000 deci-decgrees?

I’m trying to make an approximate lap counter by dividing the accumulated gyro angle by 360 (or 3600, since I’m working in decidegrees).

It works up to 5 laps, then the gyro value seems to wrap around to the positive side and start decreasing. I’m using long ints for the calculations. Here is a simplified version of the code…

``````  long int gyroAngle;
unsigned int  numLaps = 0;

gyroAngle = Get_Gyro_Angle();
if ( gyroAngle < 0L ) gyroAngle = -gyroAngle;  //absolute value.

numLaps = (unsigned int) ( (gyroAngle) / (long int)3600);
printf( "gyro: %5ld LAPS = %2d
", (gyroAngle), (int)numLaps );

//   etc.....
``````

I looked at the gyro.c code briefly. Get_Gyro_Angle() (below) returns a long int, but there’s a bunch of #defined constants, not all of which sport the decorative “L” at the end. (BTW, does “L” make a literal into a short int (16) or a long int (32)? I checked the compiler manual and didn’t see it defined.)

``````long Get_Gyro_Angle(void)
{
// Return the calculated gyro angle to the caller.
}

``````

Why can’t I get big values out of Get_Gyro_Angle()? e.g. 6 laps = 6 * -3600 = -21600.

gyro_angle * GYRO_SENSITIVITY * 5L is overflowing a long. Kevin’s latest gyro code gives a little more headroom by rearranging the order operations are done to not overflow as early.

Okay, I’ll check out Kevin’s newer code…

BTW, for my current code I dereferenced the macros and got

``````long Get_Gyro_Angle(void)
{
// Return the calculated gyro angle to the caller.