xSemaphoreTake and xSemaphoreGive

    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?

xSemaphoreTake and xSemaphoreGive

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?