Task pausing

sly76 wrote on Thursday, May 19, 2011:

Hi I have a system that, at the moment dose not use preemption (that may come later) so I want the task to pause (not a timed delay) in order to let the other tasks run. From what I can see I have 2 options, vTaskDelay(0) or taskYIELD().

1, Does vTaskDelay(0), with delay = 0, give the behaviour as taskYIELD()?
2, Do either of these let all tasks, of all priorities, to run before resuming the calling task?
3, If not, will ALL tasks of the same priority be given the chance to run before resuming the calling task?

Thanks for any help

simon

davedoors wrote on Thursday, May 19, 2011:

vTaskDelay(0) and taskYIELD() will have the same end behavior, but vTaskDelay(0) will take longer to run. Both will force a switch to another ready task that has an identical priority, neither will allow a task that has a lower priority to run. You can call vTaskDelay() with a non zero value if you need tasks that have a lower priority to run.

sly76 wrote on Thursday, May 19, 2011:

Thanks Dave,

Just to clarify, will ALL tasks of the same priority (and in the ready state) run before the calling task resumes?

davedoors wrote on Thursday, May 19, 2011:

Yes, they should do.