An Example Using A Master Roll Over Timer To Get Time Since Last Event


//----- DO IN 1mS HEARTBEAT TIMER -----
main_1ms_clock_timer_irq++;


//----- USING THE TIMER -----
unsigned long main_1ms_clock_timer_irq;
unsigned long main_1ms_clock_timer;
unsigned long process_last_time;
unsigned long process_1ms_time_since_last;


  //Create a local copy of the timer (which won't change in the interrupt when being used - if no interrupt then no need to use)
  main_1ms_clock_timer = main_1ms_clock_timer_irq;
  while (main_1ms_clock_timer != main_1ms_clock_timer_irq)    //Use sizeof(main_1ms_clock_timer) != the processor native bit length
    main_1ms_clock_timer = main_1ms_clock_timer_irq;
  

  //Start timing
  process_last_time = main_1ms_clock_timer;


  //Time since start
  process_1ms_time_since_last = (main_1ms_clock_timer - process_last_time);    //Time in mS since last time point with roll over of the timer inherantly compensated for