anonymous wrote on Friday, January 27, 2012:
I am running a dsPIC33F at 36.864 MIPS (crystal controlled.) I would like to keep accurate time down to the second.
I thought about using a FreeRTOS software timer; so I made a basic implementation:
#define CLOCK_TICK_RES 40
void vTickClock()
{
pre_tick_clock(CLOCK_TICK_RES);
}
int main()
{
xTimerStart(xTimerCreate("sysclk", (1000 / CLOCK_TICK_RES) / portTICK_RATE_MS, pdTRUE, 0, vTickClock), portMAX_DELAY);
vTaskStartScheduler();
while(1);
return 0;
}
pre_tick_clock just ticks the clock by the required 25ms. I would expect the function to be called every 1000ms / 40 Hz = 25 ms, but it isn’t. It’s called around every 23.91ms, which means it gains a considerable amount of time per second.
Is it just that the software timers are not supposed to be used for precise time keeping or am I missing something?
Thank you