We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
In my project i am incrementing my array 1 and want to find the average of it.
But unfortunately my code is correct when i debugged but it gives an erroneous output when print the output.
I will put my code below can anybody say what is the problem in my function?
float Arr[81][11] = 0; float Ave[81] = 0;
This is my global declaration.
void Monitor_Slot4(void) { if(Slot_4 == 0) { Dev_Curr = fNewVREF_4 / Res; DevCurr_MinLimit = Dev_Curr - PassBand; DevCurr_MaxLimit = Dev_Curr + PassBand; //ROUTINE TO CHECK THE DEVICE VOLTAGE for(r=61;r<=80;r++) { fMonDevVol = 0.0; r = r + 12; fMonDevVol = fReadVoltage(r); r = r - 12; Arr[r][s] += 1; } if(s >= 10) { flt_Average(); s = 0; } return; }
The 's' is incrmented in another function where the control returns after executing the above function.
In the above routine when i watch the value of Arr[r][s] in debug mode the value is correct. But if i try to print the value it is showing a wrong value.
Is this due to memory problem.
void flt_Average(void) { unsigned int u_min,u_max; unsigned int u,v; average = 0.0; Ave[0] = 0.0; if(Slot_1 == 0) {u_min = 1; u_max = 20;} if(Slot_2 == 0) {u_min = 21; u_max = 40;} if(Slot_3 == 0) {u_min = 41; u_max = 60;} if(Slot_4 == 0) {u_min = 61; u_max = 80;} //consider slot_4 is 0 for(u=u_min;u<=u_max;u++) { for(v=1;v<=10;v++) { average += Arr[u][v]; } average /= 10; Ave[u] = average; if((u >= 61) && (u <= 80)) { SBUF= ' '; printf("\n aver is %f",Ave[u]); TI = 0; Delay(10000); SBUF=' '; printf("\n u is %u",u); TI = 0; Delay(10000); } average = 0.0; } return; }
In the above function if i try to print the Ave[u], the value is not '1' since in the previous function the value is always '1'.
I do not know where is the problem is?
Can anybody suggest me where the problem is ?
Thank you.
I had forgot to put the curley braces.