Hi, I made a program that reads data from an MPU6050 and also has a timer interrupt to move some motors.
However some of my Calculation functions are never being called and even when I step through the program it just goes right past them.
I am also experiencing infinite loops in for statements that are larger than 1000;
Does a interrupt subroutine destroy my local variable stack and it get's reinitialized when it returns?
volatile unsigned int count = 0; volatile unsigned int count2 = 0; P8OUT ^= BIT2; P4OUT ^= BIT0; while(count<1000){ count++; P8OUT ^= BIT1; P4OUT ^= BIT3; __delay_cycles(100); P8OUT ^= BIT1; P4OUT ^= BIT3; __delay_cycles(100); } P8OUT ^= BIT2; P4OUT ^= BIT0; while(count2 < 1000) { P8OUT ^= BIT1; P4OUT ^= BIT3; __delay_cycles(1000); P8OUT ^= BIT1; P4OUT ^= BIT3; __delay_cycles(1000); count2 = count2 + 1; } }
This is another bizarre area in my code that I am unsure of what is happening
void DERIVATIVE_CALCX();
void INTEGRAL_CALCX();
void positionCalc();
are all being skipped.
void BYTES_TO_INT() { if(LOCATION_LOOP ==20) { LOCATION_LOOP = 0; } IMU_DATA[LOCATION_LOOP].xAccel = RXData[0] << 8 | RXData[1]; IMU_DATA[LOCATION_LOOP].yAccel = RXData[2] << 8 | RXData[3]; IMU_DATA[LOCATION_LOOP].zAccel = RXData[4] << 8 | RXData[5]; IMU_DATA[LOCATION_LOOP].xRot = RXData[6] << 8 | RXData[7]; IMU_DATA[LOCATION_LOOP].yRot = RXData[8] << 8 | RXData[9]; IMU_DATA[LOCATION_LOOP].zRot = RXData[10] << 8 | RXData[11]; void DERIVATIVE_CALCX(); void INTEGRAL_CALCX(); void positionCalc(); int i = 0; LOCATION_LOOP ++; for(i = 0;i<14;i++); { RXData[i] = 0; } }