TaskCreate from within a task?

kreinims wrote on Thursday, January 18, 2007:

this question surely is rather stupid and
answered somewhere in the docu, but as
I couldn’t find the answer yet:

Is it possible to start a new task from
within an already running one?
Or must all tasks be created in main()
before starting the scheduler?

Thanks :wink:

rtel wrote on Thursday, January 18, 2007:

Yes it is possible to create one task from another.

Take a look at the file FreeRTOS\Demo\Common\Minimal\death.c for an example.

In this example the task vCreateTasks() periodically creates a set of ‘suicide’ tasks.  The suicide tasks just delete themselves, or another of the suicide tasks.

One thing to watch our for is the memory management.  Creating a task uses memory from the heap.  Deleting a task frees the memory.  This is ok if you are always allocated the same size blocks (as in the example), but could suffer from memory fragmentation resulting in an inability to create a task.