xSemaphoreTake and xSemaphoreGive

nobody wrote on Saturday, December 10, 2005:

    xTaskCreate( vTestTask, "Task 1", configMINIMAL_STACK_SIZE, (void *) &task1id,tskIDLE_PRIORITY + 2, NULL );
    xTaskCreate( vTestTask, "Task 2", configMINIMAL_STACK_SIZE, (void *) &task2id,tskIDLE_PRIORITY + 2, NULL );
    xTaskCreate( vTestTask, "Task 3", configMINIMAL_STACK_SIZE, (void *) &task3id,tskIDLE_PRIORITY + 2, NULL );

static void vTestTask( void *pvParameters )
{
    int taskId;
    taskId = *((int *)pvParameters);
    while(1)
    {
        gdb_putc(1);
        if ( xSemaphoreTake( xSemaphore, 0 ) == pdTRUE  )
        {
            gdb_putc(‘1’);

            xSemaphoreGive( xSemaphore );

        }
    }
}

I create 3 Tasks,but only task3 works.I want tasks to run one by on,How To Do?

nobody wrote on Saturday, December 10, 2005:

You don’t really provide enough information to be able to give an answer.

How do you know only one task is running?
Are you using the preeptive kernel?
Which processor are you using?
Where is the semaphore created?