Another thought - to supplement Jeff’s. would be to start with the simplest possible task. So simple that you even get rid of the timer. You could have a single, simple task with task code that looks something like…
void extremelySimpleDelayTaskCode( void * pvParameters )
{
// Busy loop for X seconds
vTaskDelay(pdMS_TO_TICKS(15*1000));
}
Given this task is completely self contained (doesn’t rely on a queue or timer) you can use this to verify the time to tick calculation is correct.
Then you can build up from this and try integrating the timer you want.