Accurate time with a timer possible?

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

Accurate time with a timer possible?

Oh! I feel like an idiot. The timer duration needs to be a multiple of the system clock time, right? Changed that and it’s keeping much better time.

Accurate time with a timer possible?

*system clock time = RTOS tick time

Accurate time with a timer possible?

Provided your tick frequency is below 1KHz (which it should be), you can set a timer to execute ever second by giving it a period of (1000/portTICK_RATE_MS) where 1000 is the number of milliseconds in a second, and portTICK_RATE_MS is the tick rate specified in milliseconds. portTICK_RATE_MS is defined by FreeRTOS already.