How to create task in suspended state ?

malloy1980 wrote on Thursday, May 10, 2012:

How to ctreate task in suspended state ?
It is necessary that, after creating a task was suspended state.

void MyTask(void* arg)
{
   vTaskSuspend(NULL);
   for(;:wink:
   {
      …
   }
}

This option is not suitable, since the problem may be a low priority and “vTaskResume” for this task will be called before than it takes control.

rtel wrote on Thursday, May 10, 2012:

Before the scheduler has started it is possible to create a task, then suspend it, using the standard FreeRTOS API functions.  Then, when the kernel is started, the created task will already be in the suspended state.  There is no way of doing this after the scheduler has been started though.

However, if the scheduler is already running, and task A creates task B, then task B will not run if it has a priority below task A until task A blocks.  Therefore task A can create task B and put task B into the suspended state, knowing there is no way that task B could have executed.  If necessary, task A could temporarily raise its priority before creating task B to ensure its priority is above that of B, then lower its own priority back to its original value once task B was created and safely suspended.

Hope that helps.

Regards.