Task creation in another task

anonymous wrote on Friday, December 06, 2013:

When creating a task within another task as shown below

int main( void )
{

xTaskCreate( vTask1, "Task1", 500, NULL, 1, NULL );
vTaskStartScheduler();

for(;;);

}

void vTask1( void *pvParameters )
{

    xTaskCreate( vTask2, "Task2", 500, NULL, 1, NULL );
}

In this code vTask2 will create again and again in each call of vTask1 right? will that use separate memory for each creation?

rtel wrote on Friday, December 06, 2013:

The code, as you have provided it, is not correct because you show vTask1() exiting its function without deleting itself. Tasks must include an infinite loop, or be deleted. However, I assume you have cut out all the other source code to just show the line of interest.

First - it is perfectly ok to create tasks from inside other tasks.

Second - any call to xTaskCreate() will allocate a TCB structure and a stack for that task. If you create TaskX, then, without deleting TaskX you create TaskY the two tasks will not be using the same memory because both calls to xTaskCreate() will allocate RAM separately.

On the other hand, if you create TaskX then delete TaskX the memory allocated to TaskX will be freed again. If you subsequently create TaskY xTaskCreate() will allocate RAM for TaskY just like normal, and that RAM may or may not be the same that was previously allocated to TaskX. As TaskX has been deleted it does not matter if the same memory is reused.

Regards.