FREQUENCY COUNTER FIX

MENTIONED BELLOW IS MY PROGRAM FOR FREQUENCY COUNTER USING INT MAIN() FUNCTION FREQUENCY COUNTING IS GOOD BUT NOT ABLE TO INSERT OTHER FEATURES IN IT AND FACING MANY ISSUES WHILE HANDELING THAT....
I TRIED IT CONVERTING IT INTO VOID SETUP AND VOID LOOP FUNCTION FORM BUT I AM NOT GETTING THE CORRECT FREQUENCY CAN ANYBODY HELP ME OUT IN THIS'

volatile uint16_t   timerOverflow   = 0;    // Timer1 Overflows
volatile uint16_t   Start= 0, End = 0;      //
volatile uint16_t update1 = 0;                 //  Flag
volatile uint16_t count = 0;
double freq = 0.0, freq1 = 0.0;
void InitTimer1(void)
{
  TCNT1=0;                         //SETTING INTIAL TIMER VALUE
  TCCR1B|=(1<<ICES1);              //SETTING FIRST CAPTURE ON RISING EDGE ,(TCCR1B = TCCR1B | (1<<ICES1)
  TIMSK1|=(1<<ICIE1)|(1<<TOIE1);   //ENABLING INPUT CAPTURE AND OVERFLOW INTERRUPTS 
}
void StartTimer1(void)
{
  TCCR1B|=(1<<CS10);              //STARTING TIMER WITH PRESCALER 1
  sei();                          //ENABLING GLOBAL INTERRUPTS 
}

ISR (TIMER1_CAPT_vect)
{
 static uint8_t flag = 1;

 if(update1)
   return;

 if(flag)
 {
   Start       = ICR1;     //Read value counter
   timerOverflow = 0;
   flag      = 0;
 }
 else
 {
   End     =   ICR1;
   update1    =  1;
     flag    =   1;
 }
}
ISR(TIMER1_OVF_vect )
{
 timerOverflow++;
}
int main(void)
{
 pinMode(8, INPUT);
 digitalWrite(8,HIGH); 
 InitTimer1();                        //CALLING FUNCTION INITTIMER1 TO INITIALIZE TIMER 1
 StartTimer1();
 Serial.begin(57600);
 while(1)
   {
     if(update1)
       {
         freq = ((timerOverflow * 65536) + End - Start);
         freq1 = 16000000/freq;
        
         Serial.println(freq1);
         update1=0;
         timerOverflow=0;                        //CLEARING OVERFLOW COUNTERS 
         ICR1=0;
         Start=0;
         End=0;
         TCNT1 = 0;
       }
   }
}

I TRIED IT CONVERTING IT INTO VOID SETUP AND VOID LOOP FUNCTION FORM BUT I AM NOT GETTING THE CORRECT FREQUENCY CAN ANYBODY HELP ME OUT IN THIS'

Please post your attempt at using the standard setup() and loop() form of program, using code tags when you do, and PLEASE STOP SHOUTING

When you have

int main(void) {
    // SOME SETUP CODE
    while (1) {
        // SOME LOOPING CODE
    }
}

you can change it to a normal Arduino sketch as:

void setup() {
    // SOME SETUP CODE
}

void loop() {
    // SOME LOOPING CODE
}

Note: If your 'main()' returns a value, remove the value since loop() returns 'void'.