vTaskDelayUntil versus software timer

I think I am missing something. I seek enlightenment please. Is there a significant difference in carrying out a periodic task using vTaskDelay as opposed to using a software timer?

If you use a periodic task then the task is persistent in that the memory it uses for its stack is always allocated in the system - it does however give you a lot of flexibility to do anything in the task you like in regards to using other API functions, blocking on events, etc.

If you use a software timer then, unlike a task, the timer callback function is ‘run to completion’, in that you start to execute from the top of the function and execute all the way to the end, and exit the function. It is not persistent in so much as it runs in the context of the timer task (the time task has its own stack too, but you are not adding anything to the memory consumption by having lots of timer callback functions). However, timer callback functions are a lot less flexible because if you make a blocking call you will block the timer task, which means no other timers will execute until you leave the blocked state - which is why we say timer callbacks should not block.

Thank you very much. That is clear now.