LPC1768 xTaskCreate() only possible in main()-function?

Hi, have the xTaskCreate()-function always be started out of the main()-function? I cant start both tasks by using my DCLTASK()-function in similar way to the code snippet below. I assume there is a problem with my DCLTASK()-function because if I will use the xTaskCreate()-function out from the main()-function, everything works fine Can someone give me a hint?
# header file
struct rtosTask
{
    pdTASK_CODE pvTaskCode;
    signed portCHAR pcName;
    unsigned portSHORT usStackDepth;
    void *pvParameters;
    unsigned portBASE_TYPE uxPriority;
    xTaskHandle *pxCreatedTask;
};

typedef struct rtosTask RTOSTASK;

void DCLTASK(RTOSTASK task);
# function DCLTASK
void DCLTASK(RTOSTASK task)
{
xTaskCreate(task.pvTaskCode, task.pcName, task.usStackDepth, task.pvParameters, task.uxPriority, task.pxCreatedTask);
}
# main()-function
RTOSTASK task1, task2;
// Task 1
xTaskHandle xHandle1;
task1.pcName = "Task1";
task1.pvTaskCode = vTask1;
task1.uxPriority = 1;
task1.pxCreatedTask = NULL;
task1.usStackDepth = 1000;
task1.pvParameters = NULL;

// Task 2
xTaskHandle xHandle2;
task2.pcName = "Task2";
task2.pvTaskCode = vTask2;
task2.uxPriority = 2;
task2.pxCreatedTask = NULL;
task2.usStackDepth = 1000;
task2.pvParameters = NULL;

// dont work!
// DCLTASK(task1);
// DCLTASK(task2);

// works! but I dont understand the difference to DCLTASK()
xTaskCreate(task1.pvTaskCode, task1.pcName, task1.usStackDepth, task1.pvParameters, task1.uxPriority, task1.pxCreatedTask);
xTaskCreate(task2.pvTaskCode, task2.pcName, task2.usStackDepth, task2.pvParameters, task2.uxPriority, task2.pxCreatedTask);

LPC1768 xTaskCreate() only possible in main()-function?

Are you sure the tasks are being created? One big thing to note is that your DCLTASK will get the RTOSTASK structure BY VALUE (i.e. a copy), so that the anything set by it in xTaskCreate will be thrown away.

LPC1768 xTaskCreate() only possible in main()-function?

You are right! Maybe it’s not the most efficient way to program MCUs but if I create only one task (by using DCLTASK) then it works. Same procedure with two tasks, no chance …